More from Miguel Carranza
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.
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.
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.
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.
More in programming
After a write-up in the New York Times, Mommy Bloggers had two options. Either lean in, or step back. Given how popular it became after that, it's not hard to guess which option they chose. The post Mommy bloggers react appeared first on The History of the Web.
I'm quite a bit late on this one, but Haunt version 0.4.0 was released released back in July. I haven't had much time for blogging, but I'm catching up now! This release contains a small set of improvements and bug fixes since the 0.3.0 release in 2024. About Haunt Haunt is a static site generator that uses the Guile Scheme as its configuration language. It aims to be simple, functional, and extensible. Features include: Easy blog and Atom/RSS feed generation Markdown post support Simple development server for viewing edits before publishing Purely functional build process User extensibility Notable changes Added support for HTML in Markdown documents. This was a long time coming because guile-markdown did not support it and the library was abandoned by the original maintainer. As part of my work at Spritely, we forked it, implemented the relevant portions of the CommonMark specification, and released it. Spritely's guile-commonmark fork is now considered to be the official upstream by Guix and others. A further consequence of this is that guile-lib is now a required dependency for building Haunt as we need the (htmlprag) module to parse Markdown documents with embedded HTML. html->shtml from guile-lib's (htmlprag) module is now used instead of xml->sxml in the HTML reader. It was silly of me to use xml->sxml for this purpose years ago, but at the time I wanted guile-lib to be an optional dependency. Added haunt new subcommand for creating a new site. Added default directory, template, and prefix arguments to flat-pages procedure. Added support for index metadata flag to flat pages for pretty URLs. Flat pages now receive all page metadata, not just the page title. This is a breaking change from 0.3.0. Added .scm as an additional extension for sxml-reader. make-file-extension-matcher now supports multiple extensions. Fixed emission of <script> and <style> elements. Fixed handling of no available reader in flat pages builder. Fixed unreachable error handling clause when a reader is not found for a post. Fixed default blog theme template missing an <html> tag. Fixed overloaded -h option in haunt serve. Deprecated post in Skribe reader in favor of document. Download Haunt 0.4.0 is already available in Guix: guix pull guix install haunt See the Haunt project page for information on how to build from source. Thank you to Camilo Rodrigues, Noé Lopez, jgart, Jakob L. Kreuze, and Daniel Meißner for their contributions to this release! Happy haunting!
This is a transcript from a talk I gave at the German Perl Workshop earlier this year. If you'd prefer to watch the video recording, you can find it here. I have lots of photographic projects on the go. Lots of these being on film, as some of these I started shooting a long time ago. I don’t have any particular loyalty or attraction to film, it’s just that I started shooting many of these projects before affordable medium format digital was available. Since I mostly shoot medium/large format film I never really jumped to digital until recently, so film has continued to feature heavily in my workflow. That said, it’s a pain in the arse to shoot film now given the spiraling costs, limited availability, and issues around traveling with it: modern airport CT scanners, being rolled out across many airports, are much more convenient but will fog film. Asking for a hand inspection often comes down to arbitrary timing - how busy the security is, how experienced the operator is, or if you’re lucky/unlucky. I’ve had film forced to be scanned (and fogged) and politely argued with security on more than one occasion. I don’t want to deal with that so don’t travel with film anymore, thus I am shooting less of it and have mostly moved to digital. I still have a tonne of film I need to scan and process however. Here’s just some of the binders and files of film. I don’t plan to scan all of this, but I do plan to scan the ones I need to. Probably in the region of a couple of thousand frames. I want to scan to the highest possible quality (within reason) for archiving, book projects, and large prints. If you’re wondering how large I print, it can be up to 160x60cm panoramics for selling. This is restricted by the size of my printer (that’s another story). Three Years Ago Three years ago I almost bought a scanner. I ended up blogging about it and the post got a bit of traction on Hacker News (HN). I’m never quite sure which posts I submit will pique the interest of the users. I’ll spend months chipping away at a draft and when I post it it tanks. Or I’ll cobble something together in twenty minutes, like the linked one above, and it gets 440 points and over 300 comments… The thread had some useful suggestions and some not so useful ones, the not so useful ones being effectively “buy an Epson”: I’ve had one for fifteen years and it’s not good enough for large prints or archiving. It’s passable for web stuff and smaller prints, but for my recent use cases? Not even close. Ten years ago I had negatives scanned with a high resolution scanner for the first time and recently, wanting to scan my archives for various projects, I decided I should invest in one of those scanners. The Original Plan The plan, back in 2023, was simple: Buy scanner (at significantly reduced rate) Scan all my film Sell scanner Profit! And I mean profit - the scanner that I almost bought was being offered to me at about 2/3rd of the price they usually sell. And they’re becoming harder to find in working order so the prices are going up. Or profit in not having to pay > 25.- CHF per frame to have someone else do this. You can see the pricing from The Film Lab. You can read the original blog post to find out more about the scanner in question, so I won’t repeat it here. Other than the parts being relevant to the rest of this post, namely that the scanner was showing hard and soft problems. The software that drives the scanner was last updated in 2012, it’s proprietary and closed source, requiring 32bit architecture and no third party drivers or software exist. So you are stuck using old software/computers to run it. Or maybe you could use emulation / virtualisation? The problem there is that the interface is firewire, or SCSI on the even older models, and firewire is known to be problematic on these scanners as the controllers start to go bad after a decade of continued use. That’s a risk, and the scanner was very much EOL as the firewire controller was dying: both ports were bad that suggests controller, not ports. The scanner would have been €5,000 to purchase and then €3,000 (ish) to repair. Or, as HN suggested - just open it up and use a soldering iron. I’m not going to drop 5k on something and then start poking it with a soldering iron. I’ll pass on that thanks. Camera Scanning In the meantime I’ve been camera scanning, which you can read about in another blog post. But how does that compare cost wise? It’s expensive because you’ll need a high resolution camera, a macro lens, copy stand, negative carrier/holder, and quality light source. You’ll look to spend anything from three to five thousand Euros on everything. Camera scanning does actually work well, in that it’s close to a high resolution dedicated scanner. But you have to setup the entire thing every time you want to use it, including ensuring everything is straight and parallel. It also suffers from the same weakness as most other scanning methods. What do you think that is? Film Flatness Or lack thereof: Film is rarely flat, especially so with 35mm. These are pretty mild examples of curl. It tends to be flatter in the larger formats but then you get into flatness issues due to it sagging. The smallest difference in the film plane can cause major issues in sharpness due to focus fall off (film scanning is essentially macro photography). Any workflow or solution that does not take this into account is significantly compromised. And the workflow is only as good as its weakest part. This is the biggest problem in scanning film - all other considerations are more than adequate these days: resolution, dynamic range, etc. However, most negative carriers don’t keep the film perfectly flat. This has always been a problem - this is from a book called “Edge of Darkness” which is about traditional analog photography and printing, and summarises the problems of negative carriers thusly: “if you use a glassless negative carrier, you might as well just buy the cheapest enlarging lens you can find. You are simply throwing away the money and sharpness you paid for it in your enlarging lens, and also in your fine camera and the expensive lenses you bought for it… No film will lie flat in a glassless carrier. That’s right, none… There is no avoiding this issue. Use glass.” So you have to use (anti-newton ring) glass, which introduces other issues - you’ve now got extra glass in the transmission path, and dust (which isn’t a massive problem, but a pain nonetheless). You could use drum scanning, which is absurdly impractical from a cost and operating point of view. Or you could use a Flextight, the scanner I almost bought three years ago. Interim Solution I stuck with camera scanning, but wasn’t happy though, because of film flatness and the setup faff. So of course I started looking for another scanner. I was idly browsing near the end of 2025 and came across this one. It’s exactly the same spec as the one I tried three years ago, except SCSI not Firewire so less prone to failure. It just predates Hasselblad buying Imacon (so is pre the rebranding, etc). It was in Switzerland so I could inspect and pick it up. It was also significantly cheaper than the previous one I had looked at, so worth a punt even if I needed to take a soldering iron to it. We went to St Gallen for a weekend and I picked it up. Here’s the software interface back in my studio. Look at that marvelous interface! None of that liquid glass bollocks. The first scans were promising, but I had the sense things needed some TLC. The first thing was calibrating the focus, which the software can do in combination with a focus slide. I was lucky that the focus slide was included with the scanner and I’m not sure what I would have done otherwise. Probably paid a fortune for a replacement? Possibly a lot of manual trial and error with the software? After doing that I scanned images of the 1951 USAF resolution test chart (taken on ultra high resolution 35mm film): That’s what the resulting scan looked like. Notice that it’s sharp from edge to edge, corner to corner. At 100% crop we can resolve around 110 to 123 line pairs per mm, which equates to about 5,600 to 6,300 DPI. This is beyond the limit of most 35mm lenses, but importantly - exactly to spec for this scanner. So I was happy the focus was calibrated. If you’re curious this is the same target with the camera scanning setup. It’s close, but we’ve got another variable in the workflow, several even, and that impacts the results. It’s not as sharp, and the extra glass in the transmission path causes aberrations. Another thing that needed attention was the power supply. The seller mentioned that “sometimes it takes five minutes to warm up”. Sometimes it was more than five minutes, and the power supply would click click click away. So that needed fixing and it was easy enough to find a compatible new replacement, however it cost 200 Euros. Expensive! The third problem I noticed was that some of the scans were coming out stretched. Often about 10% too wide/long, sometimes more than that. My panoramics looked panoooooooramic. I did some research and someone suggested this might be a “buffering issue”, which I thought was nonsense. Doing some testing I heard slipping sounds when the scanner was pulling the film into the body. After more research I stumbled on a post that suggested the belts need replacing. I opened the scanner up, and sure enough: A ha! You can’t quite see that the one on the back is even worse. I replaced those with compatible belts: 535 synchroflex t 2.5/245. Problem solved. The fourth problem was that the film holders were old and/or had been mishandled. They were falling apart and held together with electrical tape or glue, which didn’t seem optimal. Replacements cost 350 Euros in total for the four I needed. They’re now available cheaper from China, since the patents have expired. Or, you know, China. They used to cost about 200 Euros each from Hasselblad. The fifth problem, which is a potential one and hasn’t manifested yet, is that the lamps may eventually need replacing. I picked up a couple for 25 Euros. That seemed like a reasonable thing to do while they’re still available. Success? Let’s add up the costs of acquiring this scanner and renovating it: Scanner: 1,750.- CHF Power Supply: 175.- CHF Belts: 25.- CHF Film Holders: 350.- CHF Lamps: 25.- CHF Total: 2,325.- CHF (c. 2,500 EUR) In the last year (since acquiring the scanner) I have scanned: c. 250 panoramics frames (~ 6,000 CHF) c. 2,500 medium format frames (~ 80,000 CHF) c. 200 large format frames (~ 9,000 CHF) The figures in parentheses are what it would have cost me to have that number of frames scanned by a third party. That is, er, quite a saving. Also quite a lucrative business model perhaps? I think I can argue the cost of the scanner was a very good investment, and I haven’t finished using it yet. Even if it were to stop working tomorrow, it has already paid for itself many times over. Could it stop working tomorrow? Yes, because of other issues that will be harder to solve. The Bigger Issue(s)? A Power Mac G4 (discontinued in 2004). This came with the scanner, the necessary hardware and software to drive it, and is almost certainly living on borrowed time. Spinning metal is never good in the long-term. I’ll maybe purchase a backup soon, as these can still be found for a couple of hundred Euros. The key thing though, is that this very expensive, very high quality scanner, will at some point be rendered useless by the upgrade treadmill because the software required to run it will be increasingly difficult to run. A scanner that is still used by businesses, educational institutions, and individuals like me. A scanner that originally cost tens of thousands of Euros less than a decade ago. The upgrade treadmill is constantly whirring away. This is from the top of the Seattle Space Needle. “Do not upgrade anything on computer”. Clearly that notice speaks of someone being bitten by an upgrade at some point. I wonder is anyone else feeling the fatigue? Security updates, sure I can understand. But feature creep and trivialities? No! What tangible benefits have the last ten, fifteen, or even twenty years of OS updates brought? Other than security, and compatibility with newer hardware? New hardware is great, really, but by association forced deprecation of older hardware. No! It feels like the upgrade treadmill gets faster and steeper every year. Add to that subscription lock-in and dead endpoints: “I couldn’t vacuum my house because an SSL cert had expired” is what someone told me earlier this year. Fortunately this person is a software engineer so ended up man-in-the-middling the network traffic to get the vacuum cleaner to work again (no SSL-pinning it seems). “GoPro is announcing the end of life of the GoPro Quik app for macOS, effective at the end of 2024”. They discontinued the former in favour of their mobile app, which requires an account, login, subscription, and so on. I just want to transfer the videos from the hardware, I don’t need any of this crap (I don’t need any of that crap, it turns out GoPro haven’t locked the device down enough to prevent using third party apps to access the files. Yet). And, of course, software has to be in everything. These days the scanner would/could have an embedded Raspberry PI? Just a keyboard and mouse input, monitor and USB output would reduce the surface area, connectivity issues, and software dependency. Or software is never done? Because: externalities. I guess software is “done” when it’s no longer supported? Marciano Planque has a good piece on this: When hardware products reach end-of-life (EOL), companies should be forced to open-source the software. I think that’s a fair thing to say. I suspect Hasselblad/Imacon never open-sourced the software due to licensing issues. Or they just lost the source. Or they just don’t care, I don’t know. Maybe some combination of the three. And, inevitably, discontinued hardware like this scanner. Or, that is to say, discontinued parts? What about regulation changes? The panoramics I shoot are with a camera that was discontinued in 2004 because EU regulation banned lead solder in circuit boards. The company decided redesigning the parts wasn’t worth it. Old hardware has new exciting ways to fail. As time goes on components will fail or loosen - components that were expected to last decades. Then that results in tribal knowledge, or worse link rot and QR code rot. A lot of this stuff is hidden in walled gardens. There’s a Facebook Imacon group, for example. Why in the ever-loving fuck is a group for technical people, by technical people, on Facebook? Then there’s misleading AI. “My flextight scans are coming out stretched, what might the problem be?” LLM’s have gobbled up all the right information, and all the wrong information. Or information that is massively out of date. Nowhere in the suggestions here does it mention the belts might need replacing, which, according to my own research, is the most common reason these days. Legacy Software A decade ago I wrote an essay that also hit the front page of HN: All Software is Legacy. I think it is still relevant today, some parts not so much given we are now in The Age of Prompt, but mostly it’s still true. Nicholas always said “legacy software is the ugly stuff that makes you money”, which I think is true. But now it’s the stuff that surrounds us, like when I want to withdraw cash (guess what software most cash machines are still running?). Or when I want to take a train - when I gave this talk in Germany I had to get from the airport to the city centre. The ticket machines were disabled with a sign saying “no longer in use, download the app”. Then register. Then buy the ticket. I just want to give you money. Or when I wanted to pay for parking while stopping off at some random town in the UK - the same situation as with the ticket machines. “Download the app, register, pay”. Fuck that, I went and parked somewhere else. I just want to park, I don’t want to fight with software. Or if I want to hire a bike (not pictured: the half dozen apps on my phone to hire a bike). And when I want to buy stuff from a shop… One of the self-checkouts crashed recently in the coop, rebooting into a version of SUSE Linux from well over a decade ago. We’re collectively creating more and more of this everyday, letting it out into the world where it becomes a future liability for someone or the death knell for something. A pile of bikes, an unplugged ticket machine, a top of the line but no longer driveable scanner. References Imacon Users Group (the non-Facebook group) The state of Hasselblad Flextight scanners (2019) 1951 USAF resolution test chart Vlads Test Target Printer Story Original Scanner Blog Responses to HN Camera Scanning All Software is Legacy Repair Cafe
The Tetris effect is one of psychology’s most easy to reproduce experiments. Simply spend a bit of time playing the eponymous game every day for a few weeks. After a little while, you’ll start recognizing familiar Tetromino shapes in clouds, buildings, and everyday objects. You might even see them appear before your eyes when you start falling asleep. Tom Tang Attention hijacking There’s one lesson the Tetris effect teaches us: whatever you focus on long enough will end up shaping your thoughts. This can be a good thing since it’s how we learn new skills and discover new ideas. Sadly, less and less of our attention is focused intentionally. Instead of picking what we want to see we let other people decide what is supposed to be good for us. Do you want to watch a video? YouTube knows you like cooking and art streams. But why not also recommend a few clips about the stock market bubble, global warming, and the war in Iran. Doomscrolling will make you stay longer and click on a few more ads. Do you want to listen to music? Just open a Spotify playlist and let the algorithm figure out what you like. Please ignore the AI slop they will insert in between real songs to avoid paying royalties to real artists. Do you want to know how your colleagues are doing? Too bad, LinkedIn will bury any relevant career news between the opinion of complete strangers. It is surely just a coincidence that those strangers happen to be shilling whatever Microsoft is invested in at the moment. Do you want the opinion of strangers on a product? Well those Redditors you wanted to ask are probably just a bunch of LLMs talking to a bunch of Russian trolls now. I hope you didn’t value their opinion too much. If, like me and most people, you spend the major part of your day focused on your device, there’s no doubt it’s affecting you. And when you let someone else dictate what appears on your screen, it’s the same as giving them the key to your brain. New York Said Back to an intentional internet The internet wasn’t always like that. Before recommendation algorithms where a thing, you had to decide what you would be doing on the computer. You didn’t really have one big app that you could open and order it to entertain you. Instead, you had a few dozen of bookmarks to websites, each with a specific idea in mind. A site for video game news, that one website with lots of tutorials, a blog about anime that didn’t update often enough, a wiki about a TV show from the 90s… Of course awful things existed on the web. We had Encyclopedia Dramatica and Rotten.com, but you actually had to put the effort to go there if you wanted. Nobody was going to put pictures of dead kids and far-right propaganda as a suggestion after a pancake recipe or a cat video. The good thing is that this intentional internet is still around. It has just been a bit buried below the corporate web, but it’s not very hard to find. After all you’re on this blog, so you probably already have a good idea about it. The main difference between this time and now is you. When you want to get back to reading blogs, RSS feeds, and finish that tutorial instead of doomscrolling shorts, you have to get used to a slower internet. One where content is not infinite and doesn’t get updated every click. But like every habit, the only thing you have to do is to keep at it. And if you pay enough attention to it, something will click in your brain.