Full Width [alt+shift+f] Shortcuts [alt+shift+k]
Sign Up [alt+shift+s] Log In [alt+shift+l]
61
Another year as a founder CTO, and let me tell you, it’s been one for the books. I can’t remember a time in my life that was more demanding and emotionally draining. Those early years were filled with hard work, but we were also full of energy, ambition to build, and the sense that we had absolutely nothing to lose. As my dear friend Jacob used to quip, “Worst case scenario nobody dies”. Yet, everything takes on a new perspective when you’re responsible for the monetization infrastructure of over 30,000 apps and ensuring the livelihoods of not only your team but also your own family. While I would typically begin this series of posts with an array of metrics, this year has been a whirlwind of events that has taken precedence over mere numbers. So, dear friend, take a seat and allow me to share with you a deeply personal and epic firefighting tale and the battle to restore the flame of RevenueCat’s core values. The Year of Shipping We embarked on Q1 with big intentions and an ambitious roadmap. With seven new engineering teams, my role was to lead the one responsible for serving our larger customers. My days consisted of collaborating with our (still tiny) sales team, while simultaneously overseeing our support function. While I continued to provide technical guidance to several projects, I made the conscious decision to delegate the bulk of product development to the other teams. In hindsight, this decision proved to be a mistake. The teams were still finding their footing, with a mix of new hires, and there was a disconnect between engineering and product that needed addressing — a topic we’ll get into later. Nevertheless, the team I led was firing on all cylinders, delivering enterprise-level features at a hasty pace. From implementing single-sign-on in a matter of days, to tackling gnarly bugs, this team’s momentum was inspiring. I hoped that this stride would serve as a catalyst, motivating the rest of the teams to achieve a similar velocity. On the home front,...
8th Jan 2024

Stay updated

Get a weekly newsletter with the top 5 articles worth reading every week.

More from Miguel Carranza

The Dopamine Problem Every New Manager Face

I recently wrote an internal Management 101 guide for new RevenueCat managers. It is not meant to be a universal management guide. Most universal management advice is either too vague to be useful or too generic to survive contact with a real company. My goal was simpler: explain what we expect from managers, why the role matters, what tends to feel weird at first, and where to start when things get messy. One of the sections I think matters most is the dopamine problem, because it is one of the most immediate changes. The weirdest part of becoming a manager is that your old scoreboard disappears. As an IC, you can point to things you shipped. Code merged. Bugs fixed. Systems improved. Customers helped. Even hard weeks usually have visible artifacts. Management work is slower and less satisfying in the short term. You can have a great week and nothing obvious happened. A project got slightly clearer. A candidate stayed warm. A conflict did not become a fire. A direct report heard feedback early enough to fix something. A team avoided a bad architectural decision. A future manager took one more step toward readiness. That is real work. It just does not always feel like it. This is one of the hardest parts of the transition from IC to manager, especially for Engineering Managers. You are used to being useful in a very concrete way. You know how to debug the issue, review the design, write the code, fix the incident, and unblock the team. Then suddenly a lot of your work becomes indirect. You need to stop trying to solve the problem in front of you. You need to make the team better at solving that type of problem in the future. It is also getting harder in the age of AI. Agentic coding is even more addictive. You can describe what you want, watch the agent work, review the diff, and get a working prototype or bug fix in minutes. The loop is fast and incredibly satisfying. This is why many new managers cling to coding, technical details, or direct execution. It gives them the old dopamine. It also feels useful when there is urgency: a project is at risk, a technical issue is blocking the team, or execution is moving slower than you think it should. Sometimes stepping in directly is the right call. If production is broken, do not sit there having a philosophical debate about leverage. Help. But most of the time, direct execution is a patch around the real problem. If the project only moves when you personally drive it, something else is broken. Maybe ownership is unclear. Maybe the team does not have enough context. Maybe the technical plan is too complex. Maybe the bar is too low. Maybe someone needs feedback. Maybe you have the wrong people on the problem. Maybe you are still acting like the tech lead because that is more comfortable than acting like the manager. Your job is to make the team capable of executing without you, either by hiring the right people, training people up, clarifying ownership, or raising the bar. If you keep solving the work yourself, you prevent yourself from learning the new job and prevent the team from growing into it. You need to rewire your satisfaction from “I shipped the thing” to “the team is stronger and shipping better because of the work I did.” That takes time. Some practical advice: Set weekly goals for yourself. Not vague goals like “be a good manager.” Concrete goals: write the 30/60/90 plan, give feedback to X, unblock Y, clarify ownership for Z, source X candidates, review hiring funnel metrics, talk to another manager about a problem. Create accountability. I use weekly emails. Use whatever works, but do not let weeks disappear into meetings. A full calendar is not evidence of impact. Write things down. Writing forces clarity and creates artifacts when the work itself is abstract. If you cannot write the decision clearly, you probably have not made the decision. If you cannot write the feedback clearly, you probably do not understand the behavior well enough yet. Look for compounding work. Better onboarding, better interview calibration, clearer team ownership, stronger tech leads, training people up, and improved decision-making pay off repeatedly. They may not feel as satisfying today, but they make the company more capable. Management is not a promotion from building. It is a different way of building. You are building the system around the work: the team, the standards, the ownership model, the feedback loops, the hiring bar, the culture, the decision-making. The hard part is that the system does not always give you a green checkmark at the end of the day. Do it anyway. Originally published as an X article on July 10, 2026 and archived here.

10th Jul 2026 2 votes
100 Lessons From Building a 100-Person Org

RevenueCat now has more than 150 team members. Around 100 of them are in my org. This is still a little crazy to me. My own org is now bigger than any company I had worked at before starting RevenueCat. As a technical founder, I always preferred computers over people. Computers are deterministic. People are emotional. But if you find real PMF, team building becomes unavoidable. You have to build more. You have to move faster. You have to do more things in parallel. And at some point, the company stops being a product that a small group of people can brute force into existence and becomes an organization that needs to keep improving without breaking itself every week. I have made a lot of mistakes over the last almost 9 years. Some were obvious in hindsight. Some were expensive. A few were probably unavoidable. These are 100 of the lessons I have learned getting to a 100-person org. Recruiting is a long game. Just because someone says no today does not mean it is a no forever. Build the relationship, leave a good impression, and keep the door open. Hiring is always a priority, even when you are ahead of the headcount plan. If the company is growing, it is much easier to fall behind than to stay ahead. External recruiting agencies rarely work. Their incentive is not to find the best fit; it is to close a candidate as fast as possible. Excellent recruiters are very hard to find. When you do find one, everyone’s life gets a lot easier. The brand compounds like every other company metric. Candidates who were unreachable a year ago may eventually reply. Great people attract more great people. Hire enough of them and recruiting starts to get its own kind of virality. Most people oversell when recruiting. Don’t. The best candidates see through the BS and value honesty about both the good and the bad. Candidates appreciate knowing the salary and process upfront. It saves time for both sides. Have a compensation philosophy you can explain and defend. People might take a pay cut, but nobody wants an unfair offer. Focus on candidate experience. Some people will inevitably get upset, but keep improving the process. Magic happens when candidates have a great experience even after being rejected: they re-apply later and even refer friends. Technical interviews are already stressful. Do not make them more stressful than necessary. Avoid obscure questions, make the interview close to the real job, and encourage collaboration. If your interview process works, do not bend it under pressure. Consistency and fairness come from sticking to a standard loop. Spend time looking at recruiting metrics: pass rates, interviewer variance, stage conversion, and close rates. They will help you debug calibration problems. At a certain scale, when multiple people run the same interview, assign a DRI to calibrate interviewers and review scorecards. Watch out for interviewers who always grade YES, but never STRONG YES or STRONG NO. Read between the lines. They are probably uncalibrated. A candidate with several STRONG YESes and one NO is often more interesting than someone with YESes across the board. Keep an eye on how many interviews your best ICs are doing. It can become distracting and hurt shipping velocity. Constantly train new interviewers through reverse shadowing. Being desperate for a hire usually turns into lowering the bar. Avoid the temptation. The flags you see during the interview process almost always show up 10x at work. Pedigree is a weak substitute for evidence. We all make mistakes when we see shiny resumes, but there are bad people at great companies too. Watch out for people who have seen scale, but have not done the scaling. They are easy to spot if you ask detailed questions about the problems they faced and how they solved them. Watch out for repeated short stints. Everyone can get unlucky once or make a bad judgment call. Multiple times is a pattern. Never skip reference calls. Even with a strong referral, do at least two. I have yet to see a candidate with weak references work out well. Backchannel references matter even more for executives. You will learn more there than in the interview process. If the references are not stellar, it is probably not worth the risk. Everyone wants feedback when they are rejected, but be careful with what you share. The reason is usually technical ability, culture fit, or both. A lot of people do not want to hear it. If they meet the bar, hiring users can be a great hack. They already know the product, including the good and the bad parts, so onboarding is much faster. Attitude and values alignment matter more than raw technical skill. If the foundations are there and the team is strong, the candidate can grow. A genius who is not aligned with the team is a recipe for disaster. Always hire pragmatic engineers. Avoid dogmatic ones. We only get to play with computers because we serve customers. Migrating to the trendiest architecture with zero customer impact is a red flag. Never hire an engineering leader you cannot have a nerdy conversation with. They need to be deeply technical. Do not settle for a therapist or coach. Everyone wants to work from home, but only a minority of people are disciplined and self-motivated enough to work remotely. Hire for flexibility, but be flexible too. Understand what motivates people. If they are doing great work and are excited about a different internal role, make room when the fit is real. You will mislevel candidates. It is okay. Under-leveling is easier to fix than over-leveling. Correct it as soon as it is obvious, and treat it as fixing a hiring mistake, not as a normal promotion. For every manager you hire, prepare a serious onboarding document: the team, their backgrounds, past reviews, strengths, current problems, and open questions. Then have them write a 30/60/90 plan. The easiest way to know if a new leader is working is to agree upfront on the success case and failure case in the 30/60/90 plan. The more objective it is, the clearer the decision becomes. Hiring mistakes do not mean the person sucks. They mean the person is not a fit for the current team. Not acting quickly is unfair to customers and coworkers. Do a postmortem after every separation, voluntary or involuntary. There is almost always something to learn. Do not be stingy with severance. You made the hiring mistake. Ultimately, that is on you. Most executives are full of shit. Many are career-driven status seekers who know how to sell themselves. The job is to find the actual builders, and they are rare. A great exec will make the company feel brand new. A mediocre one can destroy your culture, and if you are not careful, your company. Spend time with executive candidates in person. Watch how they think, work, and interact when they cannot perform a polished interview answer. Management sucks. Be suspicious of people who want to become managers. The best ones usually never wanted to be managers in the first place, but had to do the job and got good at it. The manager is not expected to do the IC job, but they better be able to do the job and be damn good. Management is not only managing ICs. It is also managing up. The best managers make fewer surprises happen. If you have a good team, managers should spend most of their time on delivery and some of their time on people. Sound the alarm if those percentages flip. Even the best managers need calibration, not just trust. Spend the time with them until they are calibrated. Only then do you get real leverage. Try to keep a healthy ratio between internal and external managers. Internal managers bring institutional knowledge. External managers bring management reps. Both sides need what the other has. Tricking people into management by starting them in technical leadership roles has been a useful way for us to scale, especially with established teams. But the transition from technical leader to actual manager needs to be very intentional. Hiring, org design, and long-term planning do not come naturally to most technical leaders. Middle managers initially have almost no incentive to terminate anyone. It creates conflict and feels optional. Support them through it. Once they see the team is better off without a bad fit, they start to understand. When managing managers, do not let them hire someone you would not want to manage yourself. Never promote someone out of fear or for retention. It almost always backfires. If every promotion case is obvious to the org, you avoid a lot of unnecessary drama. If a termination or “not meeting expectations” review is a surprise, it is a total management failure. A big counteroffer rarely works when someone is already leaving. By then it is too late. It is also unfair and proves the person was probably underpaid before. The only way to build a great team is to hire people better than you. Every hire resets the cultural and talent average. Aim to increase talent density, because otherwise it will naturally go down. B players hire C players. But even A players make hiring mistakes. Correct them quickly or they become a virus in the org. It only takes one unaligned or bad performer to destroy the motivation and momentum of a full team. Bad fits are rarely isolated incidents. There are always multiple signs. Performance issues will eventually become obvious to everyone. Focus on the middle performers. High performers and low performers are obvious. The people right on the line create the most problems because they are usually acted on too late. Top performers compare themselves against the very best people in the company. Reassure them when they are doing great work. On the other hand, underperformers compare themselves to other underperformers. That is how they convince themselves they are doing fine. The best people can stretch a lot. They often rise to the challenge. But watch their limits before they burn out or become the bottleneck. People usually do not burn out because of hard work. They burn out because they are doing shitty work or working with shitty people. Perfectionists can be great, but startups are hard for them. Help them embrace chaos. Things will break. The job is to keep reprioritizing and stop small cracks from becoming big fires. Even the best people have rough patches. Be empathetic, accommodate, and provide early feedback. But be clear that previous performance is not a guaranteed seat forever. Real startup people are not just the ones who enjoy the early stage. They are the ones who keep adapting as the company changes. You cannot build a company for everyone. The earlier you accept that, the more aligned your team will be. Write the company values down and never stop talking about them. Early employees shape the culture more than any values doc. Early employee morale is a good indicator of the state of the culture. Culture needs policing, even (especially) when things are going well. Have zero tolerance for illegal behavior and misconduct. Follow first principles, but remember that one of the best parts of starting a company is building a workplace you would have loved to work at. Do not be afraid to be unique. Don’t network for the sake of networking. It is mostly bullshit. Build great things instead, and the opportunities to meet and recruit interesting people will show up naturally. It is harder to run a 20-person org than a 100-person org. Between 20 and 40 people, systems break and communication lines grow exponentially. Fix the systems and org structure so you can keep scaling. Teams survive being small better than they survive unclear decision-making. Poor performers also have a harder time hiding in smaller teams. If there is no DRI, do not expect it to get done. Shared ownership usually means no ownership. Shipping velocity is a cultural advantage, and it almost always improves morale. If it is important, write it down. Writing is one of the most powerful leadership tools. Founder osmosis stops working around 50 people. Write things down and overcommunicate. Transparency in times of crisis pays dividends. Employees want to be treated like adults, and it builds trust. The same applies externally. Numeric goals are proxies. Missing one is not the end of the world if you learn. But beating the number while ignoring what is broken underneath masks critical issues. In order to preserve talent density, do light 30/60/90-day performance management for new hires. It forces early feedback and avoids surprises later. Do not listen to people who say founders should not waste time interviewing. That is bullshit. Hiring is the highest-leverage thing anyone at the company can do. Founder interviews help in three ways: you meet people you may not work with directly, candidates can ask direct questions, and hiring managers stay accountable. If the founder says no, there was probably a problem earlier in the process. At a certain seniority, it is not about who plays with computers best. It is about who knows the business and customers best, influences the team, and works autonomously without needing management. Create a culture where everyone is encouraged to talk to users. The more they hear the pain directly, the better and faster they will build. Always optimize for simplicity at startups: product, processes, systems, compensation, recruiting, everything. Optimize for simplifiers and avoid complexifiers. Small teams ship faster. This has always been true, and it is even more obvious in the age of AI. Reduce team size, give teams clear ownership, and have managers spend most of their time with the teams that are struggling. Praise people who go above and beyond and do things outside their scope. But a side quest should never replace the main quest. Keep an eye on median tenure, especially during rapid hiring. Sometimes you need to cool down before the team is ready to ingest and onboard more people. Reorgs are inevitable in a growing startup. Build a culture that understands they are necessary, not automatically negative, so you avoid unnecessary emotional damage. By the time a reorg is obvious, you are probably late. Re-evaluate the structure at least twice a year. When doing reorgs, start with an MVP: involve as few people as possible, make as few management changes as possible, and have a clear rollback plan. If you reach PMF and have built a decent pizza team, you have probably achieved more than most of your advisors. Be open to feedback, but do not let imposter syndrome override your gut. Only truly listen to the people who have actually done it. Get a real support system: coaches, other founders, people who understand the game. Family and friends can help, but they will never fully understand, and it is unfair to expect them to. The best way to spend less time managing bad people is to spend a lot more time hiring the right people. It’s never the smartest team that wins. It’s the one that persists, keeps going, day after day, doing thankless work to build something people want. Most companies fail. Life is too short to spend years building with people who drain you. Build a team you are inspired to work with and achieve the impossible.

3rd Jun 2026 1 votes
The Long Run

They say only one out of 1000–2000 startups becomes a unicorn, and that only 1% of humans will ever finish a marathon. If you had asked my mother, though, she would have told you it was a thousand times more likely I’d build a billion-dollar tech company than finish a marathon. And I would’ve agreed. I was that kid in school with straight As who still almost failed PE. Two laps around the soccer field and I’d be hyperventilating. On New Year’s Eve last year, my co-founder Jacob slipped on the snow and broke his ankle. A gnarly injury. Fast-forward to March 1st, and he announces to the entire company and our investors that he is going to run the California International Marathon on December 7th. And also, he invited people to join him in his crazy adventure. I considered it for a split second and literally laughed out loud. This guy will do it, I thought. He’s delusional and stubborn enough to crawl the last 10 miles if necessary. But me? No chance. The longest run of my life was a single 10K, once, years ago. I ran it, and then immediately retired from the sport. But the idea stayed in the back of my mind. If Jacob crippled, needing surgery, with months of PT, could commit to running a marathon… what excuse did I realistically have? I was healthy. I had a head start. And honestly, after the twins were born, my exercise routine was basically nonexistent. Running was something I could technically do anywhere. My wife, fully aware of how much I hated running and how hard this would be for me, became a supporter. So I downloaded Runna. And I ran. I hated it. Deeply. Running felt like the most boring, repetitive, form of suffering ever invented. But something weird happened: I started seeing progress. Three miles stopped feeling like a death sentence. Then I ran 10. Then one random morning before giving a conference talk, I ran a half marathon by myself. And it didn’t even feel that hard. I started waking up earlier and earlier to get my mileage in before the morning meetings. Discipline compounds quietly, until suddenly you’re a different person. This year I traveled a lot. Yet running turned out to be the easiest habit to keep. I ran more than 900 km in 18 different cities. Running became a new, exciting way to explore a city. A nice way to start the day with a small win before all the startup chaos. This weekend, we did it. We ended the race in way more pain than we probably should have, but we crossed the finish line. And the biggest lesson I learned, bigger than training plans, pronation, and fueling… is this: You need to be a little crazy and do hard things. And that’s kind of the whole point. Life isn’t about being the best in the world. It’s about being the best version of yourself. Expanding what you thought your limits were. Rewiring your internal narrative from “I could never do that” to “actually, maybe I can.” I’m insanely proud of Jacob for this comeback story, and grateful (even if involuntarily) that he dragged me into another ridiculous adventure. It was worth it. And maybe this story nudges you toward something you’ve always dismissed as impossible. After running these 26.2 miles, building a decacorn feels easy. Okay, not easy, but you get the point. Will I do it again? I don’t know. If I had put this much time into surfing, I would suck a lot less at it and probably enjoy it more 😅. But I’ll keep running. It keeps me fit, clears my mind, and makes me a better version of myself. Which, in turn, helps me be a better founder, partner, and dad. Special thanks To Runna, genuinely a fantastic training app (and RC user!). To Marina, for the endless support and the childcare coverage while I disappeared for very long runs. To Andrew, Harlan, Bobby, Susannah, Sarah, Nacho, Chris, Mica, Matt, and Olga, for the advice, motivation, and for putting up with my running updates.

7th Dec 2025 1 votes
My role as a founder CTO: Year Seven

2024 has come and gone, and it’s time for my annual post. What a year for startups—like squeezing five regular years into one. Do you remember the Apple Vision Pro, the DMA regulation, founder mode, or the o1 launch? All of that happened in just the last twelve months. It’s also been wild at RevenueCat. My journal is full of stories that could fill a whole book or even a few HBO Silicon Valley seasons. Some are inspiring, some are hilarious, and others are honestly gnarly. Due to limited space, the need for context, and respecting everyone’s privacy, I’ll cover only the most interesting topics at a high level. Looking back, it was a good year for RevenueCat. Actually, a great one. Perhaps our best since 2020. We have plenty to celebrate: We accelerated again, and we hit our C10 revenue plan. We made our first acquisition and welcomed an amazing founder to the team. We signed our first multi-million-dollar contracts. We went to more than 20 events around the world… …including hosting our own conference, featuring its own award ceremony. We became the #1 payments SDK on iOS. Our swag went to 11. We launched over 80 user-facing features. We showed up in Times Square and along Highway 101. We raised a mini Series C and welcomed two new board members. We landed in Japan for the first time. Our API grew beyond 2B requests per day. We are processing nearly twice the TAM we had when we started the company. OpenAI is a friend of the cat. We continued building a winning team. We hired people who were on my to work with bucket list even before we started the company. By all the metrics, 2024 was our year of shipping and selling. We absolutely helped developers make more money. My role If you compare our progress to the goals I wrote about in last year’s blog post, it’s clear we succeeded. But the journey itself was a lot rockier than I had imagined. Many things didn’t go as planned, somes hires did not work out, and some strategy changes were really hard to push through. At the start of the year, besides my usual responsibilities, I also set four personal goals to help me scale with the company. I wanted to: Ship code more consistently. Talk to at least one customer every single day. Get more involved in areas outside of engineering. Stay very close to my co-founder Jacob, giving him my full support. I completely missed goal #1. Honestly, that hurts because I love building software. But I’m not too upset about it—our customers care that the team ships, not that I personally do. And in a way, I did help the team ship. As for the other three goals, I hit them, at least based on the company’s results. Still, my self-perception wasn’t always great. I found myself acting much more like a co-founder/executive than a CTO. Some weeks were brutal, with constant context switching across tasks and teams I didn’t always enjoy. At one point, there were over 60 people in my org, spread all around the world, which is pretty intense for an introverted computer kid. A lot of bullshit escalates to the top, making me question my entire existence some days. And then life threw serious personal emergencies at some of our team members too. Like I said last year, life is what happens when you’re busy building your startup. As we got closer to 100 people, it was statistically unavoidable that we’d face a few life-changing traumas—sometimes several all at once. As a founder, you need to be supportive and empathetic, but also protect your mental health. As a human, it’s tough. Add in a couple of two-year-olds who were often sick and not sleeping, and it felt like a ticking bomb. Did I burn out for the first time in my life? I don’t think so, but it got close. I’m confident being a founder (and having a co-founder) kept me going. I care too much and must stay resilient. If I’d been just an employee, I might have tapped out. But enough about the tough parts. Aside from being a professional BS handler, here’s how I spent most of my time: Lots of travel This was the year I traveled the most in my life—and looking back, I probably should have traveled even more. I visited customers, helped with sales, conducted executive interviews, and spoke at a few conferences. It’s hard being away from two little kids, but each trip turned out to be worth it. Support One of my biggest worries this year was our support function. Everything was fine, but our Support Engineering Manager was going on parental leave, and the bus factor was scary. I’ve seen support crises before—they’re not fun. It wouldn’t have killed the company, but at our size, it might have forced us to pull senior engineers into support and slow down our product velocity. Time was short, so we tried a few things that worked: We hired two new Developer Support Engineers who already knew our product—former customers! Their onboarding was smooth, and they hit the ground running. We split the support team into two pods with their own leads. Each pod handles certain tickets, and they collaborate with each other instead of relying too heavily on one person. We finally set up our first on-call rotation for emergencies. Sales and post-sales Reviewing sales and implementation calls, giving technical input, collecting enterprise customer feedback for product and engineering, joining calls, and even doing some in-person visits. Writing more As our team continues to grow across the globe, not everyone has the same direct interaction with me or Jacob as before. A lot of our culture and collaboration style was once passed through observation, but now needs to be written down to reach everyone faster. These days, my code editor is basically replaced by Google Docs. I’ve been publishing more internal and external documents—like our Engineering Strategy and an updated How to Work with Miguel. Product delivery We still have a few details to refine, but our founder Shipping and Timeline reviews have been valuable. It gives Jacob and me a high-level view of everything in progress, lets us offer feedback, and helps us dig deeper where needed. It’s a great way to see each team’s capacity, find bottlenecks, keep a sense of urgency, and deflate anything that’s not truly important for the customers. Re-orgs This year brought a couple of big reorgs in product and engineering. Overall, they went well, but the puzzle gets more complex with each new piece. We created sub-teams to narrow their focus and keep things running smoothly. For the first time, we had a couple of management layers between me and our ICs. One major change was shutting down our Enterprise/Reactive team. The idea was solid at first, and they delivered plenty of value, but eventually they became the random tasks team. Our new plan is to reinforce the rest of the teams: quick enterprise requests go to the right team to handle them reactively, while bigger projects move to the main roadmap (which keeps us disciplined). The engineers from that old team will help bootstrap new teams as we hire in 2025. Hiring Our engineering hiring goals weren’t super ambitious, but we still reached them. The pace was a bit uneven, and some roles took longer to fill than desired. However, when Hiring Managers took ownership of the process (with recruiting as a support) it made a huge difference in the quality of our candidates. We also brought back the founder interview stage: Jacob or I spoke with every single candidate before making an offer, and we plan to keep doing this for the foreseeable future. Random founder stuff Not my main focus, but I still spent a fair amount of time handling people-related topics, operations, investor, customers and partners relations, fundraising, company policies, planning, etc. Learnings: deepened insights On culture Shipping is king. Yes, deadlines are stressful, but failing to ship and getting stuck in endless debates is far worse. It’s depressing. If someone isn’t a good culture fit, it will be more than a single incident. Over time, it becomes pretty clear to everyone. Top performers tend to measure themselves against the very best in the company. Reassure them they are doing a great job. On the other hand, those who underperform will look to other underperformers to gauge their own progress. Even top performers will struggle if they don’t fully align with the vision. Nothing beats talking to customers. Encourage everyone to do it. Better in person. Most managers don’t have a strong incentive to be strict, so finding the right balance takes a lot of calibration. Only once everyone is aligned, you can truly delegate. On hiring Managers hate hiring because it’s binary: a lot of “no”, but eventually one “yes” can change everything. Staying consistent really helps. Simple things, such as weekly updates keep everyone accountable. People management sucks. If someone’s main motivation is to be a manager for the title, or so they can “lead,” that’s a red flag for me. Best managers end up being those who never planned on becoming one in the first place. They actually roll up their sleeves and can do the work. Big ideas are great, but they need to be executed. This matters even more when it comes to executives. A truly great exec can change your life and it will feel like a brand new company. Given their influence, anything less than great will eventually turn into a big mess. Spend time with executive candidates in person. Watch how they work and make sure they’re real builders. Previous founders and true engineers are usually a little bit de-risked, but they’re still not guaranteed. I also like to write a very detailed onboarding doc, clarifying context, expectations, and what success or failure looks like. Having them write a 30/60/90-day plan helps us all align. I’ve learned not to rely on their past pedigree. The real key is their glass eating endurance. On company building Re-orgs are inevitable at a growing startup, and they will feel scary or emotional for people who aren’t used to them. I find it helpful to be super clear about why we’re doing it, and to share the fallback plan if things don’t work out. But I’ve learned that by the time you think you need a re-org, you’re already behind. We now plan to reassess our team structure twice a year for optimal shipping. A numeric goal (like an SLA or revenue target) is just a proxy. Missing it isn’t the end of the world if you learn in the process. But if you surpass it without recognizing what’s broken underneath, you’ll be masking critical issues. Perfectionists are great, but can have a tough time at startups. Some do fine if they’re focused on one specific thing or working as an IC. But as soon as they have to juggle multiple tasks, the chaos can feel overwhelming. Help them embrace it. Things will break. It’s about continuously reprioritizing, and stopping small cracks from becoming big fires. No agenda == no meeting. Synchronous time is expensive. The only exception is the occasional unscheduled call. After you reach around 50 people (especially in a remote setup), documenting every process change becomes crucial. I’ve learned the hard way that simply talking about a new process isn’t enough. Founders can’t talk to everyone all the time anymore, and misunderstandings or gossip can spread fast. Not everyone will read everything, but at least there’s a single source of truth to reference. Best people can stretch quite a bit—they’ll often rise to the challenge. But it’s wise to keep an eye on their limits before they burn out or become a bottleneck. On scaling as a founder A great EA is life-changing. Family will be supportive, but it’s not fair to offload all the stress on them. They will end up feeling helpless. Having a solid co-founder, a network of peers, or a good executive coach makes a world of difference. Founders are the ultimate guardians of the culture. It’s constant work, and it will feel relentless—especially when things are going well and it’s easy to get entitled. The best team members will help uphold the standard, but you cannot expect them to do all the policing. At this stage, it’s stupid not to level up your lifestyle in ways that reduce stress or save time. This might include childcare support, having a second car, investing in a better mattress, or hiring help with housekeeping. The startup is bigger than its founders, and the goal is to continuously remove yourself from the critical path. Still, it’s easy to forget that, as a founder, you literally brought everything into existence from thin air. Imposter syndrome often creeps in when you step outside your core expertise, but if your gut feeling is strong, it’s worth paying attention to. Stay open-minded, yet remember that no one knows the company quite like you do. The future Next year is going to be another big one. We’ll keep shipping and selling, while finally tackling our design and UX debt. We’ll keep investing heavily in our infrastructure. Not just for reliability, but also for real-time data. We want RevenueCat to feel fast, accurate, and easy to use. We’re also upgrading our self-serve and enterprise support, aiming for a truly world-class experience. In many ways, we’re finally seeing the original vision Jacob and I had back in 2017 come to life. We’ll be launching new product lines too, and if we execute well, we will be just a couple of years away from hitting $100M in revenue. We’ll keep building a winning team. We’ll hire about 45 people, 30 in Engineering, Product, and Design. It’s a challenge, but totally doable. As for me, my personal goals haven’t changed much, but my perspective has. Jacob and I used to joke that being happy and winning can’t happen at the same time. But why not? We’re in a privileged position to shape our own path and change anything we don’t like. After a lot of reflection and coaching, I realized I was simply too hard on myself. I was feeling depressed by the constant BS even though we were winning. A hack that helped was working with my EA to set weekly goals and then sending a public update to the full team. It let me see the real progress behind all the drama and back-to-back meetings and stay transparent with everyone. Next year, I’ll avoid meetings before 9 AM, keep an eye on calendar creep, and hold myself accountable to exercise and doing what helps me decompress. I know, it’s obvious. I also plan to travel more. Especially to the Bay Area, which is clearly back again. Meeting up with other founders and customers is always worthwhile. Another thing that made last year tough was having half my direct reports on parental leave for about half of the year. Now they’re back, and I can feel the momentum returning. Jacob has also taken over product again, now that he’s stepped away from directly owning operations and people. Increased shipping velocity has been noticeable. We have all the pieces in place. All that’s left is to keep pushing forward: shipping, selling and enjoying the ride. If there’s one thing I learned in Silicon Valley, it’s that no goal is too crazy if you refuse to give up. I really hope you enjoyed reading this post. As always, my intention was to share it with complete honesty and transparency, avoiding the hype that often surrounds startups. If you are facing similar challenges and want to connect and share experiences, please do not hesitate to reach out on Twitter or shoot me an email! Special thanks to my co-founder Jacob, my EA Susannah, the whole RevenueCat team, and our valuable customers. I also need to express my eternal gratitude to all the CTOs and leaders who have been kind enough to share their experiences over these years. Shoutout to Dani Lopez, Peter Silberman, Alex Plugaru, Kwindla Hultman Kramer, João Batalha, Karri Saarinen, Miguel Martinez Triviño, Javi Santana, Matias Woloski, Tobias Balling, Jason Warner, and Will Larson. Our investors and early believers Jason Lemkin, Anu Hariharan, Mark Fiorentino, Mark Goldberg, Andrew Maguire, Gustaf Alströmer, Sofia Dolfie, and Nico Wittenborn. I want to convey my deep gratitude to my amazing wife, Marina, who has been my unwavering source of inspiration and support from the very beginning, and for blessing us with our two precious daughters. I cannot close this post without thanking my mom, who made countless sacrifices to mold me into the person I am today. I promise you will look down on us with pride the day we ring the bell in New York. I love you dearly.

6th Jan 2025 88 votes
Full Circle

I’m back in Spain for my brother’s wedding. I rarely visit during the summer. The heat in my hometown is brutal, around 40 degrees Celsius (over 100 Fahrenheit for my imperial friends). Most people escape to the coast, just like my family did when I was a kid. I haven’t been here in years. As I drive along the coast, I find myself reflecting on a tweet about money and happiness, a vivid memory pulls me back in time. It’s August 22nd, 2007. The iPhone, the first real smartphone, has just been announced. It’s so cool, but of course I cannot afford it. It’s not even going to be released in Spain. I’ve just gotten my driver’s license, and I’m about to dive into my third year of Computer Science. I set up my clunky TomTom navigator knockoff, and hit the road. I’m on my way to meet Marina for our first real date. She’s cool, pretty, and kind. She likes the same music as I do, and even has distant relatives in California, the place we jokingly plan to visit someday (if I ever get enough cash). I’m listening to a pirated Blink-182’s self-titled CD. Pop-punk is pretty niche in the south of Spain, and it’s dying. Blink-182 has split up, and I missed my window to see my favorite band live. The Atlantic Ocean is as flat as a lake. This corner of Huelva’s coast is sheltered from any real waves, a stark contrast to the world-class surf breaks I drool over in magazines. And suddenly, reality hits: my childhood dreams of building a tech company in Silicon Valley, while vacationing in Southern California feel impossibly far. Even getting through my degree feels like a pipe dream. School isn’t fun anymore. It’s grueling, especially the parts I thought I’d enjoy, like algorithms and Data Structures. I might never become a Software Engineer. I feel stuck, trapped by my lack of direction. I am seriously considering quitting. But no degree means no job in the US, and good tech gigs are rare here in Spain. The only cool company is Tuenti, a new startup that is cloning Facebook. I’m nowhere near smart enough to land a job there though. Flash forward to today, 17 years later. It’s almost laughable to think about how hopeless things once seemed. Even now, it doesn’t feel like I’ve “made it.” The path and the results look nothing like what teenage me envisioned, but somehow, I’m realizing I’ve kind of checked off every box. I married Marina, and we live in Southern California with our two beautiful identical kids. We’ve become American citizens, and I’ve lived in the Golden State for nearly a third of my life. I’ve worked as a Software Engineer at a Silicon Valley startup, learned from the best, and found the best co-founder I could ask for. We launched our own company. Smartphones? They’re in everyone’s pockets now. Our product is in a third of all new apps shipped in the US. We’ve helped developers reach millionaire status, and we’ve made more money than I ever thought possible. But I’ve learned that a lot of money is a relative term. Somehow, I managed to hire insanely talented engineers—a bunch of them, ironically, from Tuenti. Blink-182 is back together, and I’ve been fortunate enough to see them live five times. I’ve even bumped into Tom Delonge after surfing world-class waves a few times. I’m literally just realizing how surreal all of this is. I tend to get caught up in the chaos of what’s next—the next big fire, the next goal—but sometimes you’ve got to stop, be present, and reflect on how far you’ve come. It wasn’t easy. It wasn’t without loss, sacrifice, and a fair share of doubts. Am I truly happy? Maybe not in a perfect, all-the-time kind of way. There are external things humans cannot control. But when I look at my life, I realize there’s no real reason not to be. The journey has been was worth it so far: the ups, the downs, the unexpected turns. So, here’s to your journey, whatever it looks like. Keep going, keep dreaming. It might not turn out the way you envisioned it, but it’s only impossible if you quit.

28th Aug 2024 94 votes

More in programming

Abusing ID3 chapters to turn videos into glanceable podcasts

I listen to a lot of podcasts, and I like how they fit around other tasks. I press play, lock my phone, and put it down. I’m free to wash the dishes, fold the laundry, or shop for groceries. Unfortunately, more and more information is only published as a video. Technical talks, conference sessions, video essays – they don’t work in an audio-only podcast app. I could convert these videos to MP3 files, but that breaks down the moment a video isn’t pure spoken word. If a speaker says, “Look at this slide” or holds up a diagram, an audio-only file leaves me stranded. I don’t want to give up the podcast player I like, nor stare at a screen for an hour – but I do want the information in these videos. To solve this, I’m abusing my podcast player’s chapter support. This gives me the best of both worlds: I can listen to a video as audio-first, and glance at my lock screen if I need a moment of visual context. The idea: Chapters every few seconds MP3 files can have ID3 metadata, and ID3 metadata can include chapters. A chapter covers a particular time range, and it can have an associated title, description, and cover art. My podcast app of choice is Overcast, which can’t play videos, but it does have robust chapter support. I can jump between chapters, navigate a table of contents, and see per-chapter cover art. To get videos into Overcast, I’m creating MP3 files with a new chapter every few seconds, and the per-chapter cover art is a corresponding frame from the video. As I play the file, I get a slow, stop-motion-like rendition of the original video. If my phone is locked, I can glance at my lock screen and see the current frame in the Now Playing screen. Overcast is developed by Marco Arment, and I got this idea from Forecast, his app for adding chapters to podcasts. In particular, I was struck by its ability to create chapters that don’t display in the chapter list – ideal if I don’t want a table of contents with hundreds of entries. As I was developing my script, I compared my output to the output from Forecast to ensure I was creating the chapters correctly. The code: FFmpeg and Mutagen There are three steps in this process: Convert a video file to an MP3 Extract images from the video at a fixed interval Insert the images as hidden chapters in the MP3 file Let’s go through each in turn. 1. Convert a video file to an MP3 Converting a video file to an MP3 is a single FFmpeg command: ffmpeg -i video.mp4 audio.mp3 This is consistently the slowest step of the process, and I do wonder if I could use different settings or an alternative encoder to make it go faster – but it’s not slow enough to be worth further investigation. 2. Extract images from the video at a fixed interval Extracting images from a video needs a more complicated FFmpeg command: ffmpeg -i video.mp4 \ -vf 'fps=1/5,scale=iw*sar:ih,scale=min(iw\,945):min(ih\,945):force_original_aspect_ratio=decrease' \ thumbnail_%04d.jpg This extracts an image every 5 seconds, downscales any image larger than 945 pixels square (while preserving the original aspect ratio), and saves the results as sequentially numbered JPEG images (thumbnail_0001.png, thumbnail_0002.png, and so on). The key is the -vf flag, which defines two FFmpeg filters: The fps filter selects one frame every 5 seconds (fps=1/5). The first scale filter scales the width based on the sample aspect ratio (scale=iw*sar:ih). Without this filter, frames can be stretched and distorted. The second scale filter scales the input video, preserving the original aspect ratio (force_original_aspect_ratio=decrease), and ensuring the output images fit within 945×945px or the size of the input video, whichever is smaller. My limit is 945 pixels because that’s the largest size that cover art is shown on my iPhone. This filter still isn’t completely correct – it sometimes creates images from portrait videos that are smaller than I’m expecting – but it’s good enough. These are only thumbnails for glancing at, and if I want to change it later, I can always do the image resizing outside FFmpeg. 3. Insert the images as hidden chapters in the MP3 file Inserting the chapters into the MP3 file is more complicated. Although FFmpeg has basic support for ID3 metadata, as far as I know, it can’t insert chapters with per-chapter artwork. Instead, I’m going to reach for Python and the Mutagen library. Here’s the code to add a chapter to an MP3 file: from mutagen.id3 import APIC, CHAP, ID3, PictureType audio = ID3("audio.mp3") with open("thumbnail_0001.jpg", "rb") as f: img_data = f.read() image_frame = APIC(mime="image/jpeg", type=PictureType.OTHER, data=img_data) chapter_frame = CHAP( element_id="chp1", start_time=0, end_time=5 * 1000, sub_frames=[image_frame] ) audio.add(chapter_frame) audio.save() This creates a single chapter that lasts the first 5 seconds (0 to 5000 milliseconds), and the per-chapter cover art is thumbnail_0001.jpg. If we ran this in a loop, we could add images for every 5 second slice of the original video. This code is inserting two frames into the ID3 metadata: The CHAP (chapter) frame contains the timing information, and it can have subframes for metadata like title, chapter art, or associated URL. The APIC (attached picture) subframe contains information about a picture, which can either be a blob of image data or a URL to an image on the web. Normally, you’d also insert a CTOC frame which defines a table of contents, but I don’t want a TOC with hundreds of 5-second chapters, so I’m deliberately not doing this here. This is allowed by the ID3 spec – you’re not required to insert a CTOC frame if you’re using chapters, and you can have chapters that aren’t listed in your table of contents. To work out which frames I needed, I used Forecast to create some chapters by hand, and I inspected their frames. In particular, loading an MP3 and calling Mutagen’s pprint() method shows a human-readable list of frames, and then I could drill into the individual fields: from mutagen.id3 import ID3 audio = ID3("audio.mp3") print(audio.pprint()) I wrapped all this code in a project called glancecast, which allows you to convert a video file with a single command, with optional flags to set the frame length and chapter art size: $ python3 glancecast.py interesting_talk.mp4 interesting_talk.mp3 The process takes a minute or so to complete, most of which is spent transcoding the video file to MP3. The resulting MP3s are usually 40 to 50 MB in size, which is very reasonable. The outcome: How it looks in practice Here’s what one of these “glanceable” podcasts looks like in Overcast and on my lock screen: Maggie Appleton presented this talk over two years ago and it’s been on my “talks to watch” list ever since. Once I put it in Overcast? I listened to it in less than a day. It’s not a lot of extra information, but enough that I can quickly glance down and get the gist of what a speaker is saying. Both views update with a new frame every few seconds, or I can put my phone in my pocket and ignore the screen. I’ve used this approach for half a dozen videos so far, and I’m happy with the results. I expect to keep using it, because I have a long queue of videos I’ve been meaning to watch. If you’d like to try this, check out glancecast for the full code and instructions. [If the formatting of this post looks odd in your feed reader, visit the original article]

yesterday 1 votes
AI Isn’t Replacing Open Source

Andrew Baker, the current Group CIO at Capitec Bank wrote an interesting piece on AI and open source, and how these tools that generate code according to one’s specification may replace the general reliance on open source implementations done by contributors around the world. I’d really recommend reading it. I have great admiration and respectContinue reading "AI Isn’t Replacing Open Source"

yesterday 1 votes
6-7 loops we use everyday to make PostHog self-driving

I've mostly given up keeping up with agent trends. Every few months, I ignore all of it and ask what I'm actually getting use out of. Three things…

yesterday 1 votes
Confessions of an Unrepentant Slop Snob

A framework for thinking about when AI involvement is additive or a violation

2 days ago 1 votes
Planning with Agents: Divided Worlds, Boundary Objects, and Thicker Interfaces

Why we need richer, thicker interfaces and better boundary objects for collaborative planning with agents

2 days ago 1 votes
📚 BoredReading

You seem to be enjoying this.

Join free to unlock everything.

Create free account

Already have an account? Sign in