So, here’s a dirty not-so-secret fact about GravityMoth: We care about deep verticals. When we go to write our stack, our top priority is to keep the core of the product in-house and small.

It’s not to say we’re completely insane. We haven’t written our own font renderer. We’re still using SDL here and there, as a time-saver. We’re talking to x11 and Zenity on linux, because file-dialogs and window servers aren’t really what we’re after. We’re focusing on build-system simplicity (dev onboarding should stay easy), zippy parsing and storage for our data, and as much cross-platform support as we can manage.

What’s our Vertical Slice?

Ok, time to break things out a little. What’s in a Spall?

Spall’s Stack

Libraries Used:

What’s in a typical profiler?

Standard Profiler Stack

Libraries Used:

In the short-term, I’ve taken on a ton of additional work, and inflated my timetable quite a bit. Ouch.

So, what happens if Spall’s debug parsing runs a little slow, and we want to multithread it? Just gotta reach into the DWARF and PDB parsers, find the natural split-points (compilation units), and then toss each into a pool as a task.

What happens if another profiler wanted to do the same? Uhhhhhh…. Well, the symbol resolver on Windows is not thread-safe, and libdwarf is opaque and LGPL-2. You could do what perf does, spam addr2line, and hope. At least one of the profilers out there started writing their own PDB parser to try to cut loading times down a little, and as far as I know, they’re still spinning wheels on it.

Traditional company advice is pretty straightforward. Find a niche that needs you, and get to market as fast as possible. Get tools in customer hands. Get feedback. Iterate, iterate, iterate, iterate. Provide phenomenal customer service. Win people over with founder’s advantage.

We’re taking the world’s stupidest approach, and trying to get all the serious pain out of the way early. We know profilers are viable tools. We know customers for good profilers exist. It’s a known market. We want to ship you a fluffy, contiguous cake without the layers. A solid, single piece wrench. It may not have every bell and whistle, but it’s not going to snap if you use it as a pry-bar.

This is a scary proposal. What if we die before we get off the ground? What if the VCs don’t see us as a unicorn?

Oh no.

There has to be room in the market for stable, long-term indies who make things well, and don’t want to be eaten by Google. The end-goal for GravityMoth is to be sustainable, give customers tools they can rely on, and to dogfood our own stuff, so we can keep ratcheting up the bar for quality.

Where We’re Going

We’ve been very careful with the roadmap, to help keep the momentum going. Every little step is a ratchet towards a launch-ready, solid product. The past few years have had a ton of research, missteps, cheers and tears, but the ball is still rolling.

Aug 26 2022 Working spall-web protoype
Nov 2022 Spall-web is live
Dec 2022 Histograms for functions
Jan 2023 Auto-Tracing works for the first time
May 2023 Spall-Native launched
June 2023 3 Billion Events at 120 fps
Oct 2023 Auto-Trace Line Info
Dec 2023 Auto-Trace Compression
Jun 2024 Get off SDL_TTF and SDL on Linux
Aug 2024 Get symbols from DWARF debug info
Aug 2024 We’ve hit 10k lines of code!
End of 2024? Spall 1.0 – Basic sampling on one platform

Behind the scenes we’ve had a lot of life craziness over the past few years, but Spall survived.

We’re almost at the 1.0 finish line, and I can’t be more excited to share that goal with all of you.