Creating Quality Software

Creating software is easy; creating quality software is hard. In today's world of umpteen open source libraries, cloud computing platforms, and StackOverflow, creating software is child's play. You can look up things on the internet, glue together components, and voila - you have created something. What is hard is creating quality software. Software that scales; … Continue reading Creating Quality Software

“Intentionally” Leaky Abstractions

Software abstractions that developers create should leak enough to let non-developers design the right product experience. Eons back in internet history, Joel Spolsky wrote a post on leaky abstractions. The gist of the writing is that even though we create software abstractions to make life easy, they somehow unintentionally leak through. With technology getting a … Continue reading “Intentionally” Leaky Abstractions

Competitive advantage

Are you focussing on developer productivity? If not, read why you should. Technology is getting commoditized. In the yesteryears, you could have counted on your software frameworks and technologies, hardware prowess, access to capital and talent pool as significant competitive advantages. In a world, which is getting commoditized day by day, the access to these … Continue reading Competitive advantage

Knowing Versus Doing

Over-engineering is ripe in the software industry; this mainly manifests in three ways: 1. Needlessly complicated design. 2. Lift and shift engineering - Picking up technology and practices from other places without understanding the context in which it was developed. 3. Being trendy - Using frameworks and languages that are currently in fashion irrespective of … Continue reading Knowing Versus Doing

Sherlock Versus Calvin Ball

We can classify software development into: 1. Maintaining and enhancing existing software. 2. Software development from scratch. Given a choice between the two, developers usually gravitate towards from scratch development. Developing something from scratch is an intensive creative work where you have the freedom to shape the product the way you see fit. Hence, it … Continue reading Sherlock Versus Calvin Ball

Switching Languages

Many are apprehensive about switching programming languages. It is perfectly fine to have preferences - I am heavily biased towards statically typed languages with great tooling support, but being dogmatic is not something one should aim for. What could be the downsides of switching programming languages? I am disregarding the psychological aversion to change and … Continue reading Switching Languages

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

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