"Make it large" is the mantra these days, but when it comes to releasing software, think the opposite, make it small. The secret to a successful release is to break it into numerous small deployments; this serves a dual purpose, minimizes risk as well as gives you enough leeway to fix bugs before it negatively … Continue reading Make It Small
Tag: architecture
Now You See Me
In the modern software world, where micro-services are de rigueur, observability of systems is paramount. If you do not have a way to observe your application, you are as good as dead. W A T A R I The first step towards embracing observability is figuring out what to track. Broadly, we can categorize software … Continue reading Now You See Me
Poor Man’s Anomaly Detection
You have a feature where if someone signs up on your product, you create a wallet for that person and top it up with complimentary money. Your organization swears by micro-services; hence sign-up logic is in one service and wallet creation and crediting is in another service. Once a user signs up, sign up service … Continue reading Poor Man’s Anomaly Detection
Ode To Queues
If you have a producer with an uneven rate of production and a consumer that cannot keep pace with the producer at its peak, use a queue. If you have a workload that need not be addressed synchronously, use a queue. If your customer-facing application is riddled with workloads that can be deferred, move these … Continue reading Ode To Queues
Anti Features
When evaluating new technology, framework or library; a lot of importance is given to the salient features. While it is very important to know the positives, the negatives usually tend to be glossed over. Being aware of the shortcomings of a framework gives one the ability to anticipate problems down the road. For example, let … Continue reading Anti Features
Testing legacy applications
When contemplating on introducing automated testing in legacy applications, it is easy to get bogged down in terminology; unit testing, integration testing, regression testing, black box testing, white box testing, stress testing, etc. Quite a bit of time is spent in debates on unit testing versus integration testing, I have written about this before too. … Continue reading Testing legacy applications
SQS versus Kinesis
A lot of people are confused between SQS and Kinesis. In some ways, both act as a queue, but there is a massive difference between the two. SQS is a queue, adheres to FIFO and promises at least once delivery. Kinesis is a distributed stream processor. A simplistic and hand-wavy way to think of Kinesis is like … Continue reading SQS versus Kinesis
Nothing is sacrosanct
There is an interesting bug opened against Kafka. For those of you too lazy to click on the link and read through the description, I am reproducing it here in full.It appears that validation of configuration properties is performed in the ConsumerConfig and ProducerConfig constructors. This is generally bad practice as it couples object construction … Continue reading Nothing is sacrosanct
Designing for failure
In the world of software, failure is a certainty. Servers go kaput, databases go down, processes go out of memory, things break all the time. You can categorize software as good or bad based on how they behave in these adverse scenarios. I am not trying to imply that software has to be resilient to … Continue reading Designing for failure
Mental model of systems
One beautiful Sunday evening our quartz jobs running inside tomcat server started to freeze. At the same moment, tomcat went kaput. I sshed into the server and started poking around the logs. No error in logs. Hmm, ok. Checked the system health, again stats looked hale and hearty. Now, what do I do? I started to reason around … Continue reading Mental model of systems