The Unforeseen Path: How a Personal Project Reshaped a Career
Explore a compelling personal journey from critical feedback to developing a popular open-source app, culminating in profound career reflections and a strategic professional pivot.
This article reflects on recent experiences and insights, covering:
- Participating in the Ruby AI podcast.
- Integrated a new cable into my computing setup, which presented significant initial issues that were subsequently discussed.
- Observed discussions indicating that AI code generation is projected to significantly increase software demand by alleviating programming supply constraints in the short term.
- Developed 'Straight-to-Video,' an open-source library for client-side video remuxing and transcoding, optimizing media for upload via Instagram, Facebook, and TikTok APIs.
- Hosted a family member post-house sale, an event coincidentally marked by continuous power and internet outages, leading to recorded commentary on the situation.
- Reflected on the apparent cancellation or delay of the iPhone 18 Air until Spring 2027, highlighting a recurring pattern of preference for Apple's less mainstream hardware.
- Discovered the significant size of my turbinates, even in proportion to my head.
- Attended a Magic game with a friend. The game featured a dramatic comeback, culminating in a victory after being significantly behind, fulfilling a classic underdog narrative.

I was reflecting on life recently, a practice I engage in more frequently now that I am firmly in Phase 3 of my long-term plan to gracefully withdraw from public visibility. My initial concept for this essay was to explore the common threads connecting diverse fields like game design, derivatives trading, reality television, and sports betting. Unfortunately, and perhaps predictably, this endeavor proved too time-consuming, necessitating a more focused approach for this reflection.
Instead, I will share a personal account illustrating how a series of seemingly productive and rational decisions can, paradoxically, also be costly and misguided.
I'd Do It All Again
This journey began with a single piece of unsolicited feedback.
In 2016, I had the privilege of delivering a keynote address at Ruby Kaigi, held in the beautiful and imposing Kyoto Convention Center. This was a significant professional milestone for me. I dedicated considerable effort to crafting the best speech possible and also incorporated some Japanese impromptu remarks on stage.
After the talk, I was elated. Hundreds of new followers, summary blog posts from Japanese developers, and even coverage in Japanese-language tech news. My head was spinning. I vividly recall the overwhelming experience of trying to keep up with mentions after leaving the stage. Beyond a certain point, there were too many replies to translate individually—I eventually gave up and simply bulk-favorited them all. In that moment, I felt as though I had finally received the validation I had sought from the Ruby community for over a decade.
About an hour later, a Japanese friend approached me while I was still riding high. Instead of praise, he bluntly informed me that my Japanese wasn't proficient enough and that I should take my studies more seriously.
That feedback stung.
Decision 1
Initially, my focus was on traveling to Japan, nurturing friendships, and engaging with the culture.
Being told my Japanese wasn't good enough—moments after having showcased it in front of a massive auditorium of respected peers—truly, really stung. It lingered long after the ecstasy of reaching such a career milestone subsided. It consumed my thoughts for the remainder of the trip. Even after returning to the States, I couldn't shake it.
I returned home determined to overcome this challenge. I enrolled in WaniKani, a SaaS application by Tofugu that utilizes mnemonic lessons and a spaced repetition flashcard game to teach Japanese kanji and vocabulary. I diligently studied for 30-60 minutes every day. It worked! In just over a year, I had memorized over 2000 kanji and thousands more vocabulary words and phrases.
Like most modern educational software, WaniKani's design is centered around a habit-forming game loop. It's rewarding to log in daily, level up by correctly answering flashcards, and (outside the app) discover that you're suddenly able to read things that were previously indecipherable.
Decision 2
I had now shifted to being someone who intensely studied Japanese, primarily focused on clearing daily reviews and achieving level 60 on a website.
As I neared the completion of WaniKani's curriculum, I'm somewhat chagrined to admit I was more interested in refining its game loop than in applying my newfound skills to actual human communication. To that end, I had compiled a year's worth of ideas—shower thoughts detailing how I would improve the tool if given the opportunity.
Some of the more significant items on that list included:
- Connecting a larger dictionary, enabling the study of any arbitrary word encountered outside the app.
- Providing a superior mobile experience for on-the-go study without fear of losing progress when the connection dropped.
- Facilitating memorization of the production of English terms into Japanese—as opposed to merely translating Japanese terms into English—to better recall necessary Japanese words in conversation.
As is my tendency, the moment I envisioned a better software tool, I set everything aside to build it myself. Thus, from late 2017 through most of 2018, I dedicated my free time to developing an app called KameSame. It synced users' WaniKani progress, allowed for studying both production and recognition skills, introduced its own XP-based leveling system, and incorporated the ability to search and add items from other dictionaries. It also included numerous other enhancements like synonym detection, verb and adjective conjugation support, and AI-generated pronunciation recordings.
I released the app for free and shared it on several forums. It quickly garnered an extremely active user base. By last count, KameSame had over 20,000 users studying over 5 million flashcards. Keeping up with support requests and maintenance was time-consuming, but it was no match for my own voracious appetite for adding more features. When I find imperfections in other people's software, there's little I can do but accept them (beyond contacting support or offering critical feedback). However, because I had created KameSame purely for my own satisfaction, whenever I detected even a scintilla of UX friction, my developer persona would override my student persona, and I would immediately stop studying to go fix it. Instead—ostensibly for the sake of my own learning—I would interrupt my reviews for hours or days to work on the tool.
As KameSame began to resemble a real product more than a hobby project, I started treating it as such. My own learning? That diminished significantly.
But what was I supposed to do when I found a bug? Just let it be? That's how issues proliferate.
Decision 3
I had now become someone who maintained an app for studying Japanese, focusing on adding features, fixing bugs, and expanding its user base.
In a peculiar way, my hobby project eventually became integral to my primary professional role as well.
Around the time I delivered that keynote in Kyoto, I was honored to receive invitations to speak at conferences worldwide. Being on stage in front of thousands of people was an excellent way to build awareness for Test Double and our services, so I generally accepted every opportunity. I never particularly enjoyed the stress of preparing talks. I truly dreaded the grind of every business trip. And it had begun to feel draining that my primary work product had shifted from building things to competing for the attention of others.
However, as I reached the peak of my speaking career, there was one significant issue: I was running out of novel things to say.
I had been fortunate to meet many of my industry heroes—individuals I had long admired—as they entered the later stages of their careers. They still attended conferences. They still gave talks. They typically repeated the same presentation everywhere they went. They often ad-libbed at great length, with little regard for conference schedules or attendees' needs. I found all that quite off-putting, yet no one else seemed to be complaining.
The underlying cause of this behavior gradually became clear to me. These individuals had transitioned from practitioners to personalities, becoming woefully detached from current realities as a result. They were clearly drawing from firsthand experiences that were 5, 10, or 20 years out of date. I don't know if anyone else noticed, but I certainly did. By wasting people's time and monopolizing a speaking slot that could have gone to someone hungrier and more relevant, I ended up losing respect for many of them.
Still, those experiences taught me one final lesson: when I didn't have anything novel or compelling to say, I should decline the opportunity. It was better to leave room for someone else. When organizers asked me to deliver well-known presentations, I would reply with little more than a link to our YouTube channel.
This may have been the right decision from a content perspective, but it proved absurd as a marketing strategy. When I wasn't meeting new people or nurturing existing relationships, our consulting sales suffered. (I wasn't exaggerating when I said that running out of things to say was a problem!) I didn't love that dozens of people's livelihoods depended on my continued ability to provide insightful commentary and impactful observations, but that was indeed the situation I had created for myself.
To exacerbate matters, by 2017, it had been at least four years since a client had paid me to write real code for a real system. I simply didn't have enough time to add client work to the sales, marketing, recruiting, and operational demands of a rapidly growing business. While a good problem to have, I could also feel myself losing touch with hands-on development. At some point, I realized KameSame could serve as a solution by providing a way to stay closer to the ground.
My passion projects had always inspired the things I shared publicly, but this was the first time I found myself meticulously examining my personal "fun" projects with the express intention of extracting marketing content for work.
By building a helpful tool used by many people, I had, after all, gained relevant experience with the trending tools and techniques of the day. By continuing to invest in the app over a long period, it had naturally grown more complex and mature, better resembling our clients' real-world code—and forcing me to live with the technical debt I'd gradually accrued. I began translating the nights and weekends spent building KameSame into fresh marketing messages for Test Double.
Over several years, I was able to harvest significant benefits from the KameSame project: open-source libraries (like Standard Ruby!), blog posts, and critical insights spanning topics such as whether React was problematic (it was), Webpack was problematic (it was), or snapshot testing was problematic (it was, too).
In my mind, all this content was building up to a capstone presentation I wanted to give about the hidden virtues of comprehensively developing a software product as a one-person team. I was soon presented with the mixed blessing of my submission being accepted for both RubyKaigi and RailsConf in Spring 2019.
From there, I did what I always did in the run-up to a conference talk: obsessively prepare a meticulously crafted deck of hundreds of slides, replete with custom artwork and hand-tweened animations.
Decision 4
I had now become someone who created marketing content inspired by an app I maintained, focused on promoting a vision for how software should be written to remain top-of-mind in a crowded market.
When companies are small, founders are compelled to be generalists, as there is no one else to perform foundational tasks. As companies grow, founders necessarily specialize. By the late 2010s, my role had narrowed to sales and marketing. My reputation had been sufficient to keep 50 consultants busy, but as we approached our 100th hire, our growth began to outstrip my individual reach. Keeping the business supplied with new opportunities became my full-time focus, and 40 hours a week was no longer sufficient.
The pressure I felt from those stakes was, at times, overwhelming. I poured all of it into creative projects like this talk. The rest, I poured into cocktail glasses.
By the time I was rehearsing the talk that became 'The Selfish Programmer,' was I still studying Japanese? Absolutely not. I didn't even have time to keep up with my app's support requests—I was too busy building a slide deck about how great it was!
And then, finally, I delivered the talk. It might be my all-time favorite. It was definitely my most ambitious.
Perhaps all that work ultimately led to a sale. I don't know; it doesn't work that way. Someone once told me that "the thing about marketing is that only half of it works, and you don't get to know which half."
At that point, I felt empty. I was deeply exhausted and unsatisfied with the life I was living. My side projects and creative endeavors, which had always been a private respite from the drudgery of existence, had themselves become entangled in that very drudgery.
I admit to not knowing exactly what "burned out" means, but that's probably what many are imagining right now. That isn't entirely it, though.
It was more like the recognition that you've reached the natural end of a relationship. Not with a person, but rather with the only business I'd ever had a hand in founding.
The company itself had never been my passion. Instead, the company had been a vehicle whose design supported the pursuit of my passions. And it was around this time, following the positive-but-insufficient reception to my creative work, that I realized the business had grown beyond that design. Allowing the things I loved doing to remain merely things I loved doing was no longer a viable path to our continued success. For the first time since we started, the business didn't just demand more from me; it demanded something substantially different. And I wasn't prepared to become the person who could give Test Double what it needed.
It was then that I started imagining what would need to change for the company to succeed after my departure.
Deconstructing the Sequence of Decisions
At every step, I knowingly and willfully created this situation for myself:
- I diverted my creative passion to satisfy a sales imperative, because…
- …I had allowed a personal project to become my last source of professional relevancy, because…
- …I had become obsessed with finding a better way to memorize Japanese, because…
- …some language-learning software had addicted me to its game loop, because…
- …my feelings were hurt when I was told my Japanese wasn't good enough, because…
- …I had co-founded a business whose success depended on what other people thought of me.
It's been over five years since the conclusion of this story, and I'm still actively working to reclaim pieces of myself. I found one this morning.
And yet, as the familiar movie cliché goes: I'd do it all again. I truly don't regret a thing.
In fact, because I didn't set out to share this story today, it's also my first time hearing it in this coherent form. The above represents a novel weaving together of a collection of facts and memories that have been swimming around my head for years.
Is what I just wrote true? No more or less than any of the other stories I've told to make sense of the decisions that brought me to this point. In tracing every step of the path that got me here, my dominant emotional response has been one of gratitude. I'm grateful for all these experiences, and I'm grateful for the opportunity to be able to take the time to write about stuff like this. And I'm grateful that you read it and might find in it something to apply in your own life.