Notes from the bottom of the sea
2025-07-23 15:28:02 +01:00 by Mark Smith
Building a new path is often mostly getting distracted and side tracked. You stop to fix something so you can continue on your way, only to find that while fixing that, you need to fix another thing, and before you know it, you are multiple levels deep in a series of seemingly ever more dangerous and distracting side quests. The world has an uncanny knack for pushing you right to your limits, and it will always try to push you further. You have to know what is essential and what can be delayed or ignored.
It‘s also about being very confused for long stretches of time, that in retrospect is very difficult to remember why it was you were so confused. Interspersed with moments where you think you know what you are doing, only to discover that actually you had missed something vital or had an incorrect piece of information.
Sometimes coding is 95% documentation, and refactoring documentation. When will this documentation loop ever end? You got to do it though, or else future you will be in an even bigger mess.
Sometimes just getting to the start line is a completely exhausting and soul-destroying task, and then you still got to start the race before you get side tracked again.
Retrospectives allow you to not forget your learnings. Do them, don't dwell on them, keep moving.
It can feel like you aren't making progress, a lot actually, or progress and not progress at the same time. Focus on not making regressions.
At some point the snail pace you have had to be at will stop and you will be able to move unencumbered, and reach higher velocity safely and with less risk. Maybe eventually effortlessly.
Here‘s a list of some of the things I managed to do in the past week:
- Linting - I got linting setup, and then it broke, and then I set it up again, then the project structure changed quite a bit and I had to set it up yet again.
- Typechecking - Similar to linting, and setup around the same time, this really slows you down initially. Gemini has a way of very confidently leading you down a path of never ending circular configuration changes. Horrible.
- Git hooks - Of course once linting and typechecking were working, it made natural sense to automate it. But of course that can throw you into another configuration loop too.
- Retrospectives - Definitely worth spending a few minutes after gnarly situations, try to figure out what went wrong, document it, so it hopefully won't happen again.
- Documentation - It's important to document things, but that can turn into a whole other type or constant refactoring. AI is mostly excellent at this, when it's not blocking itself and doing strange things to take you off track.
- Backlog - fixup workflow - This has been a bit of a revelation, especially when working with AI agents. Using git fixups to continuously add small bits of work to a commit, then squashing them all down to atomic commits that make logical sense. Development can often be very chaotic, but with the right workflow you can turn it into a story that makes sense, much easier for other programmers to read, and that includes yourself. I fixed a few bugs on the backlog.md project and submitted a PR with a new feature. It was accepted and with zero padded ids, the tool is very useful, especially when working with AI agents. It make it possible to almost effortlessly document your work as you go, so whenever you have to pick up what you were doing with a new AI, it's much less difficult to get going again.
- Rebasing like a pro - I had 2 very gnarly git rebasing nightmares. Luckily I know to always have backups. I hate to say it, but I did learn a lot from these two events, even if I think the lessons could have been learnt in a much less dramatic way.
- Working efficiently with ephemeral AI - AI is awesome, but it‘s also not awesome a lot of the time. It‘s like working with someone that has severe amnesia. You go through hell together, and the next time you see them, they are like hey what's up? And they have no clue they nearly just caused you to die, and you just don't have the energy to explain the whole situation for the 10th time, like you are on some sort of support call from hell. And they hang up on you because you misspelled a word.
- Devcontainer setup optimising mounts, running apps on project open - Streamlining things is awesome when it works, but it‘s also a big blow to morale when it doesn‘t work and makes things worse.
- Fixing devcontainers that fill-up storage - When devcontainers fill up for whatever reason, it‘s horrid. They get so full that there isn‘t even enough resources available to delete things! The only way is to nuke the container, and you can‘t even figure out what went wrong.
- Fixing devcontainers that fill up memory - Devcontainers can run out of memory too. That causes everything to go weird. The whole IDE freezes up for no apparent reason. Things start disconnecting. The AI chat with the past few hours debugging disappears.
- Reinstalling container orchestrator on the command line - Sometimes not only does the devcontainer get fubared, the entire devcontainer orchestrator becomes kaput. And the only way out is to remove everything and re-install from scratch, but you have to do it on the command line, because the GUIs just decide to stop giving you any relevant feedback, and so it just feels like they are stuck.
And then the people that run the local shop are extremely abusive, with tremendous righteousness, to you for no known reason, the only human interaction you have had all week, and you just have to smile and accept it, and move on.
I just want this blog post to be over. I think maybe now I am at the start line?
This shit is really tough. #