The Complexities of Software Development

Software development is extremely complicated.  As a business it’s a combination of processes, skill sets, roles, resources and methodologies.  As a developer, the programming piece of the pie alone is outstanding.  If any non-programmer were provided a list of all the skills necessary to become a competent programmer I think most would turn around and look for something simpler as a career option.

I really started my life as a developer in my second job at a start-up where I was the lead developer with only 3 years of experience under my belt.  The business owner, whom was a salesperson, thought any major software undertaking could be completed in as little as a few weeks of development.  Those were the days when development occurred at a 100 mph and the software was truly tested at the hands of the client with no true software testing outside of the developer doing his own.

I started programming when PERL/CGI programming was the thing; I have learnt a lot since then. I used to read anything and everything I could get my hands on which was mostly about programming and architecture.  Thinking about processes and dealing with clients and anything that didn’t involve code was foreign to me.  There was no developer bible that I was aware of that could have helped me carve a smoother path. So that’s when I decided I wanted to write a book for those developers of today.  A reference to help them in every aspect as an individual in a company where they need to wear multiple hats.

While taking notes about what I knew and trying to cover as many aspects of software development that I could, it became quite apparent at the effort that would be involved.  One of the keystones of great software is quality assurance and is a very complex undertaking.  Some of the major steps involved are listed below:

  1. Developer Testing
  2. Unit testing
  3. Code review
  4. Integration testing
  5. QA testing
  6. Continuous testing
Each of the items above is a discipline in its own and requires a significant amount of effort to learn and implement, let alone agreeing on the libraries to use, best practices involved, conventions, etc. All based on a set of requirements having previously been provided by the business analyst in concert with the software architect and client. Of course, this is assuming you have a business analyst, or an architect.
This of course is above and beyond the very basics of choosing and learning a programming language, learning best practices for the language’s paradigm. Learning to use the compiler, interpreter, software packaging and deployment. And then learning to debug effectively, profile code and over time being able to write very optimized code without much effort. 
And even these days that’s not enough as now you’re required to develop through the whole stack of the web from HTML & Javascipt through AJAX & JSON to the Java, C#, PHP, etc. back-end via SOAP web services to another server that communicates to the database…maybe.
And then once you’ve mastered all that, being able to consume business requirements and speak technology and vice versa.
Don’t forget also that as a developer, potentially squeezed between the salesperson/client and other developers, you’re required to provide estimates, be able to think in terms of risk and mitigation, and also to be able to clearly define the true Definition of Done and live by it.

It may not be rocket science, but it’s computer science. So if someone does ask, tell them you’re a scientist.

Done. Done.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s