# Design docs philosophy *Pulled from a [Lightning Talk](https://www.youtube.com/watch?v=0oRa8bnNUjk&t=2016s) Jonathan gave at GUADEC in 2024* The crosswords codebase is extensively documented — and we intend to keep it that way. Being disciplined about developer documentation pays dividends: * Documentation helps keep a consistent and maintainable code base * Thinking about a hard problem before writing code can catch problems with an approach before code reveals it * It's useful to get a second pair of eyes on a problem * Keeping a history of design decisions is useful for reconstructing complex decisions * It's much easier to refactor words than code * It helps new contributors to understand your code-base And most importantly, the most important contributor to your project is future-you!! Document for that person. ## Best practices We write a design document before we write non-trivial sections of code. This is so we can discuss issues before coding, and have a big-picture development history that's separate from the commit messages. If you'd like to extend this project in a non-trivial way, please submit a design doc MR before you begin coding. This is an MR with just a single file to be reviewed. We use markdown with a [standard template](design-doc-template.md). Every doc has a header that looks something like this: ```markdown # Title **Status**: (Draft|Approved|Deprecated|Updated) | (Optional Implemented) | (Date) **Author**: Author Name **Reviewer**: (Optional Reviewer Name — if someone specific should review this) ``` As an example, ```markdown # Editing the Acrostic Grid **Status:** Approved | Implemented | January 2025 **Author:** Jonathan Blandford **Reviewer:** Tanmay Patil ``` Please make sure to use word wrap when writing text — it makes it easier to comment on in the MR. :::{tip} Some design docs benefit from diagrams or images. This is to be encouraged. See [PlayXwordColumn](/designs/crosswords-player/play-xword-column.md) for an example. ::: ## Freshness We revisit the docs as part of the release process. At a minimum, we update the headers to indicate if the status has changed, but we also potentially update relevant docs as well. Some designs are vital to keep accurate — such as the [Word List](/designs/shared-code/word-list.md). It's much easier to update docs as we go along then to deal with out-of-date docs that don't match the code.