At least for the time being, I'm sold on the hexagonal architectural pattern. It seems to provide smart guardrails as software grows in complexity.
There's no magic bullet to stop asynchronous code complexity, but some approaches are drastically more effective. Here are 4 types of "time travel" I use.
I know I'll resist taking a break whenever I'm in the "I will solve this problem if it kills me" mode. So I made it all but impossible to resist.
You could develop in a windowed Linux environment. But if you want to stay in MacOS and use Docker, I have a few tips to make your life better.
The run_me command is useful for any task where you might use different command line programs for the same semantic meaning (e.g. “build” or “execute”).
Using mapped types, making factories for test data is a cinch. And I can use mapped types to provide guarantees you simply can't get in a dynamic language.