I’ve often heard the statement that hardware developers follow a more disciplined development process than software developers. What I haven’t heard much about is what it means to be disciplined and/or why that’s the case. So let’s open that discussion in hopes it takes us somewhere useful.
- How would you characterize a disciplined development process?
- What makes one team more disciplined than another?
- What’s the best example you’ve witnessed/heard of a team acting following disciplined development process?
- Why is it important to have a disciplined development process?
- Who follows a more disciplined approach to development: hardware or software? Why is that the case?
Those questions are for you so feel free to address any/all of them. No right or wrong answers to these questions, just opinions. Please share yours :).
-neil
I would describe discipline as a combination of attention to detail, following an appropriate and well defined process and a culture of distributed responsibility.
Attention to detail:
* Relevant and accurate commit messages
* Clean diffs (no unnecessary/accidental changes)
* Old / stale information removed (be they comments, documentation, wiki pages, tests etc.)
Well defined process;
* Appropriate and correct use of revision control systems
* Automated regressions
* Code review by peers (which should highlight any lapses in attention to detail)
Distributed responsibility:
* Developers test their changes
* Developers ensure regressions don’t break
* Developers update documentation etc. if required
* Developers ensure automation is complete
Personality differences, small projects/teams where discipline is less crucial, lack of enforcement, lack of definition, lack of justification.
Many hardware engineers come from backgrounds where it was possible for a couple of engineers to design a chip using schematic capture implementing ‘revision control’ by zipping up their working directory each day. For these people getting their head around a distributed revision control system like Git is a major learning curve and is therefore something that is likely to encounter resistance.
In my personal experience software teams are typically far more disciplined than hardware teams. My completely unfounded speculation is that software teams are typically larger than hardware teams and equally their code-bases are far larger. In that environment lapses of discipline have a clear cost and therefore the value is evident.
I would add another characteristic to my comment above: Business awareness
A disciplined team stays focussed on creating value which assuming they are employed by a company this means keeping aligned with the goals of the business.
This manifests in several ways:
* Working with equal enthusiasm on the ‘boring’ bits in addition to the interesting stuff.
* Understanding the appropriate level of quality required to generate revenue (sometimes this might be lower than a particular developer might be comfortable with)
* Responding well to evolving demands, requirements, markets and competitors