We were once building a logs processing system and there was a design deep dive on how to structure the key of records where these logs will be stored. There were a number of inputs given, ideas brainstormed, future proofing of the solutions evaluated, efficiency of processing the key from database standpoint were analysed and so on. Team finalized the structure of the key – it was a long key, some 50 bytes or so in length, constructed by concatenating 4 different attributes taken from the log.
This system went for user testing and somewhere during the testing, it started to process a certain log file. The engineer who analysed the issues sends out a mail with below quote:
“If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization” – Weinberg’s second law
There was an issue with the way record key was designed and the entire workflow failed when that bug was exposed by this test data. This incident remains in my memory every time I get into design discussions and keep hearing all kinds of ideas (most often, good ones) from teams.
The importance of software designs is not just limited to the application being built, but it also impacts the project success and more importantly, the product features. Hence any design decisions taken in isolation are prone to fail when the actual end users eventually start using the product.
This blog series will highlight the key design approaches that I personally found to be helpful for successful execution of projects and products. I use the terms project/product and not software application here, deliberately. The design approaches discussed in following posts will not be deeply technical in nature. New and experienced will however find the guidelines useful when they sit across a table to finalize design for their applications.
Have your own views on this topic or this post? I would really love to hear from you. Please use the comments section below to share the same. Or, email me at firstname.lastname@example.org. Or, tweet me @VijayIvaturi!