Tweaking TCP for Real-time Applications: Nagle's Algorithm and Delayed Acknowledgment

TCP is a complex protocol.

Don’t get me wrong. It is a marvelous piece of engineering that gives us the reliable data transmission guarantee that other protocols don’t provide. Reliable data transmission between two devices on the internet is no walk in the park and TCP uses a lot of magic under the hood to make things happen. Generally, it does a fine job of abstracting away low level details and its default settings work fine for most general purpose use cases. However, once in a while, things don’t go according to plan and we need to pop open the hood and do some tweaking. It is in these situations, that some knowledge of TCP comes in very handy.


Cluster Analysis Using K-means Explained

Clustering or cluster analysis is the process of dividing data into groups (clusters) in such a way that objects in the same cluster are more similar to each other than those in other clusters. It is used in data mining, machine learning, pattern recognition, data compression and in many other fields. In machine learning, it is often a starting point. In a machine learning application I built couple of years ago, we used clustering to divide six million prepaid subscribers into five clusters and then built a model for each cluster using linear regression. The goal of the application was to predict future recharges by subscribers so operators can make intelligent decisions like whether to grant or deny emergency credit. Another (trivial) application of clustering is for dividing customers into groups based on spending habits or brand loyalty for further analysis or to determine the best promotional strategy.


Certificate Authorities - Do You Know Who You Trust?

HTTPS (aka HTTP over the secure TLS protocol) provide a secure communication channel between web browsers and servers to guard against man-in-the-middle attacks. Although researchers have identified and reported a few vulnerabilities, TLS is still the best option out there and all websites should be using it.


Testers Make Software Teams Highly Productive

To put it mildly, developers are not great at testing their own products. Bias, pride, wrong assumptions, lack of time, switching contexts, all play a role in making developers ineffective at testing their code. Most companies, especially startups, don’t fully understand the role of a tester. Very early on in my career, we made the mistake of hiring people to be testers who applied for a software developer position but weren’t good enough programmers. We paid for it in terms of software quality and over-worked team. It wasn’t until I worked with some great testers that I realized how effective and productive software teams become when they have great testers on board.


Yak Shaving - the Less You Do the Better

The term yak shaving was coined at MIT back in the 90’s.

Yak shaving is what you are doing when you’re doing some stupid, fiddly little task that bears no obvious relationship to what you’re supposed to be working on, but yet a chain of twelve causal relations links what you’re doing to the original meta-task.

I asked a QA tester to test a simple HTTP/REST application. A task I thought shouldn’t take more than a few days. A few days later:

Me: “How is the testing going?”

QA: “Going alright.”

Me: “Any luck catching them bugs yet?”

QA: “Haven’t started writing tests yet.”

Me: “Huh?

QA: “I was setting up the testing environment in all its glory. Once it is done, I will update the test client to dynamically fetch the server-side configuration to the tests are run with the right expectations… Didn’t you see my Scrum board this morning? All of the yaks I need to shave are listed under the parent story.”