Imagine that you want to buy a new car because the old-one is … really old, you got sick of it and you need a change. You go to a car dealer, you see a couple of models that you like and you ask them for some details, pricing etc. The salesman full of smile replies to you with the following question:”Do you want a car with wheels, brake or throttle?”. Note that these are XORs, You can have only one of them. How would you react? Don’t answer … it’s a rhetorical question!
Imagine now that you work for a software development company and a customer wants you to build a system for an online ticketing platform. Would you (or your sales department) ever ask him to choose one of the following : “Reliability, performance, code quality, alignment with business requirements”? Of course not! So why do we make such choices during the development life-cycle? Why do we sacrifice so many and obvious things when we write software? And please don’t tell me that we don’t have enough time or enough budget. We do have time and budget to fix all these bugs that we created because we have made such ugly choices, right?
I don’t understand why I have to choose between doing the right things, over doing the things right. I don’t understand why I have to write performance-friendly code no matter how difficult is to understand it. I don’t understand why I have to make choices. Would you ever buy a car if you knew that there are no security tests before the car gets into production? Would you ever buy a car if you new that the interior is from such (poor-quality) materials that they’re going to break after one month or melt during a warm day? So why do you build systems like this? Why do you allow yourself be a part of that?
Unfortunately, everyday we make such choices or we are forced to, by these creatures called managers and It’s really disappointing that we don’t learn from our mistakes. So wake up!
Managers : Listen to your senior and experienced developers. Even prime-ministers have ministers and kings have consultants! (nobody is perfect)
Developers : Fight for your right to achieve perfection. Fight for your right to write code you’re proud of and creates less bugs (nobody is perfect)
Customers : Fight for your right to get high-quality software that meets your business requirements. It’s your money after all!