"Entia non sunt multiplicanda praeter necessitatem."
"Keep things as simple as possible, but not so simple that they don’t work."
William of Occam
The design process
- Design is an abstract, yet structured process.
- Start with the "ideal design".
- Know what constraints you have to deal with.
- Build the whole system on paper first.
- Understand the details and complexities.
- Consider the possible interactions and plan ahead to avoid problems.
- Remain flexible and adapt to changes.
Systems engineering and risk
- We’re trying to reduce the probability of failure.
- We’re trying to minimise the consequences of a failure.
- We’re looking for critical components / people.
- We’re looking for critical stages during the project.
- We need to understand how systems fail and what failure looks like when it happens.
- We’re paranoid about our data.
Transition from old to new
- Need to minimise risk of data loss.
- Need to minimise risk of loss of service.
- Need to migrate user connectivity.
- Need to migrate live data, historic data (eg: backups for subsequent retrieval) and potentially convert data files.
- How can we split transition into manageable steps ?
- Is anything a one-way step ?
- What is the least we have to do during cut-over ?
- How much can we get done in advance ?
- How could we revert to the original system ?
Testing and Acceptance
- We need to demonstrate that service will continue with minimal disruption during failure and recovery.
- We need to regularly rehearse and test our procedures and plans to ensure that we stay current.
- We need to test scalability as well as functionality.
- We need to test every aspect of the system and surrounding infrastructure under normal, failure and recovery conditions.
- What are the acceptance criteria ?
Clarity of purpose
- Have clear objectives.
- Think ahead as far as you can.
- Have a well-structured systems architecture.
- Understand the constraints.
- Focus on the core functions.
- Implement them as well as is possible.
- Ensure that everyone involved maintains a consistent understanding of the project.
- Plan ahead as best you can.