Back to blog
Decision Records

Engineering Decision Log

6 min read
engineering decision logdecision logtechnical decisionsrecord of decisionsengineering documentation

The short version

  • An engineering decision log is a running record of what the team chose and, more importantly, why.
  • Most logs die because they capture the outcome and lose the reasoning, so nobody reads them twice.
  • A log people actually read is short, written in plain words, and answers the question a future teammate will ask.
  • StandIn answers from what you wrote down while you are off, and never guesses. When the reason is not in the record, it says so.

An engineering decision log is a running record of the choices your team made and the reasons behind them, written in plain words so the reason survives after the person who made it moves on. A good one is short, dated, and answers the exact question a future teammate will ask: what did we decide, and why did we rule out the other option.

Here is the part teams miss. The choice itself is easy to find in a pull request or a ticket. The reasoning is what disappears. Six months later someone opens the code, sees a strange decision, and cannot tell whether it was careful or careless. When the person who chose is out that week, the work stops on a question that already had an answer, one that simply was never written down where anyone could read it.

What an engineering decision log is for

A decision log is not a changelog and it is not meeting minutes. A changelog says what shipped. Minutes say who spoke. A decision log says what the team settled on and why, so the next person does not reopen a debate that was already closed.

The value shows up at a specific moment: when someone hits a choice that looks wrong and has to guess whether to trust it. Maybe it is a database that should have been a queue, or a retry policy that seems too aggressive. Without a record, they either ask the author (who may be asleep, or gone) or they change it and find out later it was load-bearing. The log exists so that the reason is available the moment the question comes up, not a week after.

This is why a log built only from the decision, and not the reasoning, is nearly useless. Knowing the team chose Postgres tells you nothing. Knowing they chose it because the read pattern was relational and they wanted transactions over raw write speed tells the next person whether the choice still holds.

Why most logs go unread

Most decision logs fail the same way. They start strong, then become a graveyard of entries nobody opens. There are three reasons this happens, and they compound.

  • They record the what, not the why. An entry that says "moved to gRPC" without the reason is a headline with no story. A reader learns nothing they could not get from the commit.
  • They are written for the author, not the reader. Full of shorthand and context that made sense in the room and means nothing three months later.
  • They live somewhere nobody goes. A wiki page that is not linked from the code is a page that does not exist. The log has to sit where the decision is felt.

Notice these are the same reasons a handoff fails. We wrote about that in why engineering handoffs keep breaking. The cure is the same too: write for the person who will read it stuck, not for yourself while it is fresh.

A format people actually read

Keep each entry to a few lines. A useful shape is: the decision, the reason, the option you rejected and why, and the date. That last field matters more than it looks, because a decision made under one set of constraints can be re-opened honestly once the constraints change.

Write it in plain words. If a new hire cannot read the entry and understand the trade-off, it is too clever. The test is simple: hand the entry to someone who was not in the room and see if they can explain the choice back to you. If they can, it is done. If they cannot, the reasoning is still in your head, not on the page.

For heavier architectural choices, the same instinct scales up into a formal template. We cover those in our look at architecture decision record tools. But the small, daily choices are the ones that most often go unrecorded and cause the most confusion later, so start there.

When the log has to answer for you

Here is the turn. When you are off, your work should keep answering in your words, without guessing. A decision log is the raw material for that, but a static page cannot handle a follow-up. Someone reads your entry, still has a question, and now they are stuck again, waiting for you to wake up.

This is where the mechanism matters. There is a real difference between a system that generates a plausible-sounding answer and one that answers only from what you wrote down. The first fills the gap with something that reads well and may be wrong. The second speaks from your record, and when your record does not cover the question, it says so and points to the right person instead of inventing a reason.

That is what StandIn does with a decision log. Your entries become answers your teammates can ask, in your words, while you are asleep or on leave. If you wrote why you chose the queue over the cron job, StandIn gives that reason back. If you never wrote it down, StandIn does not make one up. It tells them the record is silent and routes them on, which is the honest answer and the safe one. For keeping the reasoning findable across a whole team, pair this with keeping a record of decisions across a team.

Common Questions

What should go in an engineering decision log entry?

Four things: the decision, the reason for it, the main option you rejected and why, and the date. Keep it to a few plain sentences. The reason is the part that gives the entry a shelf life, so never skip it.

Where should the decision log live?

As close to the code as you can put it. A docs folder in the repository, linked from the relevant files, beats a separate wiki nobody opens. The log has to sit where the question comes up, not in a place you have to remember to visit.

How is a decision log different from a commit history?

A commit tells you what changed. A decision log tells you why the team chose that path over the alternatives. The history is a record of edits; the log is a record of reasoning, and reasoning is what a future teammate is actually missing.

Can a system answer questions from my decision log?

Yes, if it answers only from what you wrote and admits when it does not know. StandIn reads from your record and your team's, gives back your stated reasons, and says so plainly when the answer is not there rather than guessing.

A decision log earns its keep at the moment someone is stuck on a choice you already reasoned through. Written plainly and kept where people look, it turns your past thinking into an answer they can reach without waiting for you. See how the record becomes an answer at inside StandIn.

Get async handoff insights in your inbox

One email per week. No spam. Unsubscribe anytime.

Ready to retire your daily standup?

Distributed teams use StandIn to start every shift with full context, no standup required. Engineers publish a 60-second brief. The next shift wakes up knowing exactly what to work on.

You might also like