Patrik
Wise words of the week
- Scarcity breeds clarity—having limited time helps prioritize work (and life).
- Write code as if you would have to publish it in a paper (advice by N. Wirth).
Journal
I spent the week adding more support for additional cantons. I usually dislike this work, it’s always frustrating because while I understand the high-level computation, the devil is in the details where a canton either has a very different process (VS I’m looking at you!) or simply decides on different rounding functions at each step of the computation. It’s not a huge deal for small amounts, but the errors increase with larger numbers. And they break the unit tests anyway. These details are hard to get right.
Maybe I got lucky, canton AG worked nicely and fast, so I added TI too. They use a standard computation, mostly reusing, generalizing, and tuning the same code. After this refactoring, more than half of the cantons simply require a 6-line configuration to select the right rounding functions. It takes me longer to add the unit tests to convince myself that the code is correct.
I love this part of the development process. Initially, coding starts very broadly; everything is custom and specialized, applying only to one very specific use case and creating significant code duplication. Over time, I start to see the commonalities, allowing me to refactor and generalize the code. This usually creates simpler, cleaner code. Generalizing and deleting code is probably the most rewarding part of the work. It’s important to allocate sufficient time during development for this phase, because skipping it leaves behind messy, hard-to-maintain code and creates technical debt.
So, I felt very bold and started adding Canton BE too. This was supposed to be easy, but it obviously failed miserably. The code was present, yet it didn’t work as expected. After a couple of hours of searching, I finally found that the code was correct and right, but the underlying data from an external provider had an error (a table was mislabeled). A good lesson in humility.
How did I use AI this week?
- I have a large regression test suite with golden set results. There are about 100 tests to check that the simulation returned the correct result. As I changed the core engine to use fixed-point arithmetic I obviously broke all the test. Not by much, usually just a few cents off. Now I can just tell Cursor to use the output to update my golden test set.
- I stopped using autocompletion completely: the benefit is not worth the downside. Often, Cursor suggests code while I’m typing, and I end up adding unwanted and buggy code (often without even noticing). In the bottom bar of the window, click on ‘Cursor’ and select “Disable”. You can obviously still use the agent. But at least this is intentional, not accidental.
- Somewhat offtopic, but I really like to use Gemini when cooking. I can start with a list of ingredients for a salad, ask which sauce would pair well, and suggest something to complete the dish nicely. So far it hasn’t disappointed me and has made my salads even more enjoyable.
Marc
The build
This week was a bit hectic in terms of time, with the Easter break.
Nevertheless, I managed to follow up with users who were hesitating to join FI Planner due to a lack of info on our website currently. I started to create our “Features” page in the form of screenshots and bullet points to provide more clarity to people on the waitlist.
All in all, those were very useful discussions to improve our onboarding, marketing, and user experience even more. For those interested: I’m using the JTBD (Jobs-To-Be-Done) framework for this.
The edge
There are two things that are uncomfortable at the moment:
- I need to update our website with a demo video (or at least screenshots). Indeed, I know by heart what’s behind the curtain for having worked on it for several months/years now. But I’m not the standard user at all.
- I need to implement our new right-time-right-place documentation system within the web app. The cool thing is that I gathered most key content for it. Now, I need to implement it or well… ask our Claude frontender ;)
Both those improvements will help us to have less direct support to do, and more time for iterating over the product itself.
Yet, as we like to say: we’re a “Calm company”. And I know April/May is a period where weeks are shorter due to bank holidays. So I also want to enjoy it ;)
Note to a friend
If my imaginary friend was in the same stage as we are now, I would tell her: ruthlessly prioritize your backlog.
You’ll always feel you have less time than you need, so keep a razor-sharp focus on the most critical thing to do first.
How did I use AI this week?
Regarding (frontend) development, I’m currently using GenAI the following way:
- Codex 5.3 / GPT-5.4: I plan what I want to do, with a requirements list as an output
- Claude Opus 4.6: I feed Claude with the requirements list so that it creates the new code
So far, this worked very well, including for our biggest redesign yet.
Except last week for our new “Inline Documentation” module, where Codex messed up our Design System (read: it created more than just design elements), which messed up the requirements, which messed up Claude’s output… I know what I have to fix, and will try to have it done by next week. Stay tuned!
