Stream the Latest Episode
Listen and watch now on YouTube, Apple and Spotify. See the episode transcript at the top of this page, and a summary at the bottom.
Brought to You By
WorkOS — The modern identity platform for B2B SaaS.
The Software Engineer’s Guidebook: Written by me (Gergely) – now out in audio form as well
Augment Code — AI coding assistant that pro engineering teams love
—
In This Episode
Not many people know that I have a brother: Balint Orosz. Balint is also in tech, but in many ways, is the opposite of me. While I prefer working on backend and business logic, he always thrived in designing and building UIs. While I opted to work at more established companies, he struck out on his own and started his startup, Distinction. And yet, our professional paths have crossed several times: at one point in time I accepted an offer to join Skyscanner as a Principal iOS Engineer – and as part of the negotiation, I added a clause to my contrac that I will not report directly or indirectly to the Head of Mobile: who happened to be my brother, thanks to Skyscanner acquiring his startup the same month that Skyscanner made an offer to hire me.

Today, Balint is the founder and CEO of Craft, a beloved text editor known for its user-friendly interface and sleek design – an app that Apple awarded the prestigious Mac App of the Year in 2021.
In our conversation, we explore how Balint approaches building opinionated software with an intense focus on user experience. We discuss the lessons he learned from his time building Distinction and working at Skyscanner that have shaped his approach to Craft and its development.
In this episode, we discuss:
Balint’s first startup, Distinction, and his time working for Skyscanner after they acquired it
A case for a balanced engineering culture with both backend and frontend priorities
Why Balint doesn’t use iOS Auto Layout
The impact of Craft being personal software on front-end and back-end development
The balance between customization and engineering fear in frontend work
The resurgence of local-first software and its role in modern computing
The value of building a physical prototype
How Balint uses GenAI to assist with complicated coding projects
And much more!
Takeaways
Design-focused engineers find it harder to fit in. Engineers who focus on backend and distributed systems can usually verbalize their impact clearer, and could see faster career growth – including getting into leadership positions. This creates a reinforcing cycle: as most engineering executives have a backend engineering background: they will recognize and reward backend contributions more.
Balint didn’t like how he didn’t “fit in” as an engineer focused on design and UI: but he just kept building things he believed in – and years later, building up that “design muscle” helps him build products that backend-focused engineers might struggle in putting together.
Amazing companies cannot have a single engineering culture. Balint observed how every standout company that has a single engineering culture inherently biases towards either a backend-heavy engineering culture (e.g. Google, Amazon) or a UI-heavy one (Amazon). For a company to be truly standout – more so than these Big Tech giants – it needs to have several engineering cultures: prioritizing both backend and UI excellence. This is what Craft is aiming to do internally.
To build something better than most other products: you might need to take a different approach. Craft does not use Apple’s UI components: they don’t use SwiftUI or Autolayout – something that 95% or more of iOS apps all take advantage of.
Craft, instead, built their own components from scratch, and came up with their own layout and animations system. This is a lot more work at first: but it’s how Craft can do smooth animations that most apps are unable to do so – and it’s a reason engineers at Apple have asked the team “how are you able to do such a smooth animation on the navigation bar?” (The native iOS navigation bar cannot be animated like Craft does it) Craft can do all this thanks to building and maintaining their own components. It’s simpler to do than most would assume: in the episode, we look at actual code.
A shared codebase is an underrated advantage for speed, consistency and efficiency. Craft has a total of 4 engineers building the respective apps for:
iOS
iPad
MacOS
VisionOS
They can do this, because it’s a single codebase! A single codebase also means that all features built on one platform immediately work on all others.
The Pragmatic Engineer deepdives relevant for this episode
Timestamps
(00:00) Intro
(02:13) What it’s like being a UX-focused founder
(09:00) Why it was hard to gain recognition at Skyscanner
(13:12) Takeaways from Skyscanner that Balint brought to Craft
(16:50) How frameworks work and why they aren’t always a good fit
(20:35) An explanation of iOS Auto Layout and its pros and cons
(23:13) Why Balint doesn’t use Auto Layout
(24:23) Why Craft has one code base
(27:46) Craft’s unique toolbar features and a behind the scenes peek at the code
(33:15) Why frontend engineers have fear around customization
(37:11) How Craft’s design system differs from most companies
(42:33) Behaviors and elements Craft uses rather than having a system for everything
(44:12) The back and frontend architecture in building personal software
(48:11) Shifting beliefs in personal computing
(50:15) The challenges faced with operating system updates
(50:48) The resurgence of local-first software
(52:31) The value of opinionated software for consumers
(55:30) Why Craft’s focus is on the user’s emotional experience
(56:50) The size of Craft’s engineering department and platform teams
(59:20) Why Craft moves faster with smaller teams
(1:01:26) Balint’s advice for frontend engineers looking to demonstrate value
(1:04:35) Balint’s breakthroughs using GenAI
(1:07:50) Why Balint still writes code
(1:09:44) Rapid fire round
A summary of the conversation
Design-first engineering: less recognition?
Balint has been writing code since he was 12. He’s always had a pull towards interactivity, animation, and found himself in the intersection of code and design.
Backend engineering is much easier to quantify than UI/UX work. Balint always felt that backend engineering was easier to quantify in impact – like saving millions in infrastructure costs or scaling to billions of users. How do you quantify that the UI is smooth and delightful?
Balint always felt that "hardcore engineers" did not consider him one of them – as his focus was on UX and UI – like making interactions faster, and animations smoother, and not on distributed systems or scalable algorithms. But designers and product managers also didn’t look at him as equals.
There’s a pull for engineers to move towards the backend and distributed systems. Exactly because these areas are seen as having hard problems to solve and are often more measurable in terms of impact.
Engineering culture at Craft
Craft started off as a text editor for mobile use. When starting to code the product, Balint didn't believe that established engineering patterns, code coverage, or even design components would be the right approach.
Principles in building craft:
Data principles: efficiency and zero data loss are both non-negotiatble. There’s not much to innovate in this area – it’s very well understood! Just refine the existing state of the art.
Fluency. Craft is designed to be used for hours each day, so it needs to feel snappy and fluent.
Having just one engineering culture is not enough. To create an amazing product, you cannot have either frontend or backend engineering principles dominate:
When the dominant engineering culture is UI-first: Apple is a good example. Apple builds delightful user experiences. However, their backend systems and web products are lacking.
When the dominant engineering culture is backend-first: Amazon and Google are good examples. Both focus on system design and backend engineering principles – in return their UIs don't feel as comfortable.
Craft uses the same codebase across 4 platforms: iOS, iPad, MacOS (desktop), and Vision Pro. 99% of the code is common, with some additional native bindings for each platform. Why the same codebase? Balint wanted the desktop app to always do the same thing as the mobile app, and a shared code base was the best way to do it.
Team structure
Craft's product engineering team is around 20 people. This includes product engineering, design, and QA.
They are split into a platform team, which means they have a web team, a native app team, and a backend team. Each of those teams has three to four people.
Balint observed that teams with more than 5 people start to have communications issues
Architecture choices
Prioritize control over abstractions and trends. Using core language patterns and framework elements gives you more control over what you want to do. High-level abstractions and frameworks require more time figuring out the bugs and what those frameworks allow or disallow.
Everything is a canvas. Craft treats everything as a canvas that they draw on. This allows building toolbars that look exactly like a Mac toolbar on the Mac and an iOS toolbar on the iPhone. However, Craft now has more control over these components than if they used the native ones.
Avoiding AutoLayout and SwiftUI. Every time Craft hires a new iOS engineer, the new joiner inevitably asks them why they don't use new technologies like AutoLayout or SwiftUI. Balint shows them one of their transitions and asks them to implement it with the same performance in AutoLayout – and if they can succeed, they’ll move over. So far, no one has managed: but it’s a good exercise to help understand that decisions are not arbitrary, but are following practical purposes.
AutoLayout promises that you no longer need to think in rectangles; you can just say it should be at the top and it can automatically grow. However, when you keep adding more things, the complexity increases and when you want to do something more sophisticated, it can become very performance-intensive.
With AutoLayout, you are trading off easier definition and work as a developer for more complexity on the device and less control when you want to do more advanced animations.
Principles for personal software
“How it makes me feel” matters more. When it comes to personal software, consumers choose a lot more on which one they feel resonates with them. Thus the best personal software is a lot more opinionated than B2B software is
Craft is aiming to build what Visual Studio Code is for engineers – Craft aiming to do the same for knowledge workers. Visual Studio Code feels lightweight and is a fresh breath of air because it's responsive, fast, and does everything you need.
A different take on design systems.
Most companies create an “atomic design system:” starting with base colours as atoms, then buttons that combine colors and shapes as components, and then building up from here.
Craft, instead, has systems for animation. They have an animation engine and library that synchronizes everything across everyone and they enforce usage of that.
A local-first approach
New technologies emerge on the server side. When you're dealing with personal software, the amount of content you're dealing with can fit on the user's device. A lot of the compute can be done locally.
Craft’s architecture is preparing for local-first approaches. They architected components so they can replace them with local or remote components anytime they decide it’s now possible to do so.
An example is search: instead of having a big elastic search cluster, they are looking at having 2 million search indexes on a disk in the cloud. Every time somebody does a search, they can either download that search index locally and use it there to execute the search, or a Lambda or serverless function can just read the search index.
The industry keeps swinging between cloud and local compute.
There is a new wave of personal computing powered by processors getting faster. The M4 Pro is a faster processor than anything you can buy on an AWS cloud.
Eventually, people will get tired of their personal computers holding them back and they’ll appreciate server-side components working faster. After a while, they will then start to get annoyed about how much the server-side project costs… and the pendulum keeps swinging
Local-first is experiencing a comeback because people are starting to travel again. It gets inconvenient when you need something badly, with poor connection – and you cannot access it.
Where to find Balint Orosz:
• X: https://x.com/balintorosz
• LinkedIn: https://www.linkedin.com/in/balintorosz/
Mentions during the episode:
• Craft: https://www.craft.do/
• Skyscanner: https://www.skyscanner.com/
• Flash: https://en.wikipedia.org/wiki/Adobe_Flash
• Shader: https://en.wikipedia.org/wiki/Shader
• Understanding Auto Layout: https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/index.html
• Mac Catalyst: https://developer.apple.com/mac-catalyst/
• Apple M1: https://en.wikipedia.org/wiki/Apple_M1
• Elasticsearch: https://en.wikipedia.org/wiki/Elasticsearch
• The Cloud Is a Prison. Can the Local-First Software Movement Set Us Free?: https://www.wired.com/story/the-cloud-is-a-prison-can-the-local-first-software-movement-set-us-free/
• Local-first software: https://news.ycombinator.com/item?id=31594613
• Visual Studio Code: https://code.visualstudio.com/
• ChatGPT 01 model: https://openai.com/o1/
• PencilKit: https://developer.apple.com/documentation/pencilkit
• Swift: https://www.swift.org/
• Objective-C: https://en.wikipedia.org/wiki/Objective-C#
• Tailwind CSS: https://tailwindcss.com/
• The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers: https://www.amazon.com/Hard-Thing-About-Things-Building/dp/0062273205
—
Production and marketing by Pen Name. For inquiries about sponsoring the podcast, email podcast@pragmaticengineer.com.
Share this post