Hi, I'm Jeremy and I run one of the product-engineering teams at Gusto (manager of managers kind of a thing) and don’t code at work any more. Yak Tack let’s me stay in contact with code and indulge in my passion for words.
I have an atypical view of software engineering; I regard it as a craft. And I think it’s important that engineers know what good design is (interaction- and system-), understand when and when not to scale, and foremost obsess over how people experience what we build for them.
And I think it’s this idea, that code is craft, that has kept me fascinated with the industry for so long.
I’ve taken risks in life. In 2012 my wife and I moved away from the stable life we’d built in San Diego to San Francisco so I could pursue my ambition in starting a software company. I had a chance to join forces with an early founder of PayPal back then. I was star-struck. His connections (VC, A-list tech) were impeccable, and we raised a lot of money quickly. But he didn’t have unique insight into how to build great product experiences. It turns out he had to guess at what was “good” just like everyone else does.
That early venture didn’t work out after only a year. And so I tried again with another one and almost made it into orbit. And it was during this time that I developed a deep appreciation for technology companies that start with sound business principles; where the objective is to make more money than they spend. Crazy, I know. But this is not how Silicon Valley works. Grow now, make money later is the mantra there. And that works for 1% of companies.
But I have more respect for a corner store that has managed to stay in business for 25 years than a tech company that raises $50 million. That corner-store owner has grit.
In terms of what really matters, I’m a husband and a father to three young boys. Being in my 40’s now, I find I’m deeply aware of the ephemeral nature of life. The clock is ticking; perspective comes fro this realization.
I spent a couple of years as the CEO of a small technology-based publishing company. And I was surrounded by wordsmiths all day. These people spoke eloquently. I’d almost call it art. The idea that there is a single word that means “speak as if you’re competent and prepared even though you’ve done nothing” (extemporaneous) fascinates me. We’re surrounded by these words, and here was a group of people that still uses them.
I wanted to join that group.
So I built Yak Tack to solve a problem that I had. I wanted a way to learn and remember new words. And I’d been familiar with spaced repetition as a retention technique. So I developed an algorithm based on the Leitner system and rolled it out for my own use.
I sat down in March, 2018, ready to build this thing. The hardest part is deciding on the name. Is the URL available? How about the Twitter handle? I landed on “Yak Tack” as a play on “yakety yak” (from that famous 50’s song) and “tack,” which means “to stick.” My initial goal was to create an email-based app. Personally, I was tired of having to download yet another app, or remember yet another website. So the first iteration of Yak Tack was email-only. The use cases I wanted to support were:
Email a word in the subject to email@example.com and have the definition emailed back.
Create an account with the “from” email address if one doesn’t exist.
Ensure everything is password-less; borrow the magic link pattern made popular by Medium.
Remind the user about the definition every day, following the Fibonacci sequence, up to day 34.
At Gusto, we use React on the front and Rails on the back. So I built the Alpha version with the same stack so I could stay relevant at work. And being a team of 1, I knew it would be important to make sure I didn’t introduce any regressions (basically break things) as I was developing and rolling out changes, so I invested in automated tests early. Yak Tack is hosted on Heroku, and much of the backend processing is done through a job queueing system called Delayed Job. The dictionary itself is derived from Oxford (they have a nice API), and it also integrates with Wikipedia as a backup. And it integrates with Zapier webhooks to automate email-based processing. So once I was ready, I rolled it out to, well, me. I used it for about six months before I decided to open it up to others.
By August, 2018, Yak Tack had evolved into a simple web app. I was on vacation and decided it was time for a world-wide debut. I put a lot of work into getting the app to a place where I wasn’t embarrassed by it. And with much anticipation, I woke up early one morning in August and posted it on Product Hunt. I then emailed the early cohort of users about the launch, and many of them were kind enough to upvote the app.
But the first comment from someone I didn’t know was:
“That logo looks like a naked person doing yoga from behind.”
I was gutted. All that work, and that’s what we get to talk about.
Traffic spiked overall, and I acquired a core set of users that remain with the product today. Specifically, a blog called 100Shiki wrote an article about Yak Tack based on the PH launch. And quickly Japan became the most popular country. The “help people learn English” use case took prominence after the first PH launch.
When it comes to publicity, Yak Tack is woefully neglected. If ever I get to a point where I can dedicate all of my time to this, I’ll do more here. But this is what has worked so far:
Twitter: Ok, with only 50 followers, the @yaktack account isn’t breaking records. But I take time almost every morning to engage with the language community. Usually I comment on tweets other people are making. I make a conscious effort not to self-promote. Give and you shall receive, they say.
3 Product Hunt Launches: I’ve had something launch-worthy almost every year since 2018. Each time, I orchestrate a new launch there. PH is great at creating traffic spikes, but I’ve learned that a fraction of that spike sticks around over the long haul. Good retention tactics are vital.
Retention Tactics: I’ve noticed that people who stop using Yak Tack regularly do respond to notifications reminding them to come back. I’ve productized this. Every week, each user (who hasn’t opted out) receives a notification (email or push notification) with the most tacked words from the previous week. And every Monday, I pull an old word from each person’s archive and ask them if they still remember what it means.
I need to do more here, but overall I think productizing my retention hooks is the way to go.
Media: Yak Tack hasn’t had much media attention. But what it has had has been “earned,” as they say in the trade. Basically, people have found Yak Tack and written about it of their own volition. We were featured in 100Shiki (Japan and now defunct) and recently in MakeUseOf.
Here is the architecture of Yak Tack,
Web: Yak Tack is an SPA (Single Page Application) built in React. It makes use of React Router for navigation, and Redux for unidirectional data flow and state changes.
Mobile: The mobile apps (iOS and Android) are built in React Native and follow a comparable architecture to the web version.
Backend: The backend is Rails. The web and mobile apps interact with idiomatic RESTful endpoints. But from there, I’ve abstracted Rails away. REST controllers interact directly with plain Ruby service classes, where all of the business and persistence logic is held.
Once those service classes need to interact with the database (Postgres), they make use of idiomatic Rails models.
The last important piece is the asynchronous job structure. Yak Tack is built on Delayed Job. Most transactions that can be eventually consistent (i.e. state on the backend can catch up with state on the frontend) are done through Delayed Job. And certain events that need to happen at a regular interval, such as sending our daily tack notifications, are scheduled using the free Heroku Scheduler plugin.
Integrations: Of course, it would have been impossible to build Yak Tack even 15 years ago. Credit card processing is handled by Stripe. The frontend uses a React component built by Stripe to collect credit card information. What’s cool here is that this information is never transmitted to Yak Tack; it goes straight to Stripe. In return, Stripe gives me a reference token that I can use later. This is a super secure way to keep this data secure.
Email is delivered through Amazon SES (simple email service).
And the dictionary Yak Tack leans on is Oxford, although Wikipedia stands in as a backup for more esoteric words and phrases.
Yak Tack interacts with all of these integrations through an API.
Recommendations: If you haven’t already, use Stripe Atlas to incorporate your business. It’s really simple, and with it you get free access to things like AWS. They also helped me set up a business checking account and prompt me when corporate taxes are due (boo).
Also, I’ve been storing Yak Tack source code in Github, and making use of the Kanban-inspired Github projects feature to keep track of my feature and marketing backlog.
The biggest reward is that I get to be the creative director! There’s a pride that comes with turning an idea into something real, then seeing other people find it useful too. Yak Tack is now used by people in dozens of countries, and that’s not something I’d imagined happening when I started this thing.
The challenge, of course, is time! I wish I could spend more time on it as there’s a lot I’d like to still do.
Marketing, marketing, marketing! I need to get more serious about it. It’s clear that when people discover Yak Tack, they love it.
The other thing I need to do is give folks broader payment options. We have issues with some debit cards outside the US. I need to work on that.
And one of the biggest new development items I want to focus on is making Yak Tack a native dictionary on MacOS and Windows; imagine being able to highlight a word and start tacking from any computer program.
I’m a huge fan of how Basecamp builds software. I’ve borrowed many of their ideas from their book, ShapeUp, in my day job.
In reality, you only need to worry about process once you have, say, 4 or more people working together.
Otherwise, keep it simple. Kanban is a good, simple approach. With it, you maintain a list of activities to do next (new features, bugs, marketing). Keep the list prioritized such that the next most important thing to do is at the top. Pull the thing you’re working on off the top of the list. When you’re done, move it to “done,” then pull over the next thing.
When you have a new idea, add it to the list and prioritize it relative to the other activities that are already there. That’s it!
A knowledge-sharing community for app developers