Get a piece of paper. Can you draw a cat for me?
Now, draw it realistically. Then color it black. But I may want to change its color someday. So take that into consideration. I want it to be as large as the paper. But I may want to make it smaller depending on my mood next week. So take that into consideration. Then after you finished drawing it, bury it 100 feet under the ground. But I may want to bury it into another location. So take that into consideration.
Consider all those situations.
Wait. What the f*ck. Can I just draw the black cat and bury it 100 feet under the ground for now? And not worry about those other sh*ts that you’re talking about.
I’m not an artist. But I guess drawing a realistic cat and burying it 100 feet under the ground is challenging enough. But with all those situations that you need to consider while drawing it, the complexity increases dramatically.
I will color it black but you want me to take into consideration that you may want to change its color in the future. WTF? Will I use an erasable paint? Will I create thousand exact copies of a colorless cat, so I can easily create a differently colored cat?
Creating something that is flexible to handle different situations is so hard. BLOODY HARD.
But some clients don’t understand that. They just give vague requirements and just throw you countless situations and possibilities that you must consider in your code implementation.
“Can you do it this way for now? But we may change it, so take that into consideration and make sure we can easily change the way it works.”
Wait. Did he just said EASILY?! This is madness! Changing almost the whole architecture of the code cannot be done just by a couple lines of code nor a single click of a button. It is f*cking complicated.
Code flexibility is complicated. It is coding for a requirement that is not really required. It is like fighting with one ninja while trying to protect yourself from 500 ninjas that may appear in the future. It’s that complicated. You are dealing with one problem while thinking with other problems that didn’t need to be solved yet. In other words, Coding for flexibility is unnecessary work.
So can the clients make up their mind first before throwing wild ideas to the programmers?
Hmmm. Nah. They’re too busy to waste their time thinking about those critical ideas. It’s our job as programmers to convert their ideas to working code anytime. Besides we are professionals, we must be able to change our codes easily. Yeah. Right. Easily.