Software Engineering Practices
The discipline behind writing code that teams can maintain, test, and evolve — from version control to deployment pipelines.
- Reading time
- ~31 min (+9 min optional)
- Level mix
- 9 beginner · 5 intermediate
Software engineering is the discipline of building software that other people can work with, test, and change over time. The practices in this path — version control, testing, code review, refactoring, and CI/CD — are the shared habits that make collaborative development reliable.
Unlike the Backend Engineer Starter Kit (which focuses on what to build), this path focuses on how to build it: the process, tools, and patterns that distinguish a sustainable codebase from one that collapses under its own weight.
Roadmap
Loading progress...
Working with code
Tracking changes to code (and other files) over time, so teams can collaborate without trampling each other's work.
The dominant distributed version control system. Tracks snapshots of a project's files and supports lightweight branching.
Reviewing someone else's proposed code change before it lands — the most reliable practice for catching bugs and spreading knowledge in teams.
- Semantic VersioningOptional
A convention for version numbers — MAJOR.MINOR.PATCH — where each part signals the kind of change (breaking, feature, fix), so the people who depend on your software can update safely.
- MonorepoOptional
A single version-control repository that holds many projects or services together — sharing tooling, dependencies, and atomic cross-project changes — instead of splitting each into its own repo.
Testing
Writing code that runs your code to check it does what it should — the safety net that lets teams change software without breaking it.
A small, fast test that exercises one unit (function, class, module) in isolation — the foundation of the testing pyramid.
A test that exercises several components together, often hitting a real database, network, or external service — slower but higher-signal than unit tests.
Design
A named, reusable solution to a recurring design problem in code. A shared vocabulary that lets engineers describe structure without re-explaining it.
Improving the internal structure of code without changing its external behaviour — the way you keep a codebase from rotting.
A metaphor for the long-term cost of cutting corners — small short-term wins that compound into a heavy maintenance burden.
Process
A family of iterative software development practices emphasising short cycles, working software, and adapting to change over upfront planning.
Shipping
An automated pipeline that builds, tests, and ships code on every change — so the path from "git push" to "in production" is short, repeatable, and safe.
- Feature FlagOptional
A switch in code that turns a feature on or off at runtime without a redeploy — used to roll out gradually, test in production, and decouple deploying code from releasing it to users.