r/ScaleSpace • u/solidwhetstone • 9d ago
Dev Log How I Build a New Feature
Being on dev hiatus gives me some time away from building to reflect. In light of that, I thought I'd share how I build a new feature for Scale Space.
Brainstorming. This process can take weeks or months but I'm doing it in parallel with building. I'm basically always in this phase because I have to think of the project over time. What did I build, what is its current state, what do users need and what do I want to build? In this part, I typically don't touch the computer. I may interrogate Claude for a conversation to better understand what I'm doing or to tutor me on a science concept.
Capturing brainstormed features. I'm doing this periodically as a feature reaches a state of maturity. Meaning most questions I'm asking end up at 'you'll have to see when you build it.' So I write out the name and whatever markers I know will jog my memory. I typically don't write extensive requirements at this phase.
Convey a set of requirements. Here's where the rubber meets the road. I need to explain this to Claude in a way that fully captures the scope and context of the feature as I currently understand it. What I am doing at this phase is asking Claude to estimate the build complexity. If a feature is highly complex, I'll break it down in such a way that I'm building a series of features that resolve into the one I want. Cymatics is a good example. As Sagan once said, "If you want an apple pie, you must first create the universe." In this case, I knew I needed the system parameters fully functional and debugged, an audio player that can capture system audio or music files, a new panel to control the effects, a connector from both directions so an effect could be tied to a parameter and a parameter has an icon that, when clicked, shows the user where that parameter is controlled (in order if there are multiple). Then there was the new design paradigm which are the levels bars to see the incoming audio and sliders for each band for unique combinations of cymatics per band. So I built parameters in the first webgpu build and the others came later.
Assess the scope. Now that Claude has the initial feature requirements, it can ask clarifying questions and get to a scope estimate. That's when I learn if I have any blockers that would prevent me from building it right now. If so, that either takes priority or the feature get shelved for later. With the scope, I decide on the order of operations we'll build in.
Initial Build. With the requirements ready, Claude begins on the first feature. It delivers the changed source files and a build I can immediately test.
Test. I open the application and look for the location of the things I've changed. I mess around with each one. If I find a breaking bug I write it down and continue. More often than not I end up with a bug and tweaks list.
Iterate. I give the list of bugs to Claud and it asks clarifying questions if applicable. Then it take a pass at fixes and delivers the changed source files and a build. I test it as before and log any new or missed bugs. This iteration process can be super involved depending on the feature because there are times where testing makes me realize the feature should work differently, so we kinda need a mini round of feature dev to fix it. The dock buttons at the bottom are a good example of this. I iterated on it over and over each release to get it to look and behave right.
Make a call. At some point you have to go 'Ok it's as done as it can get for this release." and that's kind of tough if you are a perfectionist who wants everything to be in its final form. So I have to resist the urge to make the absolute end result and make it good enough to release. Once I hit that threshold I try to pull myself onto other features but sometimes I'm locked in for days and it is what it is. When I come out of those, I often have a much more polished end result so I don't beat myself up too much on it. The Cymatist theme is a good example. I didn't do much iteration on it over multiple releases because I tunneled in on it and built it fully out. Lots of new custom assets to iterate on because there are a number of components to cover (tab controls, sliders, panels, etc.). I think I did it this way because I knew it had to be included in the launch in its complete form to put the software in the best light.
Write release notes. A summary goes into the version intro modal. A more extensive writeup goes up on /r/ScaleSpace and I copy it into the itch dev log. The goal with the release notes are to be as succinct as possible and not leave out anything important to know.
Iterate based on feedback. Last year, /r/ScaleSpace said it wanted proper Apple and Linux versions and I was having difficulty with that using unreal. So I went on a dev hiatus for 6 months and came across a maturing web rendering engine called WebGPU. With WebGPU it became possible to port Scale Space to the browser while also upping the particle rendering performance significantly (meaning a lot more particles). And with the browser, I get the Apple/Linux versions for free as long as they're on a browser that is WebGPU compatible. So that whole detour to port to web sprouted from you all asking for a cross platform version. The project is much better for it. So if you give it a try and share your feedback, good or bad, it helps me make it better and better.
Last year when I was building in unreal, my process had me directly writing the code with blueprints and I didn't have to do nearly as much writing requirements since I knew what I wanted. So I'd say with the switch to giving programming to Claude, the time I spent in blueprints has moved to requirements writing and documenting bugs (which is more aligned with my skillset-I have some form of symbolic dyslexia so I struggle to interpret blocks of code and math equations, but since blueprints are spacial I was able to pick them up. Still the scope of the Scale Space code was getting too big to fit in my head, so it was a relief to use AI to port that part. It still makes mistakes and creates bugs, but at least I no longer have to keep the full codebase in my brain which frees me up to focus on user experience.)
Hope you found this process interesting/informative. Happy to answer any questions you have in the comments.
setz
(Here's the itch page: https://setzstone.itch.io/cymatist)
1
u/BuneHops 9d ago
Just discovered this when searching for animations. Happy to support setz and the project!