Productivity

  • The Vibe Life: Building Smart Keys for Mac

    I didn’t realize I was about to enter the “vibe” industry when I started building Smart Keys. All I really wanted was a way to sound fluent in languages without doing the hard work. Let’s be real: learning languages is tough. So, I built an app that lets me fake my english fluency until I make it. Besides hating this reference, the thing here is that I’ll probably never make it. I may not be as fluent as I sound using tools like this.

    Still, Smart Keys did the job for me on my phone. It solved my laziness problem and gave me a sense of accomplishment. Translate a message, change to a more casual tone, proofread an email, all with one tap. Suddenly, I was hooked. This tiny app had me feeling like a fluent native speaker.

    Bringing the Vibe to My Desktop

    Once Smart Keys worked its magic on my phone, I thought: why not bring this vibe to my desktop? I wanted to cut down on the constant back-and-forth between tabs, the endless browser windows, and that infuriating cycle of copy-pasting. Small tasks, like checking email, sending a reply, or fixing a bug, don’t require much brainpower, but they drain your energy nonetheless.

    So, I created Smart Keys for Mac.

    The goal was simple: stay in my flow, move through tasks without jumping between apps, and avoid losing focus on anything. I wanted to type, hit a shortcut, and keep moving. Proofread, translate, fix code, all without leaving the current task.

    Simple. Efficient. Minimal.

    The Perils of a One-Code Solution

    Now, if you’ve ever tried to port an app from iOS to macOS, you’ll know it’s not as simple as change deployment target and calling it a day. That’s what I thought, but nope. The idea of maintaining one codebase sounded genius: keep it efficient, keep it synced, keep the maintenance low. But here’s the thing: macOS and iOS are like distant cousins. They share some traits but are entirely different creatures.

    “If debugging is the process of removing software bugs, then programming must be the process of putting them in.”

    – Edsger Dijkstra

    “Two platforms, one codebase” sounds like a dream, but I quickly realized that you can’t just slap a mobile UI onto a desktop app and call it a day. The screen sizes, input methods, window management, all these small details had to be adjusted. It’s like trying to fit a square peg into a round hole, but making it work without losing the essence of what you built.

    The Fine Line Between Efficiency and Overload

    Incorporating macOS-specific optimizations wasn’t as simple as resizing windows. The app had to manage multiple displays, adjust for different screen sizes, and still feel fluid while taking advantage of the desktop’s power. Every change, every tweak, led to a cascade of other adjustments. Maintaining a single codebase was efficient in theory, but it created a lot of headaches along the way.

    I spent more time testing than I care to admit, making sure one small change didn’t break something somewhere else. But that’s the process. There’s no such thing as an easy app transition (yet).

    Selling a Quiet Product That Does a Lot

    Now that Smart Keys mostly works, the challenge has shifted. I’m not wrestling with bugs as much as I’m wrestling with words. Building a product that blends into your day is one thing. Explaining it without making it sound like a blender full of features is another.

    It rewrites. It translates. It fixes weird grammar and polishes sloppy code. All in the background, with shortcuts you barely notice. That’s the magic. And also the problem.

    It’s hard to pitch a tool that isn’t trying to impress you. It just wants to help and then get out of the way. Try to summarize it in one sentence and you either oversimplify or overcomplicate. Try to be specific and it starts to sound like five tools in a trench coat.

    “First, write the press release. Then, build the product.”

    – Not me

    So now I’m figuring out how to talk about it without killing the simplicity. Selling a quiet product in a world that rewards loud ones. Making clarity feel exciting without dressing it up too much.

    Still, every time I’m stuck rewriting copy for the tenth time, it’s right there. I hit a shortcut, smooth things out, and move on.

    Sure, half the time I’m fixing the thing I just built, but hey, at least I’ve got good shortcuts for the apology emails.

  • Why I’m airing my dirty laundry goals in public

    I used to think goals were private, write them down, forget about them, repeat. Turns out, saying them out loud can flip everything upside down, sometimes painfully, but mostly for the better.

    But I realized that when I shared my goals publicly, something happened…


    1. The Kombi Adventure

    A few years ago, I told a friend, “I’m going to buy a Kombi (VW Bus) and travel South America.” It was the kind of confident nonsense you say after a beer, then immediately forget.

    Except my friend didn’t. A year later, they asked, “How’s the Kombi trip?” Panic. I didn’t even own a Kombi. Instead of admitting defeat, I blurted out, “It’s happening soon!”.

    Next week? I bought one, quit my job, and hit the road. No clue what I was doing, but that trip became one of the best decisions of my life, all because I ran my mouth to the wrong, or right, person. It wasn’t to prove anything to my friend, it was in respect of my young self dreams.

    Besides traveling, I occasionally served as the lunch bus driver.

    2. The 100 books challenge

    In 2022, I let Goodreads peer pressure me into being a better reader. I set a goal, and that little progress bar guilted me into finishing more books than the past three years combined. I didn’t hit 100 books that year, but it left me motivated to keep going in the years after.

    3. The 500-mile bike ride

    Then came a fundraiser and a 500-mile bike ride from San Francisco to LA. Fundraising and training sucked, so I built Sf2.la, a site that publicly displayed my Strava data and helped me raise money. Suddenly, skipping rides wasn’t an option when people could see my stats or lack of them. I hit my fundraising goal, completed the ride, and met amazing people along the way.


    How to set goals that stick

    I’ve learned that vague goals die quietly. The trick is structure.

    1. SMART Goals: Specific, Measurable, Achievable, Relevant, Time-bound.
      • Instead of “read more,” I set “Read 101 books in 2025, 50 of them graphic novels.”
    2. OKRs (Objectives & Key Results): Break big goals into measurable steps.
      • Objective: Ride SF to LA
      • Key Results: Ride 300 miles in training, complete two 80-mile back-to-backs

    Make it public (and embrace the chaos):

    Whether it’s a close friend, a family member, or even a social media post shared with your wider network, openly sharing your goals makes them feel more tangible and real.

    By putting your intentions out there, you invite accountability from others who can help keep you on track. You’ll also gain valuable support, encouragement, and motivation from those who want to see you succeed.

    Sometimes, this support comes in the form of a cheer squad that celebrates your progress and milestones with you. And when things don’t go as planned, having people who can laugh with you and help you bounce back makes the journey much more manageable and enjoyable.

    Why this works? Or maybe it doesn’t?

    Some studies say sharing goals can decrease motivation by tricking your brain into thinking you’ve already accomplished something. Maybe. But for me, it’s about the process. Whether I’m fumbling through 101 books or sweating through a ride, the magic is in the doing.

    So I’m leaning into Open Goals. Science may disagree, but it keeps things interesting.

    What about you?

    Got a goal you’ve been keeping quiet? Say it out loud. Post it. Tell a friend who will hold you to it. It might just change everything.

  • Have you asked your team how they really feel about Mondays?

    Maybe not directly, but ask what days of the week they feel most productive. For me, Mondays were the worst. I used to feel that Sunday evening dread creeping in, knowing what Monday had in store: endless meetings, tough decisions, and a drained feeling by day’s end. 🥶 And guess what? Most of the team felt the same way.

    So, I ran an experiment to change my Mondays, and it worked wonders. Not just for Mondays, but for my Sunday evenings too.

    Here’s what I did:

    1. No meetings on Mondays: Blocked off the entire day for “Flow Mode.”
    2. Moved sprint planning to Tuesdays: This helps the team ease into the week and avoids the temptation to work over the weekend. Plus, one third of all sick days happen on Mondays, so attendance issues are less disruptive.
    3. The dev, support, and mkt teams can use Mondays to solve possible issues generated during the weekend.
    4. Made Mondays a day for reflection and solving issues: Use the day to gather insights from the weekend, summarize last week’s learnings, and prepare for informed decisions.

    Paul Graham says it best: “Don’t your spirits rise at the thought of having an entire day free to work, with no appointments at all? Well, that means your spirits are correspondingly depressed when you don’t.”

    My Sunday nights used to be filled with anxiety, but now I look forward to them because my Mondays are mine.

    Am I moving my worst day from Monday to Tuesday? 🤷‍♀️

    Well, yesterday was Monday and I felt super productive. Today is Tuesday, and I’m here super excited about sharing this with you and eager to get things done.

  • Experiments by Linus Lee

    I’ve just found one more amazing AI experiment created by Linus Lee. Costructure is a pair of interface experiments that explore ways to enable nonlinear reading, where we read a document by first scanning for key ideas, then dive deeper on the more interesting sections.

  • Gut Feeling Prioritization

    I’ve always found myself at a crossroads when it comes to roadmap prioritization. The constant struggle between waiting for conclusive results from A/B tests to set clear priorities, managing the flood of customer feedback, and the need to move forward with strategic planning has been a significant challenge for me.

    I recently rewatched one of my favorite Goodwater Masterclass episodes featuring Sean Rad (Tinder). It reminded me of stories about successful companies where, during the early stages of their product development, the most impactful ideas were top-down and based on gut feelings.

    Then, as the company grew, formal processes became necessary to deal with the increase in customer requests and the influx of new ideas from the team, which made decision-making slower.