Cover image for Dog-Fooding as a Roadmap

Dog-Fooding as a Roadmap

rpalo profile image Ryan Palo Originally published at assertnotmagic.com ・3 min read

Tell me if this is a problem you have too: you’re busy. You love coding as a hobby and working on your side projects when you can steal some time, but those times may be days apart, and you’ve got a lot on your mind.

It gets to the point where it takes 15 or 30 minutes for you to ramp back into a project and remember where you left off, which means that the window you need to have to actually be productive on your projects grows to closer to an hour. Obviously, you have less whole hour time slots available in your day, so you work on your project less. This means your project days are even further apart, which makes it harder for you to remember where you were at before, and this cycle churns until all you do is dream about what you would do on your project when you’re busy and scroll on your phone in those 15-30 minute time slots you used to be so productive in.

And nothing gets done.

Not just me? That’s what I thought. But I had a realization that has been a huge help with this.

Dog-fooding provides free, passive, effortless inspiration.

What is dog-fooding? It’s a shortening of the phrase “eating your own dog food,” which means “to use your own product in a real way to put you in the shoes of a user.”

Start using your project in whatever use case you’ve imagined it in. You will immediately trip over gobs of bugs, trouble spots, and unexpected behaviors. You’ll be amazed at how quickly you go from “Hmm, what was I going to do next with this project?” to “I need to write these ideas down right now before I forget any of them. There are so many things I need to do!”

My Use Case: Inkblot

I’m working on making my own static site generator called Inkblot. Not because there are a shortage of static site generators. Not because I think I could make a much better one than those out there. And not because I’m not happy with Jekyll (I love Jekyll). But because none of them do exactly what I want, and because I have an irrational love for markup languages and tools like Markdown, AsciiDoc, Pandoc, YAML, etc. and working on things that have clever ways of turning information in those formats into really cool other things makes me happy.

I also have a 1-year-old baby. Which means my free-time is scattered, often into time periods where I am exhausted, and my capacity to remember much outside of family and work things has essentially disintegrated.

I got to a point where I thought, “I’m pretty happy with where this project is. I think it works pretty well! I’m not really sure what to do next. There’s probably not much more to do!”

Narrator: It doesn’t. There is.

Then I got this idea to start porting my Jekyll site over to Inkblot, and I dropped my 112 (!!!) blog posts into a directory and ran inkblot build.

Older woman typing innocently at a computer as it super error explodes.

I’ve got some work to do, and my terminal is telling me exactly where to start. Hopefully this helps you too!


Editor guide
codemouse92 profile image
Jason C. McDonald

Most of my personal projects work this way. I build Timecard to keep track of how long I spent on tasks, dicebox for helping me make arbitrary decisions, and dkim_manage because I'm an incredibly lazy IT. I built the icon theme I always wanted to see, a script for working around my router's lack of a NAT loopback, and even a Minecraft datapack to add the features I wish existed. I use virtually all of these daily!

I still plan to build Elements, my dream music player, and Pestr, an alarm clock that actually works for me (which I'm going to build with a friend of mine).

The only trouble is, I never have enough time to build everything I want! (Still beats boredom.)

zandershirley profile image
Zander Shirley

Interesting post.
I believe Paul Graham from Y Combinator always insists that talking to your users is very important.
Dog-fooding can sometimes mean only consulting with yourself.

rpalo profile image
Ryan Palo Author

Yeah, in my case, dogfooding means I’m talking with 100% of the planned users, but you’re totally right that as the user base grows, it’s certainly not going to cut it alone. I think the model that the VSCode team uses is really effective, dogfooding while working to a very public and voted on issues list.