There is a lot of talk about the shortage of software development resources and what to do about it. Too often the discussion focuses around the need for “coders”, as though software development is a manufacturing process and simply about writing code. Well technically you can’t get your software developed without doing some coding, but is it really that simple? Here is a list of requirements, go code it?
Let’s delve into this a little further…
You want to develop a piece of custom software that does something so specific you can’t use an off the shelf solution. It can be an expensive endeavor, but you feel it will easily pay for itself in short order with increased productivity or value to your customers. You only have one chance to get it right and it can’t turn into a maintenance nightmare. So, who can you trust to implement your vision?
It’s Called Software Engineering for a Reason
Software engineering is like any other kind of engineering. When done right you get a structurally sound product that delivers the desired functionality, gracefully handles the unexpected actions of users and other outside forces, is easy on the maintenance budget and in general stands the test of time. Because you are building the entire product from the ground up, thoughtful design and engineering is required at every level of the solution. The finest architectural design can be brought down by the weakest link. Just like a poorly designed part can bring down an otherwise well designed machine.
Unless you live under a rock, you have surely heard that there is a shortage of software developers, or in some case the word “coders” is used. There are efforts being made to address the shortage on many levels, but the most visible is the coding boot-camp concept. Boot-camps are schools that offer an intensive program over a short period of time (e.g. 12 weeks) to teach students how to write—or code—software. Compare this to a four-year computer science degree that includes intensive training in software design, extensive coding and higher math (i.e. calculus), not to mention degree requirements and electives in writing, public speaking and business. Even then, new college graduates require months of on the job training and mentoring before they are on the path to being engineers. Logic, problem solving and perseverance are ingrained once you complete this gauntlet.
Fast, Good or Cheap: Pick Two
How will all that education and training make a difference you ask? Immediately tangible results can include concise communications, business acumen and a lot less hand-holding. But a less obvious and longer term result that comes from a professional team is an engineered design that does not require a rewrite or becomes unstable when new features are added or modified. For example, one of the most common mistakes made by inexperienced coders is not knowing where to put the code for a new feature or enhancement. The tendency is to a put it all in one place, or egad, copy it to multiple places, and provide an incomplete solution that does not handle all use cases or leverage the architecture. This happens because design patterns are not always obvious to the untrained developer, and simply knowing how to code along with some basic logic skills is not sufficient training to navigate complex software. On the other hand, the engineering approach is to dissect the requirement, splitting it into business logic, user interface and data issues, determine the most elegant means to introduce the feature in a way that complements the design and add the code in the appropriate places. Unfortunately, the difference between these approaches will not become obvious until well after the damage is done and you have an unstable, high maintenance code base on your hands.
As with any complex endeavor, if “you don’t know what you don’t know”, you could be headed for trouble. Engineers are trained over time to see the gaps in their research and thinking, and will seek to fill them before committing to a solution. An interesting statistic from the 2017 Stack Overflow Developer Survey shows degreed software developers placing greater importance in their formal education.
“…computer science majors and computer engineering majors were the most likely (49.4%) to say their formal education was important or very important.” Stack Overflow
Coders have their place, and boot camps provide a great opportunity for someone who wants to break into the industry. And some percentage have a natural talent for the work that will make them engineers in the end. But, let’s stop thinking that there is a shortcut to creating software engineers when so much of our 21st century world depends on reliable software. We wouldn’t hire boot-camp civil engineers to design and build our roads and bridges. So, why would we do it for the information highway? Next time you are outsourcing software development, be sure to ask prospective firms about the education and experience level of their development staff, and be sure you are comparing apples to apples.