Here is the situation: Bob’s Phone Cases wishes to succeed as a business. They know they need need to have programmers for various reasons. Since they have programmers, they will be tempted to make software. They will want to be careful with time and resources so they will want to plan their programming efforts.
When Bob’s Phone Cases starts to plan software development it will make the most common blunder associated with creating software. They will equate Application Engineering and to Construction. They will treat a programmer like a nail gun. Then when they start missing deadlines and completing features after they could have made a splash.
Commonly, the first thing they will do to try to fix this is make their next mistake: they will add people.
This is a scenario I have been through repeatedly. Some times, particularly early in my career, it was my own fault. “What did we do wrong? Why can’t programmers hit deadlines? We doubled our programming staff and now everything has fallen apart! Start looking for your next job now…”
If your experience tells you that Software is anything like construction or manufacturing, you would be partly correct. I see posts that building software should be more like Aerospace, construction, auto manufacturing. What these people miss is that it is.
The fact is that software is incredibly efficient when it comes to the practices that can be compared to construction and manufacturing. In most environments I have worked in these processes have been reduced to a button click. ‘Build’ is what I press and the job is done. It is done faster if I have a faster computer, more computing power thrown at the problem makes it go faster. When I click ‘Compile’ everything that is as complicated as building a 747 happens. When I hit ‘Publish’ not only does it build the thing as elegant as a Hennessey Venom GT, but it does the equivalent of dropping it on the customers doorstep before they even know they want it. If you are looking for absolute predictability and structure, it ends here.
Over my 20+ years dealing with software I have been hired by business that run programmers like they think they are plumbers. Programming is like plumbing right? The programmer fills in the path from the sink to point B and puts a nice trap in the middle to keep it smelling nice. There is that aspect, but it goes further. Programming adds fabricating the pipe. This is always done in a entirely customized fashion.
If building software was like plumbing it would be like the home owner wants to specify what the pipe is made of and a shape that makes them feel good. Maybe one that isn’t even a tube. They want to specify the path it takes making statements like “Water should not flow under the house! It should flow suspended through my living room. Oh and can you make the toilet swirl in the other direction?
There is that moment when the business owner or manager becomes drunk with the power of customization and they begin changing their mind, barking orders sending coders in circles and chasing problems that don’t exist. But most of this is in addition to the core complication: software, on most levels, is a creative or engineering task.
The easiest first step is to never say ‘build software’. Programmers don’t build it, computers do. When a builder sets out to build a house they first need to get a sound plan. They get the product of an architect and drafter and then they build what it is, like when I click ‘Compile’. When I click ‘Compile’ I am sending my blueprints to builder for building. This builder is so efficiently stoic that he will build it out with the flaws I specify.
When I am writing code, I am working out a proof, a design, a blueprint. I am dealing with every minute detail to keep my doors far enough away from walls that people can travel down the hallways of my creation. I am specifying a sound structure that will do things like handle winter snow with a steep enough pitch to shed the load when it is too much.
In another universe, when Bob’s Phone Cases decides to go down the road of custom software, they realized they are adding creatives and engineers, like the great folks that conceptualized and developed their product. And that building part, we outsourced that for cheap.