Software Development

I feel it is important to stop and think about a good definition for “software development” and to compare software development against hardware development and other types of engineering projects. My definition for software development is as follows:

Software Development: is a process for designing, creating, testing, maintaining and adding new features to a software project.

I will discuss in further details each of the five sub-processes, but first let’s compare software development against other engineering development processes.

The development process for software is no different than the development process for any other type of engineering project, with the caveat that being able to easily add new features is more critical than in any other engineering process. Yet, I claim that having in place a good software development process is more difficult than having in place other types of engineering development process. The difficulty stems from two main reasons. (It is important to highlight that having a good engineering development process is difficult for many reasons: political, financial, etc. What I’m trying to highlight here are factors that make a software process more difficult from a technical point of view.)

First, it is due to the inexperience of the average software developer. Software development is accessible to the masses. To develop software all you need is a computer. To develop hardware you need a computer and additional testing hardware, such as oscilloscopes, signal generators and logic analyzers. This extra equipment is prohibitive and requires space, which tends to limit the number of people that do hardware development. The ease of access to software development allows just about anyone to pick up a computer and start developing. In other engineering practices it is more likely that a person needs to go through some type of formal training and learn to work as part of a team. Formal training and team work tends to instill and teach good development practices. In general, there are more, less skilled, software developers than there are less skilled engineers of any other type. The likelihood of finding weak software teams is higher than finding weak engineering teams for any other engineering discipline.

Second, it is due to the perceived speed with which software can be developed. In software development, proof of concept can be achieved very quickly. This tends to have a dangerous effect of turning a proof of concept project into a full scale, customer deliverable project. The first version of the project might be OK, but the challenge shows up when new requirements are added to the project and newer features need to be integrated. New features are difficult to add because not enough time was spent on the overall project architecture, before the coding started.

In his book, “The Software Development Edge,” Joe Marasco compares software development to mountain climbing. He compares developing the first version of a software with climbing up the mountain and reaching the top. Yet, the climb is not over when the top is reached. Getting off the mountain is the second part of the climb. Similarly, in software development, the ability to easily add new features and to easily get to the second and third versions, is the second part of the story.

In conclusion, achieving a solid software development process is difficult due to the average inexperience of developers with such processes and because of the ease of getting a prototype working often times leads developers towards a path of least resistance that bogs down as the project grows in scope.

In my next post, I will address each of the five sub-processes ( designing, creating, testing, maintaining and adding new features) in more details.

no comments

Your email is never published or shared. Required fields are marked *



There was an error submitting your comment. Please try again.