Sunday 19 July 2015

Code For Sale



More and more companies now have a requirement to develop their own software, whether it be mobile apps, in house administration or a flashy website.
This has grown the market for software developers and the code their skill can produce.
Unfortunately the growing need for software has caused the growth of an opinion that software, and developers, can be treated like any other commodity that businesses need to purchase.
In this context by commodity I mean something where price is only differentiator, the basic product is the same you just need to barter to get it for the best price from the cheapest supplier.
To paint software in this light does a great dis-service to good developers and the great talent they have to produce a high quality product.
Engineered Not Manufactured
Software development is an engineering discipline and as such good software is crafted not manufactured.
The commodity view wouldn't be applied to other engineering disciplines.
It would be difficult to argue that the only thing that separates a Ferrari from a Toyota, or a Rolex from a Casio is price.
There would be recognition that more skill has gone into creating a higher quality product with a different set of attributes.
The toolbox available to developers comes from their experience and learning and is stored away inside them, they are not blindly following a blueprint, involved in a production line that's churning out homogenised blocks of code. 
Although the collective wisdom of software engineers over time has solved many common problems, what is not a solved a problem is the particular set of requirements your business has.
This is the essence of software engineering, the skill to use this engineering knowledge to solve the problem at hand, understanding that its subtly different from previous problems and requires a different solution, and having the creative vision to know what that solution is.
Not A Numbers Game
In many other areas of manufacturing it can be boiled down to numbers, if we use ten people it will take x, if we use twenty it will take y, where y < x.
It may cost more to throw bodies at it but it will speed up the production line because even if an element of skill is involved its just about getting on with it and making the commodity, twenty blacksmiths will produce more horseshoes in a given period of time then ten.
The fundamental difference between this and engineering is that time is required to engineer a solution to a specific set of requirements, good developers are not just producing the same horseshoe over and over again.
The skill comes not in writing the code, but in having the knowledge and skill to be able to work out what code needs to be written. Inspiration, creativity and honest to goodness brain-power are not scalable commodities, the same as it isn't reasonable to expect all developers to have these qualities in equal measure, its an unfortunate fact that not all developers are created equal.
Code Isn't Cucumbers
If software truly is a commodity its worth to a company should be easy to calculate, we have 80,000 lines of code, the current market price for code is $1 per line of code, we have $80,000 worth of code.
This obviously isn't the case, in the same way that estimating a software project can't be done just by knowing how much code is required and applying a market rate.
Indeed software in this sense is not an asset, the number of defects in software is going to be proportional to the number of lines of code, more code is not necessarily a good thing, this wouldn't be true for anything else that could be considered a commodity. 
Its difficult to put a value on some things, they aren't tangible, you can't reach out and touch them. Software is one of these things, it isn't ubiquitous, it can be done well and it can be done badly, and the difference between these two extremes is not easy to define.
The only way to "buy" good software is to invest in good developers , trust them and recognise that you are using them to provide a solution to your problem not just to churn out code. 

  

No comments:

Post a Comment