Software Engineering in Action
Andrew McCluskey 2023
Goals
Reducing risk in software projects
Practices for a robust and maintainable codebase
Reducing risk in software projects
Why is building software hard?
Why is building software hard?
Why is building software hard?
### A framework for iteration * [Agile, 2001](https://agilemanifesto.org/) * Individuals and interactions over processes and tools * Working software over comprehensive documentation * Customer collaboration over contract negotiation * Responding to change over following a plan
### A framework for iteration * [Scrum, 1995](https://www.agilealliance.org/glossary/scrum/) * Transparency * Inspection * Adaptation
Scrum: Lifecycle review
Scrum.org
Practices for a robust and maintainable codebase
### Setting the scene * Building a web project * Frontend * Backend * Database
### The Big Feature * Implement the new API model for accessing backend * Backend layer first, then we'll switch frontend from v1 to v2 * You say it should be doable in a couple of weeks
Nickolodeon
Nickolodeon
Nickolodeon
* You have finished updating the entire backend, but... * Many merge conflicts to address * Concerns that frontend integration will take longer than expected * Unforeseen bugs in the toggling because of environment differences * No value for the actual customer until frontend is updated * Mistakes during the deployment caused downtime and lost revenue
## What could we change to do this better?
Out-code
Small, rapid, changes
Reintegrate and redeploy quickly
Work on vertical slices of work
Monitor production environments for strange behaviour
Ensure Test and Production environments as similar as possible
In-code
Automated Testing (+TDD, BDD)
Linting
Structure
Internal Documentation
### A better approach * Agree to do frontend and backend for one page * Value added early * Fewer merge conflicts * Understand overall task better * Add automated tests * Confidence in future * Automated deployments * Reduce risk of manual error * Reduce lead time
### Summary * Check in with customers often * Work on vertical slices * Automate error-prone/slow manual processes * Maximise confidence that code does what it should do