9 January 2024 / Working notes

Why I’m writing this down

I keep notes while I work, usually because a decision will need explaining again months later. This journal is where I will keep the implementation details, failures and changes of mind that are worth returning to.

A hand drawing in a spiral notebook at a marble-topped table.
Photo: Kaizen Nguyễn (opens in a new tab)

A technical decision can look obvious while everyone involved still remembers the conversation. Give it a few months and the same choice can look arbitrary. The code shows what was built, but it rarely shows the constraints around it: the deadline, the systems already in place, the options that were rejected, or the risk that mattered most at the time. When that context is missing, someone reopens a question the earlier team may already have considered. Revisiting it may be right because conditions change. The old reasoning lets us tell whether they actually did. I want these notes to retain enough of that reasoning to make a later review useful, not to defend every old choice. Recording only “Use option A” leaves most of the decision missing. What job needed doing? Which constraints were fixed? What evidence was available? What would have made another option preferable? For most notes, I want to capture:

  • the situation and the user or operator affected;
  • the decision made, including the boundary of that decision;
  • the alternatives considered seriously;
  • the checks used to decide whether the implementation works;
  • any unresolved risk or assumption that deserves another look.

This is deliberately less formal than a large architecture document. A short entry written while the detail is fresh is more likely to exist than a perfect document planned for later. The date matters too. Technology changes, prices move and integrations gain capabilities. A decision should be read against what was available when it was made. Successful implementations tend to leave artefacts behind: deployed code, accepted designs, operating procedures. Failed attempts are easier to erase. A branch is abandoned, a prototype is deleted, or a configuration is changed until the immediate problem disappears. The next person sees only the final state. With no record of the attempt, somebody can quite reasonably try it again. A failure note does not need a dramatic post-mortem. It needs the attempted change, the observed result and enough detail to distinguish a bad idea from a bad test. Partial failures count too. A feature can pass its happy path while leaving support staff unable to see what happened. A data import can complete while silently skipping records. Those are implementation results, not footnotes.

Technical writing often makes decisions look cleaner than they were. The final explanation starts with the selected approach and builds a straight line towards it. Real work is less tidy. New evidence appears. A constraint turns out to be negotiable. An apparently simple integration reveals state that the initial design ignored. I want to keep those changes in the story. If I preferred one approach in January and another in March, I should be able to say what changed. That does not mean publishing every passing thought. A journal full of unfiltered notes becomes another search problem. The entries worth keeping affect how a system should be designed, tested or operated.

There is value in leaving uncertainty visible. “I do not know yet” is useful when it is followed by the open question and the evidence needed to answer it. The subjects here will move between software delivery, applied AI, data, integrations and the operating work around them. I will focus on what a decision changes once it enters a real workflow. That means keeping details such as state transitions, permission boundaries, retry behaviour, evaluation cases and support visibility. These are often removed from a short product explanation, but they are where an implementation becomes understandable.

Private work will stay private. A useful technical pattern can usually be described without naming the organisation, the people involved, or the commercial setting. If a detail cannot be separated safely from that context, it does not belong here. Before publishing a note, I will check whether it contains enough detail for somebody to make the decision, repeat the test or recognise the same failure. If it does not, I will either add the missing detail or keep it as a private working note.

Continue the thinking.

Comments are public and hosted in an open-source GitHub Discussions repository.

Loading comments connects your browser to GitHub. A GitHub account is required to post.

All blogs