Graduate Program KB

A Tale of Two Values


Topic:

  • Behaviour and structure in a software system
  • Balancing the two, and not focusing on one to the exclusion of the other

Behaviour

  • Programmers are hired to make machines which make or save money for a stakeholder
  • We do this by writing code to a specification, as told by the stakeholder
  • When a machine violates the spec, we know we have a problem to fix
  • Implementing the spec and fixing bugs is not 100% of the job description however

Architecture

  • The word software can be broken up into the ware (product) and soft (referring to a behaviour)
  • Software is intended to be easily changeable
  • As a stakeholder changes their mind about a feature, the change should be simple to implement, the difficulty comes from the scope of the change and not the shape of it
  • Software development costs often come from a divergence between scope and shape
  • This is why earlier years of development on a product are far cheaper than subsequent ones
  • The divergence between developers and stakeholders also grows, as stakeholders believe they give changes of a similar scope, but it becomes much harder to implement them as time goes on

The Greater Value

  • Business managers will often prioritise a working software system over a sound architecture
  • Developers get forced into this way of thinking. But consider:

"If you give me a program that works perfectly but its impossible to change, then it won't work when the requirements change, and I won't be able to make it work. Therefore the program will become useless."

"If you give me a program that does not work but is easy to change, then I can make it work, and keep it working as requirements change. Therefore the program will remain continually useful. "

Eisenhower's Matrix

"I have two kinds of problems, the urgent and the important. The urgent are not important, and the important are never urgent."

  • Behaviour is urgent, but not always particularly important.
  • Architecture is important but never particularly urgent.

The order in which we should prioritise is as follows:

  1. Urgent and important
  2. Not urgent and important
  3. Urgent and not important
  4. Not urgent and not important
  • The architecture of the code takes up the top two positions, whereas the behaviour occupies the first and third positions.
  • Software developers are hired to evaluate the importance of architecture, and express this to business managers who are not equipped to do so.

Fight for the Architecture

  • Effective software development teams tackle the struggle of fighting for architecture head on
  • As a software developer, you are also a stakeholder
  • Just remember: If architecture comes last, then the system will become ever more costly to develop, and eventually change will become practically impossible for part or all of the system