Software Engineering Distilled
This is my attempt at distilling software engineering into 20 tweets (<140 characters). Not entirely sure that it is wholly satisfactory. Please try your own!
Plan your process. Share it and keep it under constant revision. Use a well understood process template. Drive process improvement. #softeng
Identify your stakeholders. Ensure continuing engagement. Collectively own major tradeoffs. Get management buy-in. #softeng
Work out boundaries of your problem & framing assumptions about behaviour of the real-world. Establish extent of your confidence in these. #softeng
The biggest determinant of success will be the skills & experience of the team. Choose well. #softeng
Build requirements collaboratively with stakeholders alongside a schedule of incremental delivery. Jointly plan test & evaluation. #softeng
Confront risks early. Changes get much more expensive as development proceeds. Organise to minimise these costs. #softeng
System evolution is inevitable. The system will change the application setting. This will require system change in turn. #softeng
Build a long-term development roadmap. Measure progress against it. Keep it constantly updated. #softeng
System requirements: security, reliability et al determine architecture. Changes have big impacts. Think about usability at outset. #softeng
Eschew novelty. Use established patterns. Build for understandability. Distrust clever solutions. Reuse whenever possible. #softeng
Keep solution architecture as close as possible to problem structure. Focus on getting the component interfaces right. #softeng
Use modelling to ensure you have a good shared understanding of problem structure. If you can embed model in a language do this. #softeng
Keep tight fine-grain version control of all your artefacts. Organise, link, tag & add metadata. You never know when you need it. #softeng
Take nothing on trust, most of all your own instincts about what is correct. #softeng
Invest in your tools. Invest in your skills. #softeng
Regression tests. Enough said. #softeng
Pin down uncertainty using focussed prototypes. Exploit maths, domain specific languages, functional programming & formal methods. #softeng
Do not let your client persuade you into unrealistic schedule commitments. Leave time & budget to reengineer & refactor. #softeng
Effective management demands a deep knowledge of and commitment to engineering. Avoid know-nothing project managers. #softeng
Organise for learning. Measure & assess. Debate quality. Reflect on successes & failures. Do better next time. #softeng