Tailwinds

July 2022 Retrospective

Last month I onboarded my very first employee, launched a big new feature in Pegasus, and spun my wheels on marketing work (can’t win ‘em all!).

Last Month

Profit

Project Profit Monthly Change
SaaS Pegasus $4503.72 -55.28%
Place Card Me $1410.05 -26.78%
Chat Stats $159.97 70.00%
Total $6073.74 -49.77%

A pretty substantial down month profit-wise, but, these numbers include a pretty sizeable new expense—my first hire! It’s not visible, but revenue continued along the relatively consistent trend for the year.

Goal Report Card

# Goal Grade
1 Spend at least 30 hours doing Pegasus product development A+
2 Spend at least 30 hours doing Pegasus traction/marketing work B
3 Onboard a new part-time Pegasus developer A

Time Spend

July 2022 Time

Time breakdown for July 2022

I ended up spending a record amount of time on Pegasus, including ~50 hours of product work and ~40 hours of marketing. Still I gave myself a “B” on the marketing goal for reasons that I’ll explain below.

But first, the big news:

I hired someone!

Ok, technically he’s a contractor. And technically he’s only working one day a week. But still, this is a big change for me and Pegasus.

I’m not sure I could clearly articulate my strategic decision-making process around adding someone to the team. It was part opportunistic, part for my own satisfaction/sanity, and part just for kicks. But so far it’s working out great! It helps that he’s one of the best developers I’ve ever worked with, and that we were already friends.

Funnily, one of the biggest benefits so far has been just… having someone to talk to.

Until last month I had been working on my personal projects for more than five years without any meaningful support. If I wanted to talk something through, my options were:

  1. Talk to myself—typically here in a retro.
  2. Talk to my wife.
  3. Talk to other indie hacker types I know.
  4. Talk to the Pegasus community.

There are problems with all of these options.

I’m decent at introspecting, but it’s very difficult to get valuable input from…yourself. My wife is wonderful and always up for listening, but she’s not exactly my ideal audience. Folks in the indie hacker space kind of get the big picture problems I face, but no one has the time/interest in getting deep in the details—and I’d feel bad asking them to. And the Pegasus community is also great, but talking to customers is a bit different than talking to a partner. Also, in the Pegasus community I don’t like admitting that I don’t know what I’m doing (at least sometimes!).

So, literally, just having someone who is now quickly ramping up on Pegasus and is forming intelligent opinions on the product is awesome. We’ve had many conversation of the form:

Me: “Is this a dumb idea?” <explains something I want to do>

Him: <thinking for a bit> “Yes.”

or

Him: “Why do you do <some part of Pegasus development> this way instead of <this way smarter way of doing it>?”

Me: <thinking for a bit> “…yeah, let’s change that.”

So that’s great. And he’s already made some changes to Pegasus development that have made my life way better. Like this one:

Me bragging about a new feature I didn’t build myself.

Longer term I imagine getting help has many other benefits for me / Pegasus:

  1. It makes the project more mature and sustainable. At my old work we often used to talk about a project’s “bus factor”. That is—the number of people that would have to be hit by a bus for the project to be totally screwed. For five years all of my projects have had a bus number of 1! Going from 1 to 2 is the hardest step, and this change should hopefully set Pegasus up much better for the long term.
  2. It frees up more of my time to do (ugh) marketing and strategy work. This is not a thought that I relish, but I do think it’s where my current efforts should go to grow the business.
  3. It lets me ship more consistently. As an example, I’m about to take two months off, but I’m hopeful that I’ll still be able to ship Pegasus releases now that I have some help.

Of course, the big (only?) downside to all of this is cost. I’ve historically been extremely cost-averse in my personal projects, and this is a far bigger expense than I’ve taken on before. But I can definitely afford it for now, and the upside so far is well worth it.

Overall this feels like a big step forward for the future of Pegasus.

Pegasus finally supports Tailwind CSS

My main product effort for the month—in addition to the onboarding—went into adding official Tailwind CSS support for Pegasus. And it’s done!

Pegasus with a fancy new skin, powered by Tailwind CSS

Pegasus has experimentally supported Tailwind for ages, but I’ve always been embarrassed by the implementation. It was on Tailwind version 2 instead of 3, the mobile site was garbage, and several of the examples were super ugly. So this month I took the time to upgrade and overhaul the whole thing, and I’m quite happy with the result.

The secret weapon in this whole process was daisyUI—an open-source Tailwind CSS component library that basically lets you use Tailwind a lot like Bootstrap and other frameworks.

I was previously super put off by Tailwind HTML code that looks like this (to make a button!):

<button type="submit" class="group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">

Actual code of a styled button in Tailwind UI. You’ll have to scroll (a lot) to see the whole thing.

But daisyUI takes all that markup and gives you:

<button type="submit" class="btn btn-primary">

A similar button, with daisyUI.

I’ve always loved the option for utility-based CSS with Tailwind, I just hated that they wanted you to do it for everything. Utilities + a library of sensible default components finally solves that problem and leaves you with the best of both worlds. I’m not certain that this is my new favorite way to build UIs, but I’ll definitely try it out on my next project.

I’m writing another Django guide

With my commitment to spending half my time on marketing, and many of my “easy wins” tackled last month, I wasn’t sure how to spend my time.

Eventually I had the brilliant idea that I should write a technical article about this work I did for the last Pegasus release.

Narrator: it was not a brilliant idea.

As these things often do, the scope quickly ballooned. What I thought was going to be a short post about JavaScript API clients morphed into something closer to “a guide to working with REST APIs in Django”, and now I’ve got some 3,000 words of half-finished, not-totally-cohesive content.

On top of that—the current Pegasus site is on an ancient version of Pegasus, so in order to add a demo of what I wanted to write about, I needed to upgrade it. And then I thought, “well, maybe this is a good opportunity to test and refine the Pegasus upgrade process…” and you can see where this is going…

Developers doing Marketing

Actual picture of me writing my latest Django JavaScript guide.

So—while I did log 40 hours to marketing work this past month, a lot of that work was spent writing stuff I might throw away or merging/upgrading Pegasus code.

Hopefully this month will be better!

This Month

This month will be an interesting one. The family is flying from South Africa to the US mid-month, followed by 6-7 weeks with lots of social obligations and zero child care.

With very little time to work, it will be a good test of a few big questions:

  • How “passive” is my passive income, really?
  • Will I be able to keep my new hire productive while I’m traveling?
  • With my new hire’s help, will I be able to ship Pegasus releases with minimal effort?
  • Do I actually love my kids—who are 1 and 3—when forced to spend all my time with them? (kidding!)

Anyway, I’ve got less than two weeks to tie up a lot of loose ends. My goals for the month are:

  1. Ship my API article. It’s a stretch, but I just can’t imagine having it hanging over me for the next three months, so I’ll probably just push it out at whatever quality I can get it to.
  2. Leave all my work in a decent state before I travel.
  3. Survive life without child care.

Should be a fun one. I’m guessing I won’t publish a retro next month, but may shoot out a super-quick update. We shall see.

See you on the other side!