I had to put my main development work on the back burner for a few weeks and so I'm just getting back into things the past couple of days. Before I stepped back I had updated my dev workflows to use tags, betas and release candidates, and boy am I glad I did that, because of course when I picked back up the various plates I had spinning, of course several things had stopped working, none of which were anything to do with my code, and all of which had to do with things shifting underneath me.
The project is at the stage where the complexity is on a new level, and had I not come up with the new setup, I would have been drowning in a nightmare, that much is clear. As it happens, I was able to get back into things reasonably quickly and with the LLM summarizing things, analysing code paths, pulling out details from past commit messages etc, I got situated fast and was able to formulate a plan.
One of the reasons I had started to use the new system was kind of a bit vain I suppose. For most of the project I had been using git very heavily locally making very sure to create a very nice and readable git history. That's great if you are reading the history, it make it look like everything in the project was like a perfect story with no gnarly bits. The reality is of course far from that. In reality there were all sorts of really horrendous moments and tons of places where everything was f-ed, but I got through it and made all the commit history look nice. But as I hit this new level of complexity it occurred to me that people might look at the history and think to themselves, did this guy really write this perfect and beautiful code and in such a perfect and beautiful way, or was it just one shotted by an LLM? That thought kind of freaked me out, given how much time and effort I have put into this.
So I decided basically to stop squashing all my commits into nice and perfect larger commits where everything is just perfect and instead keep much more of the intermediate commits along the way. I'm still squashing a bit, but it's more warts and all than before. I reckon it would be much harder to later tell me, you didn't write that. And the tags and betas and release candidates are a way to manage that extra complexity. You create small PRs along the way for all the commits, then when you have a release candidate you do a large beta PR, and in the body of the PR you get the LLM so summarise all the work, and it helpfully sorts all the changes, grouping like commits together, so you still get the nice high level view, and that is followed by a long list of all the detailed commit titles along with their short hashes, which you can cross reference if you need to. It's kind of the best of both worlds.
I have a couple of extra beta releases to do, but I'm running the latest betas in prod with the new functionality which isn't quite finished yet behind feature flags, and so I can be sure that the existing functionality is still working every step of the way, hopefully much less regressions. Seems to be working.