Software Engineering

Software engineering is the discipline that organizes everything the previous seventeen topics covered into a repeatable process, and this entire curriculum series is itself a real example of that process running end to end. Requirements come first: before any code gets written, someone has to decide exactly what the software needs to do, the same decomposition discipline the computational-thinking topic introduced early in this series, just applied to an entire project instead of one problem — this series itself started from a requirements list handed down up front, a specific 28-topic order plus a companion list of project ideas. Modular design breaks the resulting system into independent, reusable pieces rather than one giant tangle of code, the same instinct behind choosing the right data structure or the right programming paradigm earlier in this series: this entire project reuses one small, unmodified deploy script across every single topic rather than writing a new one-off insert script each time, because a tested, working module is more valuable copied than rewritten. Version control tracks every change over time so any single change can be inspected, compared, or reverted without threatening the rest of the system; this series' own deploy process takes an automatic timestamped backup of every single insert before committing it, the exact same instinct behind `git`'s commit history, just scoped to one database row instead of an entire codebase. Testing is the debugging-and-testing topic's assertions and test cases scaled up from one function to an entire release: before any topic in this series gets deployed, its content passes a fixed checklist — valid JSON, zero stray backslashes, no elements overflowing their intended width, no internal identifiers leaking into reader-facing text — and two topics in this very series were caught and fixed by exactly that checklist before they ever reached a live reader. Maintenance is what happens after something ships: bugs discovered in production get fixed, lessons learned get written down so the same mistake isn't repeated, and a system keeps evolving rather than freezing the moment it first works — this series' own tracking file has grown a running list of exactly these lessons, from a backslash gotcha in an early topic to the overflow-audit fix two topics ago, each one folded back into how every later topic gets built. None of these five practices is optional once a project grows past a single script a single person runs once; they are what separates software that keeps working as it grows from software that quietly rots, and the next topic, theory of computation, steps back from engineering practice entirely to ask a more fundamental question: what can any program, built with any amount of engineering discipline, actually compute at all.

Requirements
decide exactly what the software needs to do, before writing code
Modular design
break the system into independent, reusable pieces
Version control
track every change so any one of them can be reverted
Testing
check against a fixed list before anything ships
Maintenance
fix what breaks, write down the lesson, feed it into the next cycle
This Series Is a Real Software Project Every one of the five practices, used for real, every topic Requirements the 28-topic order given up front Modular design one deploy script, reused every time Version control timestamped backup before every insert Testing fixed checklist, every single topic Maintenance every bug found feeds back into the next topic the dashed arrow is the loop: a lesson from one topic changes how the very next topic gets designed and built
The Testing Checklist, Run Before Every Deploy Two real bugs caught here before readers ever saw them valid JSON in every flowchart block zero stray backslashes anywhere in the content no element overflowing its intended width caught a real bug no internal database id leaking into reader-facing text caught a real bug live mobile visual check after deploying neither caught bug was visible by just reading the content — both needed a specific, repeatable check to catch

Take software engineering further

Ask the copilot about this term, or have our engineers assess it against your process.