I'm building a small project for myself, a web page editor. There's a frontend framework, an editor, and a backend. The first few months of the project went great and I was a blitz of productivity. Now there's only a few features left I want to build, yet writing the tests for these and going back and forth on different decisions has killed all productivity and drive within me.
I have tests but changing existing behaviors feels exhausting. Even a small refactor, even with good tests in place, feels exhausting and I just don't want to pick this up anymore.
Part of it feels like I've tried to do too much at once instead of building piece by piece, but even building piece by piece doesn't work because at some point you realize a new feature requires you to revisit the architecture of a prior decision, and that just puts me off from ever picking it up again.
I'm tired, I'm exhausted, I want to finish, but this is a recurring problem for every project I start. It just feels like I'm unable to ever find a way to wrap things up and I'm always working in a spiraling circle instead of the meme about drawing a wolf with some circles, add some details, etc.
Is there a book or article one recommends? It feels like I never learned how to code properly, even though I've been coding professionally over 10 years.
Here's my tips (based solely on my own experience, but maybe some of them will be useful to others):
1. Make a plan to decide what is in scope, what you want to make (at least for now). This plan can be revised, but you want to stick to it unless you have a very good reason to change. Avoid scope creep. (One way I manage this is to set goals. If I exceed my goals' deadlines, I can afford a bit of creep. Otherwise, I stick to the plan.)
1b. DESIGN your systems up front. You want to be adding modules to a well-architected system, rather than chipping away in the dark hoping a sane structure takes form by luck or genius.
2. From the outset, break the project into a series of medium-sized, high-level chunks. In my case, this is things like "create level 1", "complete weapon model 1", "create player gameplay code". Generally, I avoid moving off a chunk until it is completed, and each chunk is broken down into subtasks.
2b. Find a SIMPLE way to track these chunks and tasks. I use Trello, but don't use anything fancy lest the tool become its own side project (I speak from experience...).
3. Try to make some progress most days (unless I'm on a prolonged break). When I'm really not in the mood, I'll settle for just 25 minutes work (and often when you've done the 25, you'll find you're able to do more).
4. While you want a plan, and you want to design things before you implement them, especially architectural aspects, don't worry about being perfect. Get things done. You will be able to fix problems later. This is especially wise to remember if you're stuck – just get something that works there, and maybe tomorrow you'll figure a way to refactor or do it better, or maybe you'll even find that what you had was actually sufficiently decent.
5. Don't feel bad about taking prolonged breaks. For creative projects, this really refuels the tank, but I imagine it'll be useful for any significantly complex project. Absence makes the heart grow fond.
These things work for me at least!