December 2021 Retro

Jason Profile
Jason Wallace
Jan 07, 2022 · 6 min read

In last month’s retro, I admittedly wrote a very underwhelming recap. I mostly spent my time on self-indulgent admin tasks and I didn’t go into as much detail as I usually do. This might have left some of you thinking “Is that it?”. Sorry about that.

On the flip-side, that previous write-up didn’t take me too long to write and I was happy to get on with my work.

December was a good month for AdSlicer functionality, but pretty stagnant on UI and the accessibility of those features.

Last month’s goals

  1. Build out AdSlicer into a useful MVP.

    (AdSlicer being a Facebook ads analytics tool)

    Final grade: 🚧

Main events

A glimpse of value

I feel like Indiana Jones using an unreliable map based on unreliable sources in search of a hidden treasure, that might not exist.

I’ve heard stories of the problem. I’ve even experienced part of the problem myself. However, there isn’t a clear solution. I wonder around uncovering the edges of the problem space in order to close in on a solution. I’m not too sure how the solution will look, but I know certain properties it should have.

At some point, I uncover enough elements of a solution to see a faint image. I have to squint my eyes a bit, but it’s there. I think I’ve uncovered something valuable.

Conquering the scariest feature

As the name suggests, AdSlicer lets you dissect your Facebook ads to reveal the parts that are working and the parts that need attention. A big part of this is the ability to limit your view by focusing on a specific date range (i.e. monthly performance, special offers, retail holidays, etc.).

Up until this point, I have been querying the Facebook APIs for all ad data each time. This was fine in dev, but I would be rate-limited soon enough.

Querying the Facebook APIs directly gave me perfectly accurate data, but it wasn’t scalable. I needed to recreate the aggregation Facebook was doing, but with my own previously cached data. This would allow me to slice up the ads in any which way I wanted.

At this point, I’ve handled the ad data enough to know what outcome I wanted and how to model it in a database.

I replaced my previous CSV + pandas solution with a relational database and kept the ad data up-to-date by fetching incremental data from the Facebook APIs.

This was a huge undertaking that also forced me to think about how to model my data in the frontend — a symptom of my “client-first architecture” approach.

The meat of this solution was mostly backend code, but I struggled more with structuring my frontend code.

Overall, I’m happy with the outcome (code-wise).

AdSlicer date range picker AdSlicer can now limit the ad results to a specific date range. An interesting side-effect is that I can replay the ad results if I slowly extend the date range one day at a time (as shown above).

Repurposing code from a previous project

Back in the day (2020), I built a for-fun project just to see if I could: socialhooks.io

Anyway, I had to figure out how to implement OAuth for Twitter and Google in a client-first architecture. I attempted to use django-allauth and python-social-auth, but at the time it felt too magical to me. I couldn’t figure out how to transfer a successful social-authentication to the frontend. That clearly meant I didn’t understand the auth flow.

I solved the issue by implementing my own solution (yes, very time-consuming), but at least I had a better understanding of OAuth.

Back to the present day, I extended (and improved) my previous social auth code to include a Facebook integration and pulled it into AdSlicer.

I still need to add a few finishing touches to AdSlicer in order to move the Trello card over to the “Done” column. But for the most part, I can log into AdSlicer with Facebook.

Indie hacking for 6 months with $0 revenue

Time flies when you’re having fun, right? Well, I must have been having the time of my fucking life because I can’t believe it’s been 6 months since I left my full-time job at the end of June.

A fellow indie hacker said it took them 6 months to make their first $ online. That seemed like a reasonable timeframe to make money from a software product, perhaps even too long.

Well, here I stand, tail between my legs.

I am humbled by the effort and dedication it takes to will something of value into existence.

The dream of indie hacking and “working on my own thing” is very different to the reality of it.

I see people perpetuating this idea that “quitting your job and working on your own thing” is nirvana. However, that’s just the start of the pain.

Indie hacking is super cool and I never want to go back to being employed, but it would be irresponsible not to highlight some of the difficulties that come with it. Specifically,

Time

I took a break from freelancing over the holidays. I seemed to have used some of that extra time to work on AdSlicer, which is up by 36% since last month.

Time allocation (2021-12)

This month’s goals

  1. Launch a very bad version of AdSlicer to the public.

    When I say “very bad version”, I give myself permission to ship something ugly and imperfect. This doesn’t mean it will be that way forever. It just means I can get something out the door and into reality (where users live). The people that do see the first version and think “lol fuq dat, it doesn’t even do X”, at least I’ll know what to focus on next.


Happy New Year and thanks for making it this far. If you're interested in what happens next, I'll email it to you next month 👇