Sunday 3 January 2016

Engineering without Fear



I am a believer that there is a lot to gain from viewing software development as an engineering discipline.
We can undoubtedly apply principles such as SOLID to contrive and devise systems from our raw building material of code.
But having worked in other forms of engineering I'm also aware that there are differences between the processes and patterns we apply in software engineering and our brethren practicing in other industries.
Far from these differences detracting from the validity of software development as engineering we should embrace these differences, indeed they are the reason I decided to make the switch and become a coder.
Price of Mistakes
No-body wants there software to have defects and we put a lot of effort into the prevention and eradication of them from our code.
But actually compared to other forms of engineering we pay a relatively low price for these mistakes at least in the development phase if not in production. 
Some defects can be fixed in minutes, more persistent ones might take a day, but imagine the life of an electronics engineer where defects might take weeks to fix as PCBs have to be re-laid out, fabricated and populated with components.
In some forms of engineering defects simply cannot be tolerated at all, a structural engineer will be in much more trouble if a mistake causes a bridge to collapse then we might be in if an app crashes.
Our relatively rapid fix and deploy cycle mean we have a much greater capacity to improve our output and drive increases in quality, this coupled with out ability to update software for our users means we are in a unique position to improve things for them on a continual basis.
Speed of Production
We all spend a significant amount of time thinking about and building code, if we work on large code bases it may take several minutes for us to compile and link all our code into an app or web site.
In most other forms of engineering it isn't possible for an engineer to see the fruits of his or hers labour so quickly.
The pace at which we can build and produce software is actually comparably high, when a decent coder gets into a groove significant progress can be shown over the course of a day or two and not just plans or simulations but actual working code.
Creative Thinking
Software development is a very creative exercise.
We allow users to directly interact with what we produce in the form of a UI, whilst also getting to shape this contact via careful application of UX.
This allows us to not just be cranking the handle and churning out code but indulge our more artistic side and build something captivating and engaging.
This very direct contact with our users is not something all engineers have the pleasure of experiencing.
Let Go of Your Fear
So reading this post you may be getting the impression that as software engineers we have any easy life, obviously this isn't true.
Writing software can be a very frustrating as well as rewarding experience, it requires intelligence and a dedication in applying your talent.
What we should take away from these differences is that as software engineers we shouldn't be afraid to try things.
Software development on both a personal and professional level is elevated and progressed by people having new ideas, the speed at which we are able to try these ideas out and put them into practice gives a unique opportunity to advance our industry.
Not every idea you have will be a winner, some may even turn out to be dumb but this should never stop you from trying.
The worst that might happen is you've spent a day or so finding out that this isn't quite going to work as you hoped, but knowing what doesn't work can be just as informative as knowing what does work.
But when you do have a winning idea, that time spent implementing it will not only improve both you and your team as engineers but also your users lives that benefit from your engineering skill and your willingness to try something new. 

No comments:

Post a Comment