YAGNI, Cargo Cult and Overengineering - the Planes Won't Land Just Because You Built a Runway in Your Backyard

It was April. Year was probably was 2010. The cold, snowy winter was finally coming to an end and the spring was almost in the air. I was preparing for my final exams. The review lectures were going on for the RDBMS course that I was enrolled in at my university.



Caching Strategies and How to Choose the Right One

Caching is one of the easiest ways to increase system performance. Databases can be slow (yes even the NoSQL ones) and as you already know, speed is the name of the game.



Basics of Java Garbage Collection

  • Knock, knock.
  • Who’s there?
  • …long GC pause…
  • Java.


It’s an old joke from the time when Java was new and slow compared to other languages. Over time, Java became a lot faster. Today it powers many real-time applications with hundreds of thousands of concurrent users. These days, the biggest impact on Java’s performance comes from its garbage collection. Fortunately, in many cases, it can be tweaked and optimized to improve performance.


Message Batching to Increase Throughput and Reduce Costs

A while ago, I was working on a backend system on the AWS cloud. Individual services in the system communicated by exchanging asynchronous messages with each other using Amazon SQS. During early stages of development, we ran small load tests and found that CPU use was high and we would need more servers to handle the load. (Estimated peak load was 50,000 requests per second.) Services were generating lots of small messages every second and the profiler showed that threads responsible for handling and sending messages to SQS, one message at a time, were using CPU more than they should. This was affecting performance and throughput.


At Last, Amazon adds DynamoDB Auto Scaling

Earlier this month, Amazon added a long-requested feature with the introduction of auto scaling to DynamoDB. This allows read and write capacities of DynamoDB (of tables and global secondary indexes more accurately) to be adjusted automatically based on the demand. If you haven’t used DynamoDB before, you might be wondering why is this important? One reason: cost. DynamoDB charges you by how much you provision. You end up paying the full cost by provisioned amounts, even if you use less. In other words, if you overprovision (e.g. for peak load), you’ll pay extra during the non-peak hours, when it is used less. On the other hand, if you underprovision (e.g. for average load), the performance of your application will suffer due to throttling when load exceeds the provisioned capacity.