Andrew Mercer
on this page

Software Engineering

Software engineering is everything involved in turning an idea into software that works, keeps working, and can be changed safely by the people who come after you. Writing code is only part of it. The rest is choosing structures that hold up as a system grows, proving the code does what it claims, shipping it without breaking things, and working with other people along the way.

This section is organised around those facets. Each one has its own folder; start wherever your current problem is.

Languages

Language-specific guides: idioms, mental models, tooling, and how to structure real projects.

  • Languages: overview of all language guides.
  • Go
  • Python
  • Rust: ownership and borrowing, fixing common compiler errors, and a complete guide to structuring, architecting, and deploying Rust projects.

Architecture

How the pieces of a system fit together, and the trade-offs behind those choices.

Delivery

Getting software from a merged change to running in production safely, and knowing exactly what you shipped.

Collaboration

Software is built by teams. These pages cover communication, estimation, team dynamics, and keeping people healthy.

Planned topics

Areas this section will grow into:

  • Testing: unit, integration, end-to-end, property-based and contract testing; test doubles; what to test and what not to.
  • Code quality: code review, linting and formatting, refactoring, technical debt, and readable code.
  • Design patterns: classic and language-idiomatic patterns, and when a pattern is overkill.
  • APIs: REST, gRPC, and GraphQL design; versioning; backwards compatibility; error contracts.
  • Debugging: systematic debugging, reading stack traces, bisecting, profiling, and post-incident analysis.
  • Concurrency: threads, async, message passing, and the bugs each one invites.
  • Security for developers: secure coding, input validation, secrets handling, and threat modelling.
in this section
* communicating as a software developer/
* programming languages/
* software architecture/
* software development/