- Why is software development reminiscent of the Whack-A-Mole game?
- Why is it always “unfinished” business?
- Why do we have so many starts, and so few finishes?
- Are the people in software development so immature, so they can’t finish what they started?
- Why do we have sooo many programming languages (especially in web development), and frameworks (especially in FE)? Is any particular one significantly better than the others?
- Why are we paying so little attention to WHAT we are building, and so much attention to HOW we’re doing it?
These, and many other, questions are popping into one’s head, while trying to wrangle the thing called software development. Yes, programming as a discipline prides itself on being modeled after the “real” world (e.g.OOP). However, it’s nothing like that. Can you imagine a car, or a building, being built the way software is being built? It would be an ugly, unevenly developed car, that nobody could fix after it’s being shipped: you could never be sure whether it’s going to start, or stop unexpectedly, or guide you to the nearest ditch, without a clear reason.
Who’s to blame? There are many elements to that. I’ll attempt to list some of them below:
Lack of planning/organization/resources
Very little attention is paid to planning, figuring out/deciding, and having clear and concise plans of what we want to build (of course, there are exceptions to this, but very few and far between). To extend the previous analogy: can you imagine someone attempting to build a building, without detailed, clear, and concise blueprints? Of course not, because it doesn’t happen. Yet, in software development, that’s the norm. We have hosts of UX designers, project managers, scrum masters, etc. and one would think that would be sufficient to have a clear and detailed picture of what we want (to build). In reality, more often than not, devs are receiving half-baked requirements, no clarity whatsoever, and then they (devs) have to chase down all the requirements that are missing. Would this be happening in construction: would carpenters chase engineers for things that they’ve missed? No, engineers wouldn’t be able to submit plans that don’t list all the details (they’d be fired if they continue to do so). Most software out there looks more like a result of happy accidents, than (a result) of conscious, planned activity.
Lack of responsibility
… and a clear definition of one’s duties. I’m not saying that this is as widespread, but - a large portion of software shops out there operate that way. Multitasking is a norm, and most people, while they multitask, aren’t able to focus on the task at hand. “DevOps” mentality? Agile? Please!. If devs are to get involved in all aspects/stages of building software… why do we have all those other people? Everything becomes a “hero” type effort, without a chance to deliberate and focus. Programming should (and is) a contemplative activity. Pushing devs into new roles that they’re not equipped to do doesn’t do any good to anyone.
We have a structure like this:
- Business stakeholders - generally, they’re just shooting in the dark, guessing, and have no clue what they want and how things work in a selected domain. Plus, they treat their subordinates as wish makers: let’s see what we can do.
- Middle management - Busy, stretched, mostly without any deeper knowledge of the domain they’re dealing with. They’re trying to make something, but that “something” most of the time clashes with what’s possible/reasonable.
- Devs - Depending on experience, they have deep knowledge about the domain, but nobody listens to them. They’re resources, to fulfill the wishes of higher-ups. So, they end up building stuff that they know is doomed, but they’re required to do so.
And this structure perpetuates into infinity.
New white-collar class
Software development used to be - back in its early days - a field for dedicated professionals, with proper education, and talents. Since it became lucrative, and every company out there jumped on its bandwagon, people working in the software industry are mostly inadequate, former white-collar office workers that switched to “software” because - it pays well and it’s available.
To extend the construction analogy even further: please do not attempt to put new granite tops in your kitchen. You don’t know/experience/tools to do so. Call a contractor to that for you.
To all those wannabe “software” companies out there: please do not attempt to build your software in the house. It would cost you dearly, and you won’t get what you were hoping for. Call the professionals.