25th October, 2022 It's All Design
Building custom software works differently than other custom-designed things that you may be familiar with. Approaching custom software development the same way as, say, designing a house or custom-ordering an automobile is misguided.
You see, when you design your car or house, you work to create some sort of specification: This many bedrooms. This color of interior. These options. Those features. You may even recruit a professional designer or architect to help you make these decisions. Then, after the design is complete, construction begins.
Now, with your car or your house, construction is the expensive part. It'd be incredibly wasteful to rebuild a new house or a new car repeatedly in order to explore different variations on a design decision. It'd be wasteful even to redesign and rebuild portions of a house or car while solidifying the specification. But, with custom software development, it works differently.
Construction is the cheapest part of software development. This is the process of turning a comprehensive specification about the software's behavior into an actual working program. For most software, it costs a few dollars, takes less than an hour, and is usually completely automated. Programmers aren't the ones doing the construction - computers do it much better than humans.
The programmers are the ones defining and refining that specification. To be clear, the program's code is the specification: the single, authoritative source for every specific behavior that the software should perform. The process of creating and updating that specification—programming—is a design activity. Programming is the invention and refinement of the program's specification. Programming is design.
So, when you're paying for custom software development, you're not buying hours of a construction crew's time. You're hiring professionals to create and refine a specification for you. You're not creating the spec, just as an architect's clients don't create the blueprints. There's practically no construction in custom software development.
It's all design.