Friday 12 July 2013

Hardware vs Software for product development

I've been pondering whether developing products in software is better than in hardware. It's remarkable what is possible  nowadays with software running on high performance hardware .

Here are my observations.

Hardware tends to drive unit cost.  Components cost money, therefore to reduce the design cost it makes sense to move towards a more software heavy design.

However by increasing the software component, the demands on processors may increase so although the component count will drop the cost of the processor will probably increase.  For modest control applications this is probably negligible however at the extremities of design this may become significant.  For example doing real time 10Gbit/s wire speed processing in software is non trivial.  This tends to push you in the direction of more expensive processors, custom hardware or expensive extremely skilled developers.

The underlying assumption for unit cost is that you will make a lot of the product.  If however you're in a niche and sell very few, the cost of the developer per device need to be factored in. The trade off is the cost of  more expensive hardware versus the cost of the developer.  For example say the market size for your product is 100 units. The cost of a developer is say £50k/year.  Amortised over the units the developer cost is £500.  If the developer uses higher spec hardware at a cost of £100 more per device but can develop in half the time, the saving is actually £150 per product.  It would be cheaper to opt for a heavier hardware design than a heavier software design.

The choice of technology is important.  My first exposure to the Erlang Programming language as a manager taught me that. I had a system written in Java. It performed like a dog. The programmers told me I needed bigger hardware so I spent £2M putting very high end servers in.  The developers lost all credibility with me when the performance barely improved with this expensive hardware. A skunk-work development team knocked together something in Erlang that was several  orders of magnitude better performance than the Java system and running on an old Sun box which was found lying around.

This is an interesting example.  The level of complexity of this system was that it was impossible to build purely in hardware. It absolutely needed software. However the architectural design decision about which software technology to use was actually a critical consideration.  The cost in this situation (with a product size of one unit) was £2M.

Some of the benefits of software over hardware are:
- Very quick to make changes
- Easy to experiment
- Often quick to implement

The downside is:
- Scope creep / developer creep - it becomes easy to add unreequested functionality
- The ease of change leads to a maintenance nightware as potential each customer has a unique product
- Finding bugs in software is often harder than finding bugs in hardware.

However the trend is to run more things in user space. For example the Raspberry Pi has an operating system and that means it's performance is not predictable.  Microcontrollers have much more predictable performance but not as predictable as hardware.

This then creates a new dimension. One of risk.  We all know software has bugs and can go wrong. We therefore need to factor in the cost and consequence of it going wrong.  Medical electronics, aircraft and maybe cars are examples where it may be extremely prudent to have high hardware component to minimise risk.

As you can see I haven't reached a conclusion yet but it is likely the shift towards a larger software component is inevitable.



No comments:

Post a Comment