Plain-language explanation.
Software engineering is the disciplined, systematic approach to designing, building, testing, and maintaining software. It applies engineering principles to software development — turning programming from an ad-hoc craft into a professional discipline. It covers everything from writing clean code to managing large teams building complex systems.
Core concepts and standard treatment.
Core software engineering covers the software development lifecycle (SDLC: requirements → design → implementation → testing → deployment → maintenance; waterfall vs iterative; Agile manifesto — 12 principles; Scrum — sprints, backlog, ceremonies; Kanban — WIP limits, flow), code quality and clean code (Robert Martin 'Clean Code' — meaningful names, small functions, SOLID principles — single responsibility, open/closed, Liskov substitution, interface segregation, dependency inversion; DRY — Don't Repeat Yourself; YAGNI — You Aren't Gonna Need It; code smells — long method, feature envy, data clumps), version control (Git — commit, branch, merge, rebase; Git workflow — GitFlow, trunk-based development; pull request review; semantic versioning — semver), and testing (unit testing — TDD — test-driven development — red-green-refactor; integration testing; end-to-end testing; test coverage — code coverage vs mutation testing; mocking, stubbing).
Deeper theory, debates and edge cases.
Advanced software engineering covers design patterns (GoF — Gang of Four — 23 patterns: creational — Factory, Abstract Factory, Builder, Prototype, Singleton; structural — Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy; behavioural — Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor), system design (CAP theorem; distributed systems fundamentals; load balancing — round-robin, least connections, consistent hashing; caching — Redis, Memcached — cache invalidation strategies; message queues — Kafka, RabbitMQ; database sharding and replication; API design — REST vs gRPC vs GraphQL), and software architecture (monolithic vs microservices; hexagonal architecture — ports and adapters; event-driven architecture; domain-driven design — DDD — bounded contexts, aggregates, domain events — Eric Evans).
How it is applied in practice.
At the staff/principal engineer and engineering director level, practitioners contribute to IEEE Software and ACM Queue; drive technical strategy (technology radar — ThoughtWorks; build vs buy decisions; architecture decision records — ADRs; tech debt management — SQALE model, SonarQube — technical debt ratio); lead CI/CD transformation (GitHub Actions, Jenkins, GitLab CI; deployment strategies — blue-green, canary, feature flags — LaunchDarkly; progressive delivery; trunk-based development at scale); mentor engineering culture (engineering ladders — Dropbox, CircleCI career frameworks; blameless post-mortems — SRE culture — Google SRE book; psychological safety — Westrum organisational typology); and define engineering metrics (DORA metrics; space framework — satisfaction, performance, activity, communication, efficiency; team health checks — Spotify squad model).