Over Engineering, and “Engineering is Over…”
I was already dealing with the Monday blues, to top it was going through a complex piece of code which I originally thought was one of the greatest scripts one has written. However, half an hour passed I realized it was doing way more than what was required and was the cause for a functionality failure at many places for the product. In the next 20 minutes, I was already feeling the need to have someone get me out of that seat and punch me in the face for originally liking that junkie!
I leaned back on my chair, hands behind my head and closed my eyes for a minute …
10 years back when I used to think of software, for me it was like something so cryptic and complex written that no one else could understand, other than me. In fact, sometime it was worse. Anyway, when I later started writing commercial code and fixing thing in others code, I realized code readability is so much important. My next myth busted when one of the customer said, “The functionality you have provided in the website is great add-on, but actually I wanted something else which woes my customers – definitely the stuff you have provided is great for the geeks, but actually my site is going to be viewed and used by no-brainers”. End of the story – my complete effort of 2 night outs have gone in vain, I will have to throw the code into “Recycle Bin” and my friends are going to “kick my”, for skipping the booze party.
I think this oxymoron of a concept has stemmed from various myths about how software needs to be authored. I am no scientist to write a specification on that… but surely I feel User Experience is the ultimate thing. This UX and Usability are tied together, no matter how stable and sturdy your kernel (software that runs your laptop and computers) is, if you can’t reach to the consumer, you have just wasted enormous amount of time and efforts, which could have been used to add a usable functionality and have expanded your customer list.
Most of the programmers write code without knowing about what is the actual business need. For them it’s more of completing an agile task in hand for the day and that’s it! This accumulates over time and the final product is completed with “hacks and wrecks”. When product is consumed by the customer, he knows his business better than anyone out there and then he starts finding flaws resulting in higher number of issue reporting and lower customer satisfaction.
So finally, what I have realized over the years is,
Business drives technology and it’s never upstream. So understand the business.
Use technology like a hammer – it is not meant for learning and dumping a big fat code which would finally land in trash, you should just know how and where to use it effectively to nail customer needs.
Keep a holistic approach – Don’t write a single piece of code until you understand the business need. If possible start with business test cases.
DO NOT over engineer, it kills big time! Always code for User Experience, Performance and Scalability, and meet the need of the hour, max tomorrow, and not day after and henceforth!
Okay enough of lecturing to my senses, time for a coffee break, after all I still come back and need to cope up with the trauma of fiddling with that rocket science that has been put into, just to search a node in a directed graph. Damn it! I opened my eyes, leaned forward, picked up my dear mug and headed to the coffee corner.
By the way, I hate that coffee machine as well in office, though it does make all sorts of classy coffee but still can’t figure out which button to press to just get some milk, somebody just over engineered and forgot the UX! I overheard someone talking about plans to get a simple coffee machine installed :)
Do let me know what do you think of complex code and also share your similar experience.
PS: The comic images do not belong to me and may be copyrighted, in case they are, please feel free to drop me an email.