Latest / The Pragmatic Engineer / Design-first software engineering: Craft – with Balint Orosz
Transcript
- 0:00SPEAKER_0: So how do you find it being different?
- 0:03Being both a founder with a lot more,
- 0:05should I say design focus,
- 0:06user focus,
- 0:07mobile focus?
- 0:08True engineers or hardcore engineers didn't really find me to be one of them.
- 0:13But then designers,
- 0:14product managers or others,
- 0:16they didn't find me to be one of them either.
- 0:18So you end up in this in-between period of you do a lot of engineering,
- 0:22they respect what you do but somehow because my focus has never been on
- 0:27distributed system,
- 0:28scalable algorithms,
- 0:29a lot of the innovation I bring to a team means that clicking on a button will
- 0:34take 2 milliseconds instead of 10 milliseconds.
- 0:36Backend engineers will say they just saved $2 million on infrastructure
- 0:40cost or scale to a billion users.
- 0:42My love for creating user-facing experiences kept me going and going on this path.
- 0:47Many people who started next to me who ended up moving a lot more towards
- 0:51back-end distributed systems,
- 0:53scaling engineering,
- 0:54that's where they thought and they found hard problems to be.
- 0:58Craft is one of the most delightful text editors and an app that has
- 1:01previously received Apple's Mac App of the Year award.
- 1:04I happen to know this app really well because its founder is my brother Balint Orosz.
- 1:08SPEAKER_0: Balint is probably the exact opposite of me.
- 1:10He's a designer at heart and is as good as someone can get in building amazing apps.
- 1:15Today we talk about why it's hard to fit in as a design first engineer or
- 1:19engineering leader at most tech companies.
- 1:21Unique engineering decisions behind Craft,
- 1:23like using custom components instead of the native iOS and Mac ones and not
- 1:27using auto layout.
- 1:29SPEAKER_0: How Craft built an editor where everything animates but nothing is jumpy.
- 1:33And many more interesting topics like how most companies get design systems
- 1:36wrong and how to make local-first software work well.
- 1:40If you're interested in how beautiful and highly opinionated software is
- 1:43built with a small team,
- 1:44this episode is for you.
- 1:46If you enjoy the show,
- 1:46please subscribe to the podcast on any podcast platform and on YouTube.
- 1:50SPEAKER_0: Thank you.
- 1:51SPEAKER_0: This really helps.
- 1:51SPEAKER_0: The show gets to even more listeners and viewers.
- 1:54This is a very rare and special episode,
- 1:56especially that I only have one brother.
- 1:58SPEAKER_0: So Balint, first of all, welcome to the podcast.
- 2:02SPEAKER_1: Thanks for having me.
- 2:04So one of the topics that,
- 2:05one of the reasons you're here is recently I reflected on something
- 2:11interesting how most CTOs that I know and even most founders at tech companies,
- 2:17they're very backend oriented.
- 2:20Their background typically they've been in engineering for 10 plus years is
- 2:25usually very backend heavy.
- 2:27SPEAKER_0: And this leads to a lot of interesting things.
- 2:30SPEAKER_0: Their approaches will prefer backend engineering approaches.
- 2:35For example,
- 2:35they'll often focus heavily on unit testing,
- 2:38automated testing and so on.
- 2:39But what I've not really seen is a more mobile UX design focused founder and
- 2:46especially engineering executive.
- 2:48And I have seen this with you because you're a lot more in this direction.
- 2:54SPEAKER_0: And the two of us are pretty different.
- 2:55SPEAKER_0: If I had to put myself, I'm far more of this back-end preference.
- 3:00SPEAKER_0: And even one, we did projects together many, many years ago.
- 3:04I was writing the unit test and the business logic and you were doing the
- 3:07front-end side of things and you still say it here.
- 3:10So how do you find it being different,
- 3:14being both a founder,
- 3:16previously you were an executive at Skyscanner with a lot more,
- 3:20should I say design focus,
- 3:22user focus,
- 3:22mobile focus?
- 3:23SPEAKER_0: What would a good way to be to put it?
- 3:27Yeah,
- 3:27so I've been writing code as you know since I've been 12,
- 3:32but always when I've been writing code,
- 3:35my main goal was to put something on the screen and to be able to interact with that.
- 3:41SPEAKER_1: So for many people it's-
- 3:45SPEAKER_0: We can probably note the first few programs that you wrote.
- 3:48SPEAKER_0: Those were games, right?
- 3:50SPEAKER_1: Yeah, they were games and visualization of graphs.
- 3:53And I focused a lot on time on making sure the graph is drawn in an animated fashion.
- 3:59So those were always the very,
- 4:02very interesting parts for engineering for me.
- 4:05SPEAKER_1: And this also led me to a number of different techniques over the time.
- 4:09SPEAKER_1: For instance, utilizing Flash a lot.
- 4:10I think Flash was a very interesting way of how code and design co-lived in the
- 4:17same tool and allowed a very strong creative expression.
- 4:20And I always tended to look at computers as an opportunity to draw on a canvas,
- 4:27draw on your screen.
- 4:28SPEAKER_1: Particularly as myself, I've never been able to draw by hand well.
- 4:32SPEAKER_1: I always looked at how computers can enable me.
- 4:36And I think this was a very interesting way because despite being an engineer
- 4:41for such a long time and writing so many code,
- 4:44I always felt that true engineers or hardcore engineers didn't really find
- 4:50me to be one of them.
- 4:53But then designers or product managers or others,
- 4:57they didn't find me to be one of them either.
- 5:01So you end up in the same between period of you do a lot of engineering,
- 5:06they respect what you do,
- 5:07but somehow because my focus has never been on distributed systems,
- 5:13scalable algorithms,
- 5:15a lot of the innovation I for instance,
- 5:17bring to a team means that clicking on a button will take two milliseconds
- 5:21instead of 10 milliseconds while backend engineers will say they just saved
- 5:01$2 million on infrastructure cost or scale to a billion users.
- 5:31And I think my love for creating user facing experiences kept me going and
- 5:37going on this path.
- 5:39But I've seen many people who started next to me who ended up moving a lot more
- 5:45towards backend distributed systems,
- 5:47scaling engineering because that's where they thought and they found hard
- 5:52problems to be.
- 5:54And also it's a lot in big companies how competency frameworks,
- 5:57promotion structures are oriented towards those areas where it's a lot
- 6:02easier to validate the impact you've been doing because it's a lot more measurable.
- 6:07SPEAKER_0: This episode is brought to you by WorkOS.
- 6:09If you're building a SaaS app,
- 6:10at some point your customers will start asking for enterprise features like
- 6:13SAML authentication,
- 6:14SCIM provisioning,
- 6:15and fine-grained authorization.
- 6:17That's where WorkOS comes in,
- 6:19making it fast and painless to add enterprise features to your app.
- 6:22Their APIs are easy to understand and you can ship quickly and get back to
- 6:25building other features.
- 6:27WorkOS also provides a free user management solution called AuthKit for up
- 6:31to 1 million monthly active users.
- 6:33It's a drop in replacement for Auth0 and comes standard with useful features
- 6:36like domain verification,
- 6:38rule-based access control,
- 6:39bot protection and MFA.
- 6:41SPEAKER_0: It's powered by Radix components, which means zero compromises in design.
- 6:45You get limitless customizations,
- 6:46as well as,
- 6:47modular templates designed for quick integrations.
- 6:50Today,
- 6:50hundreds of fast-growing startups are powered by WorkOS,
- 6:53including ones you probably know like Cursor,
- 6:55Vercel,
- 6:56and Perplexity.
- 6:57SPEAKER_0: Check it out at workos.com to learn more.
- 7:00SPEAKER_0: That is Workos.com.
- 7:03Before we jump back into the episode,
- 7:05I want to let you know that the audiobook version of my best-selling book,
- 7:08the Software Engineer's Guidebook is out now.
- 7:10You can get it on all major audiobook platforms like Spotify,
- 7:13Audible,
- 7:14Liberal.FM,
- 7:14Apple Books,
- 7:15Google Play and also DRM-free MP3 files.
- 7:19I started writing this book after a decade of working as a software engineer
- 7:22when I was working as an engineering manager for a few years already at Uber.
- 7:26Here's a view from the book from senior principal engineer Tanya Reilly,
- 7:30who was the author of the staff Engineer's Path.
- 7:32From performance reviews to P95 latency,
- 7:35from team dynamics to testing,
- 7:37Gergely demystifies all aspects of a software career.
- 7:40This book is well-named,
- 7:41it really does feel like the missing guidebook for the whole industry.
- 7:45You can get the book at engguidebook.com or search for the software
- 7:48Engineer's Guidebook on your favorite audiobook platform.
- 7:50SPEAKER_0: I hope you'll enjoy it.
- 7:52SPEAKER_0: Can we talk about this for a second?
- 7:54SPEAKER_0: Because your path, our path could have not been more different.
- 7:57Just to recap,
- 7:59both of us went to university,
- 8:01we actually went to the same university.
- 8:03I'm the older brother,
- 8:04so I was two years basically ahead and then both of us did some side projects on
- 8:09the side.
- 8:09We actually did some side projects together,
- 8:11which was kind of fun/interesting.
- 8:13SPEAKER_0: We built some apps.
- 8:15And then when it came to graduation,
- 8:18I went into the workforce,
- 8:20I went as an employee,
- 8:22as a new grad to a consultancy,
- 8:24then a larger company and then even bigger companies in the end ended up at Uber.
- 8:29SPEAKER_0: You started off as an entrepreneur to start with.
- 8:31You started off your startup,
- 8:34it was a small startup,
- 8:35then a mid-sized startup,
- 8:36and then it got acquired by a Skyscanner and then you became a director of
- 8:41engineeringwhenyou-
- 8:42SPEAKER_1: Yeah.
- 8:43SPEAKER_1: It was head of app product, essentially.
- 8:45SPEAKER_0: Head of app product.
- 8:46So you went from a two-person startup or three-person startup to a
- 8:50thirty-person startup acquired and boom,
- 8:52you're inside a thousand-person company.
- 8:54SPEAKER_1: Yep.
- 8:55You said that it was kind of hard to get recognition and I'm interested in what happened.
- 9:00SPEAKER_0: This was clearly at Skyscanner.
- 9:03You came in as,
- 9:04you went from running your startup to an executive,
- 9:07you were now some very important.
- 9:09Funny enough,
- 9:10we later both worked there and I was like levels below you,
- 9:14but what did this mean in terms of having a little bit struggle to get
- 9:21recognized the same way as your backend peers did?
- 9:24So it was very interesting on that side of things because there were two
- 9:30phases being at Skyscanner.
- 9:31I think the first part was our acquisition was mainly driven by the
- 9:36frustration or the desire to build a really amazing mobile experience.
- 9:42So this was 2014,
- 9:43mobile was on the rise and the leadership at Skyscanner,
- 9:47which was a founder driven leadership clearly said,
- 9:50"We need to be very,
- 9:52verygoodatmobile."
- 9:53At the same time there was an understanding couple there that they are a web
- 9:57first company,
- 9:59the entire generation of leadership was born in web and they need a different
- 10:02perspective who can propel them in that mobile-first future?
- 10:07So this meant in the first year,
- 10:09it was a lot about just do whatever you want to do.
- 10:13And in the second year I think things a little bit changed because there was a
- 10:17new wave of leadership coming in from Amazon,
- 10:19Microsoft,
- 10:20Facebook,
- 10:21other larger institutions.
- 10:23And the primary goal of that leadership was to help scale the organizational
- 10:28structure of Skyscanner,
- 10:29to make it a world-class engineering team.
- 10:32And I think this was where very interesting things started to happen in terms
- 10:37of agreements,
- 10:38disagreements,
- 10:39what is important,
- 10:40what is not important.
- 10:42Senior architects coming in,
- 10:44setting up metrics and trying to measure output and performance in ways that
- 10:50I didn't feel or the right way to measure those things.
- 10:56It was interesting because I've been pushing back a lot and I think the moment
- 11:01I started having deeper discussions with the engineering leaders,
- 11:05again very,
- 11:06very senior ones coming from big companies,
- 11:09I think there was a realization of oh my God,
- 11:11this is an area I am completely unequipped to deal with.
- 11:15So for now,
- 11:16I won't go super deep inside of that,
- 11:19but eventually I think a lot of the behaviors through again,
- 11:22competency frameworks,
- 11:24measurement of throughput.
- 11:26General engineering principles in treating the engineering organization
- 11:30as which needs to work along the same set of principles every engineer
- 11:35propagated into the app team and the organization as well,
- 11:41which led to a lot of different things on how we viewed performance,
- 11:47how we looked at throughput and who was seen as someone worthy of a promotion.
- 11:53SPEAKER_0: Yeah.
- 11:53SPEAKER_0: So in end you learned the big company ways.
- 11:56SPEAKER_1: Yes, yes.
- 11:57SPEAKER_1: And I learned tons.
- 11:59And for me it was an amazing educational experience because I've seen a lot of
- 12:02things and I think I could really build up because of this,
- 12:06a lot more solid understanding of what I believe is right,
- 12:10more likely what I believe is right should always be dependent on the context.
- 12:14So I got a lot more grander understanding of there's no right way of doing things.
- 12:19SPEAKER_1: There are certain problems which have certain ways of solving them.
- 12:25SPEAKER_1: Of course.
- 12:25SPEAKER_1: Of course.
- 12:34SPEAKER_0: But you never lost that.
- 12:37You mentioned one thing that both of us were a Skyscanner for a short time,
- 12:42a different organization made sure I didn't report into your organization
- 12:46and indirectly to you,
- 12:49but I remember that there was always a focus whenever I went over about when we
- 12:55talked about mobile development with you or people on your team,
- 12:59it wasn't really about the usual stuff like code quality,
- 13:05unit test coverage,
- 13:08CICD build times.
- 13:10SPEAKER_0: It was about user experience.
- 13:12SPEAKER_0: How smooth does it feel?
- 13:14SPEAKER_0: How fast is it, how many taps do you need?
- 13:17SPEAKER_0: So you kind of kept this focus even as you started your next startup.
- 13:22SPEAKER_0: That was a mobile iOS first startup Craft, Craft docs.
- 13:29And by that time you've seen in both,
- 13:30you've seen the backend,
- 13:31you've seen the front end.
- 13:32What did you decide to bring in from day one from engineering on how you've
- 13:37built this startup from scratch?
- 13:40Yeah,
- 13:40so I think the biggest takeaway I had there is if you want to create a really
- 13:49amazing product,
- 13:51you cannot really have one engineering culture inside of the company.
- 13:56And this is very interesting because when we look at,
- 13:58for instance,
- 13:59companies like Apple,
- 14:00they are very UI first engineering culture if you'd like,
- 14:05but their backends and their web services and all of those are terrible.
- 14:10And then you look at Amazon and Google who are very strong system design and
- 14:15backend engineering principle driven companies,
- 14:18they cannot seem to create meaningfully good or fluent UI experiences.
- 14:22Of course by the measurements they are there,
- 14:25but when you use them,
- 14:26they still don't feel comfortable.
- 14:28And what I thought at the time specifically as we've been creating a piece of
- 14:33software that was meant to be used hours a day,
- 14:38even today it's used,
- 14:39our average users use it two,
- 14:40three hours a day that you just cannot compromise.
- 14:44SPEAKER_1: You need to make it feel very fluent.
- 14:46But we are dealing with data,
- 14:48important data in terms of what you're writing,
- 14:51how you're thinking,
- 14:52which needs to be synchronized seamlessly,
- 14:54very fast,
- 14:55local-first.
- 14:57So I think this was the first thing where I said of we're going to have
- 15:01engineering principles for areas that touch data because we need to ensure
- 15:07there's zero data loss.
- 15:08We need to ensure those are very fast,
- 15:10super efficient,
- 15:12anytime we can switch parts.
- 15:14SPEAKER_1: And we don't really need to innovate there, if you know what I mean.
- 15:17SPEAKER_0: Yeah.
- 15:18I mean we need to refine a lot of things,
- 15:21but it's something that with the right approach we should be able to measure,
- 15:25iterate,
- 15:26and work on.
- 15:27And then there's the using facing part of the things where what we set out to do
- 15:32is essentially we start creating a hypertext editor for mobile.
- 15:36SPEAKER_1: Now, a hypertext editor even on the desktop is fairly complicated.
- 15:42SPEAKER_1: There's no very strong established patterns.
- 15:45It's not like a shopping cart where it's very trivial what you need to do.
- 15:49So I knew it was going to require a lot of iteration and a lot of resets and
- 15:55figuring things out.
- 15:57And that's where I didn't feel that established engineering patterns in the
- 16:02standard way of testing things,
- 16:05code coverage,
- 16:07building,
- 16:08even design components when tomorrow it might not be needed,
- 16:12will be the right approach to that.
- 16:14So this was,
- 16:16I think the approach of it came out with is neither is better than the other.
- 16:23I'm not saying that one type of engineering is better than the other,
- 16:26but these can actually very well complement each other.
- 16:29It brings in organizational complexity of the question of,
- 16:32okay,
- 16:32but what is engineering then?
- 16:34Is engineering then one domain or two domains or do we call front-end
- 16:37engineer design engineers and have them compensated differently?
- 16:42SPEAKER_1: But I felt very strongly about this coming out from there.
- 16:46SPEAKER_0: So maybe let's start with the actual architecture of the app.
- 16:50When you started out,
- 16:51I remember you knew I want to build an iOS app,
- 16:54which is going to be,
- 16:56you can take notes,
- 16:57you can use it,
- 16:57you can do whatever,
- 16:59it's like Evernote++ or just a lot better than what existed.
- 17:05And obviously you already knew at that point that there's going to be an iPad
- 17:08app at some point there's going to be Mac app,
- 17:09maybe a web app.
- 17:11What most teams would've done is you build an iOS app,
- 17:15you then build a Mac app,
- 17:16you build a web app,
- 17:17okay,
- 17:18the iPad,
- 17:18I guess it might be the same code base.
- 17:20So you now have three code bases and most teams would've just used existing
- 17:24native components.
- 17:25SPEAKER_0: What did you do and why?
- 17:28SPEAKER_0: Tell me more.
- 17:46SPEAKER_1: ... of Photoshop.
- 17:47Or just,
- 17:48even when I look at just Visual Studio 20 years ago,
- 17:52how complex it was and how well it worked.
- 17:56But sometimes I even go to these stores where they have these DAS space
- 18:01blue-screen windowing management solutions with all the keyboard
- 18:04shortcut UIs.
- 18:06So it's kind of a thing where I don't feel that there has been a significant
- 18:13improvement in terms of our ability to produce user interfaces.
- 18:19There somehow,
- 18:20we still try to figure out how to make them,
- 18:23but there hasn't been a significant complexity shift.
- 18:26SPEAKER_1: For me.
- 18:27What was always though really,
- 18:29really important is whenever I have an idea,
- 18:33be able to execute on it.
- 18:35And typically what happens is the closer you are to the core language pattern
- 18:41or the core framework elements,
- 18:44the bigger control over you have what you want to do.
- 18:47For instance,
- 18:48if you can create shader code,
- 18:50you can create any type of very beautiful visual effects if you want to
- 18:56despite anything else.
- 18:58SPEAKER_1: So for me-
- 18:59And just to be clear,
- 19:00shaders for those who are not listening,
- 19:02this is what renders like 3D or even 2D things on the screen and it basically
- 19:09runs on your GPU,
- 19:10right?
- 19:11SPEAKER_0: Yeah, oh yeah.
- 19:56SPEAKER_1: ... which promised you no longer need to think in rectangles.
- 20:00SPEAKER_1: You no longer need to specify that this label goes in this rectangle.
- 20:03SPEAKER_1: You can just say it should be at the top.
- 20:06The problem happens then is it's very easy for one label,
- 20:11but when you keep adding more things,
- 20:13the complexity increases.
- 20:15So when you want to do something more sophisticated,
- 20:17it can become very performance-intensive or you change one thing and the
- 20:22other change starts to fall apart.
- 20:24SPEAKER_0: I guess.
- 20:25SPEAKER_0: So for those who don't know iOS and AutoLayout or how layouts work.
- 20:29SPEAKER_0: Could we just explain?
- 20:30Well,
- 20:31this is why AutoLayout was a big deal for developers and then the trade-offs.
- 20:35SPEAKER_1: Yep.
- 20:36So back in the days,
- 20:38and iOS generally has this principle coming back from,
- 20:42it gives you a canvas which you can draw on,
- 20:44which comes with a lot of advantages.
- 20:46But the other disadvantage is you don't think of components of a stack,
- 20:50let's say,
- 20:51where you just pack things in stack in the web browser,
- 20:53but you say,
- 20:54I want this view to be on the X,
- 20:56Y,
- 20:460,
- 20:460 coordinate.
- 20:58SPEAKER_1: I want it to have a width of 200 pixels and a height of 100 pixels.
- 21:02SPEAKER_1: And this worked very well because early iPhones had all the same sizes.
- 21:05SPEAKER_1: I think the iPhone-
- 21:06SPEAKER_0: The same resolution, right?
- 21:07SPEAKER_1: The same resolution.
- 21:08SPEAKER_1: And I think the iPhone 4 or 5 was which became bigger.
- 21:12And that's where essentially you would have to start defining rectangles of
- 21:17I want this rectangle to be the width,
- 21:19which is 20% less wide than the enclosing container.
- 21:24And that's where Apple said,
- 21:25"Why don't we do something more elegant where you just specify this should
- 21:30snapinthemiddleanditcanautomaticallymagicallygrow."
- 21:35And what happens here is the layout engine calculates all of these run times.
- 21:41So you have a more abstract syntax that is easier to understand and define,
- 21:48but when it comes,
- 21:49for instance,
- 21:49to animations,
- 21:50to edge cases,
- 21:51you lose control because all of these dynamically calculated things will
- 21:55end up with something.
- 21:56So it's a lot more implicit way of defining how you want things to look,
- 22:02rather than being very explicit about this is exactly what I expect you to do
- 22:07as a layout element.
- 22:09So you're trading off a lot easier to define and work with as a developer and
- 22:14more complexity on the device and just less control when you want to do more advanced,
- 22:18as you mentioned animations.
- 22:19And in the early days it could feel jerky,
- 22:22laggy,
- 22:22sometimes it would go up and down,
- 22:24up and down,
- 22:25up and down but they fixed that part,
- 22:26right?
- 22:27Well,
- 22:28they did and they didn't because still when I run simulators,
- 22:32Apple error messages coming from their internal components.
- 22:34So the compiler couldn't figure out the layout so it's just falling back to
- 22:39something else.
- 22:40So there's always the more complexity you add in,
- 22:43your slave of what that engine can do,
- 22:45you're a slave of what it can resolve.
- 22:48And the more complex it gets,
- 22:49the less likely it can resolve it in a reasonable set of time.
- 22:53It got better,
- 22:54but I still think it has significant challenges inside of it.
- 22:58SPEAKER_0: So you never opted into it.
- 23:01You always said like let me choose the complexity and just to keep control.
- 23:06SPEAKER_1: No, this is in the story.
- 23:07So every time we hire an iOS engineer,
- 23:10they're like,
- 23:10"You guys are ancient.
- 23:12SPEAKER_1: Why don't you use these new technologies?"
- 23:14SPEAKER_1: For a while it was AutoLayout, now it's SwiftUI.
- 23:16And what I always do is I show them one of our transitions and say,
- 23:20"If you can do this with the same performance in AutoLayout,
- 23:23we'reswitchingtoAutoLayout."
- 23:25And I've done this at least 10 times,
- 23:27and they're always like,
- 23:28"Yeah,
- 23:28sure.
- 23:28SPEAKER_1: Like hell, I can."
- 23:30Some of them even succeed but then when you look at the code and I tell them,
- 23:33"Okay,
- 23:33but now change this to that" and they're going away for two weeks and they
- 23:37still couldn't figure out how to change that.
- 23:39SPEAKER_1: I'm like, "HereDoc was two minutes to do."
- 23:42SPEAKER_1: That's when I say, "Okay, this technology is not for us."
- 23:45SPEAKER_1: So it's not about resisting things, it's about what I said.
- 23:50Does it limit our capability to innovate and does it limit our capability to
- 23:54express things in a reasonable timeframe versus does it feel simple at the
- 24:00start but actually when you're at the bleeding edge of what you want to do,
- 24:04it's holding you back.
- 24:05SPEAKER_1: I think that is the main part of what I'm looking at.
- 24:10One interesting thing that you also did on top of not necessarily onboarding
- 24:16to the system components is how you organize your code.
- 24:20You mentioned that you have one code base across mobile,
- 24:24iPad,
- 24:25desktop and even Vision Pro.
- 24:27And as I understand this is not normal,
- 24:32even in the iOS world or in the kind of Apple world,
- 24:35usually there's different code bases and they reuse some parts of it.
- 24:39SPEAKER_0: Why did you decide to do the same.
- 24:41SPEAKER_0: And what up upsides and downsides does it have?
- 24:45SPEAKER_1: Yeah, so it's very interesting.
- 24:46I think we are the only app of this complexity which actually has the same code bases.
- 24:51Not just reuse components,
- 24:53it's like 99% the same code base,
- 24:56which some native bindings on each platform,
- 24:59which are required to do that.
- 25:01And the reason we had that is when I started Craft I said we want to do a
- 25:04hypertext mobile editor,
- 25:06but we had this thing where mobile products shouldn't be just companion tools.
- 25:12A big chunk of the world is mobile only,
- 25:15and if we build the right software,
- 25:17these mobile CPUs and GPUs right now so fast,
- 25:19there's no reason why you cannot have the full software there maybe except
- 25:23you need to think about it differently.
- 25:25Because what happens is most companies try to shrink down their desktop
- 25:30product into mobile and try to cherry-pick which functionality you want to
- 25:33have during,
- 25:34which not.
- 25:35So for this was a really important thing that our desktop app always does the
- 25:39same thing as the mobile app.
- 25:41And of course what better way is to do it than having itself a shared code base.
- 25:46But I think what,
- 25:49originally when I started Craft,
- 25:50there wasn't this technology which enabled you to run UI kit code on the Mac.
- 25:56So when people were asking me about a desktop app,
- 25:58I were like,
- 25:59maybe sometime we want to get it right on mobile first.
- 26:02And then around in 2021,
- 26:04Apple introduced this thing called Mac Catalyst,
- 26:07which again essentially allows you to write Mac apps with iOS component and
- 26:15code layouts because Mac used to have a different rendering engine and
- 26:20layout engine.
- 26:21SPEAKER_0: Yeah, different API as well,
- 26:22SPEAKER_1: Different APIs and all sorts of things.
- 26:25And with the introduction of the M1 processors,
- 26:28it all made sense because suddenly instead of it running in a simulation as it
- 26:32had with the Intel based processors,
- 26:33it kind of runs down natively so you get the same performance benefits.
- 26:37Now the big problem for us was of course is Mac apps tend to look and behave very
- 26:42differently than iOS apps.
- 26:44So technically we couldn't really have any examples of what is the right way
- 26:50of doing all of these responsive designs at this fidelity,
- 26:54so it feels native on energy platform.
- 26:56So I think that's where our belief,
- 27:00and we treat everything as a canvas,
- 27:02made a lot of sense because we could build a toolbar that looks on the Mac,
- 27:06like a Mac toolbar and an iPhone like an iOS toolbar.
- 27:09SPEAKER_1: Or we could build buttons that again adapt to those behaviors.
- 27:13And I think we spent a good two years of trying to understand how to structure
- 27:18our codes,
- 27:19our components to get the most reusability and be able to truly fulfill this
- 27:26vision of let's say just building the feature for both platforms will always
- 27:32take a little bit more time,
- 27:33but I think for us it's just like 5% more time rather than saying 50% more time.
- 27:38SPEAKER_1: As we optimize for both.
- 27:40SPEAKER_0: Can we actually look at what that means?
- 27:42If you could show just the UI and just show us what some of your own components
- 27:49are and then maybe how it connects with the code?
- 27:52SPEAKER_0: And then there was nice animation there.
- 27:53SPEAKER_0: Can you use it again?
- 28:27SPEAKER_1: Yeah, yeah, I can do it again.
- 28:28So everything moves in the same time and then everything comes back to the
- 28:31same time.
- 28:32Now for most native developers doing this is kind of what you would call impossible.
- 28:36I think when I showed this to Apple engineers,
- 28:38they themselves ask,
- 28:39"Howcanyoudothis?"
- 28:40SPEAKER_1: It's not impossible.
- 28:42SPEAKER_0: Why would they say that?
- 28:44SPEAKER_0: What makes it so challenging on most things.
- 28:47SPEAKER_0: It's a nice animation, right?
- 28:48SPEAKER_0: Just saying as somewhat who's seen it?
- 28:50SPEAKER_0: It is really smooth, but it's an animation, right?
- 28:53SPEAKER_1: Yeah.
- 28:53The problem is if you use the default toolbar,
- 28:56you cannot hide the default toolbar animated.
- 28:58SPEAKER_1: You can definitely not say what curve it should hide with.
- 29:01So even if you hide the sidebar,
- 29:04the toolbar is going to animate in a different sense.
- 29:08SPEAKER_1: So you won't have this consistent feeling.
- 29:10SPEAKER_1: But again, as I said, we treat this as the canvas.
- 29:12SPEAKER_1: So everything you see here is kind of owned by us, drawn by us.
- 29:16SPEAKER_1: We can just say, "Hey, toolbar, move out in that perspective."
- 29:21SPEAKER_1: So that is what enables this.
- 29:23And a lot of people think that,
- 29:24hey,
- 29:25this must be super complex because recreating such a foundational thing as a
- 29:29toolbar is super complex.
- 29:32So I'll just take things,
- 29:34show a little bit about how the code looks like.
- 29:38In this timeframe it might be a little bit harder to understand,
- 29:43but I'll give my best to highlight the foundational parts.
- 29:47So a lot of our back in the days,
- 29:50Craft was still called [inaudible 00:29:51].
- 29:51So a lot of in the code,
- 29:52we have still the old code names,
- 29:54butthisiskindof-
- 29:55SPEAKER_0: You always have code names.
- 29:56SPEAKER_0: Every single company has code names.
- 29:58SPEAKER_1: Yeah, yeah.
- 29:59So essentially here we have kind of the toolbar class and you can say that we
- 30:03needed to,
- 30:04and we could define some custom capabilities.
- 30:08Like in the toolbar,
- 30:09we might want to show your profile,
- 30:10display,
- 30:12or we might want an iPhone specifically.
- 30:14It's important to have a bottom separator,
- 30:16but when you scroll,
- 30:17we don't want to have that.
- 30:19SPEAKER_1: Do we want to show, let's say the title of the pager inside of that.
- 30:23SPEAKER_1: And there's some of these part of things.
- 30:27SPEAKER_1: But then when you run through the code itself, it's fairly similar.
- 30:31SPEAKER_1: We have a bottom separator, we have a blur material.
- 30:35So at the background of the toolbar has this nice little blurred feeling,
- 30:39a done button.
- 30:40We have this real-time cursor area where you see all those faces popping and
- 30:44fuse editing it.
- 30:46SPEAKER_1: Some other views like the title, the left.
- 30:49And then it's like some basic command handling we use of what happens when
- 30:55somebody does something.
- 30:57But if I go through this,
- 30:59this is the layout code,
- 31:00so this is what I talked about.
- 31:01If we're saying it's kind of ugly because this would be more,
- 31:05and this is when I'm saying of,
- 31:07hey,
- 31:07we're saying the right area should be in this rectangle,
- 31:12and I'm doing the calculation of this rectangle,
- 31:14but again,
- 31:15it's drawing a rectangle,
- 31:16so it's not super complicated.
- 31:18I mean this is,
- 31:19but the code will probably be for a native component as well,
- 31:21roughly.
- 31:21SPEAKER_0: And if we looked inside of it.
- 31:23SPEAKER_1: Yeah.
- 31:24And again,
- 31:24it's like 600 lines,
- 31:26but none of those lines are really cognitively challenging.
- 31:31So we have junior engineers coming in in the second day doing changes to this.
- 31:35So it's a very interesting thing because again,
- 31:39this is where I come back to a backend engineering season,
- 31:42staff engineer will come look at this and say,
- 31:45"Where'sthemagicinsideofhere?"
- 31:48And I think the core part of is you need to do a lot of iteration to get which
- 31:54components you build and how right,
- 31:57but then you can reap a lot of the benefits without having a super complicated thing.
- 32:02And the other really good thing is it's like having an open source library you
- 32:07can actually modify.
- 32:08Because what I said,
- 32:09we're not working with closed source components or even code base that is
- 32:14just so big.
- 32:15Even let's say you're using a complex framework,
- 32:19even if it's open source,
- 32:20you're afraid to modify it because there may be so many side effects is
- 32:24everybody is free to go in and do the changes and they can understand the
- 32:28impact of those changes very easily.
- 32:31And so when you're saying open source,
- 32:33you mean open in terms of for the team to change because now,
- 32:36you internal open source if you will.
- 32:40SPEAKER_1: Yeah.
- 32:40Because most of the components you end up using native components or whatever.
- 32:44SPEAKER_1: If you use a native toolbar, you cannot really modify that at all.
- 32:47SPEAKER_1: You get what's in there.
- 32:49But this is really interesting though because I feel there's a very big
- 32:52divide between backend and kind of client-side/front-end engineering in
- 32:56the sense of as a backend engineer,
- 32:59it's kind of obvious that you choose an open source library.
- 33:02SPEAKER_0: You might also just rebuild a lot of things from scratch.
- 33:06SPEAKER_0: There's just this given thing that you go in and change it.
- 33:08You fork the library and you might make changes or try to submit them upstream.
- 33:12SPEAKER_0: Whereas for, I worked on both sides.
- 33:15When I worked on mobile engineers,
- 33:16it was like,
- 33:17"Oh,
- 33:18you just take the component that comes from Apple or from Google or JetBrains
- 33:24and you look at the API,
- 33:25what you can do,
- 33:26you try to tweak it and that's it.
- 33:30I wonder why this is,
- 33:32do you think Apple might have something to do with it?
- 33:34SPEAKER_0: They have a very strict way that they don't take contributions.
- 33:38You can raise a,
- 33:39even if you have an obvious bug,
- 33:41it takes so long to resolve.
- 33:43You have to raise in their ticketing system and they might or might not look at it,
- 33:46but they're the only ones who can do it.
- 33:49Yeah,
- 33:50I think this is a lot about,
- 33:54a lot of the communication of engineering companies who build tools for
- 33:59front-end engineers are about,
- 34:01we're going to simplify this for you because it is complex.
- 34:05So a really good example is there are things which we call virtualized lists.
- 34:10SPEAKER_1: So what's essentially means is you have a list of 1000 items.
- 34:13SPEAKER_1: You cannot create the 1000 views because that's going to be very slow.
- 34:17So as you scroll,
- 34:18you detect which views should be on the screen and you only have let's say 10
- 34:22views on the screen at a time.
- 34:24SPEAKER_1: And every time one of it disappears kind of you repurpose it.
- 34:30And people are very afraid to create virtualized lists because they say,
- 34:36"Oh,
- 34:36it'ssocomplicated."
- 34:38And I'm like,
- 34:39"What is so complicated in understanding of which view is off-screen and
- 34:43then reusing it,
- 34:44addingittoanobjectpoolandputtingitback."
- 34:47SPEAKER_1: And they're like, "Yeah, but Apple's UI collection view or whatever list.
- 34:50SPEAKER_1: You have so many things it can do."
- 34:52I mean,
- 34:52"Yeah,
- 34:53it has so many things it can do,
- 34:54but which of those things actually do you need right now?
- 34:57SPEAKER_1: And then why cannot you write that itself?"
- 35:01So I think front-end engineering is a little bit like you might have thousand
- 35:06things a control supports,
- 35:09it can support small text,
- 35:11big text,
- 35:12this background or that,
- 35:14touch keyboard handling,
- 35:15whatever that is.
- 35:17SPEAKER_1: And that is a lot of work.
- 35:19But assuming that you're going to need all of them isn't probably the right
- 35:24thing to do.
- 35:25But also then because you never actually end up building lower level codes,
- 35:29you always just end up using these,
- 35:31you kind of lose your capability to create these.
- 35:36SPEAKER_1: Very often front-end engineers will become an expert in their own domain.
- 35:40Like React engineers know how react works,
- 35:43but they don't necessarily understand the underlying solutions.
- 35:48Again,
- 35:48in backend engineering,
- 35:49the university and everywhere,
- 35:51people learn about how databases work at the core,
- 35:53what do those mean,
- 35:54and they can repurpose that.
- 35:56SPEAKER_1: We don't learn that about front-end systems.
- 35:59So there's a lot more,
- 36:01I think fear of doing anything custom and what that might result in.
- 36:06SPEAKER_0: This episode is brought to you by Augment Code.
- 36:09We share AI co-pilot,
- 36:11actually knew your codebase,
- 36:13Augment Code is different.
- 36:15Augment is built for professional engineering teams working on complex systems,
- 36:19not hobbyists building to-do apps.
- 36:21Other AI assistants struggle with context,
- 36:24Augment understands your entire codebase architecture,
- 36:27patterns,
- 36:27dependencies and all.
- 36:29We're talking instant understanding of systems with millions of lines of
- 36:32code in under 200 milliseconds.
- 36:35Teams like Webflow,
- 36:36Lemonade and [inaudible 00:36:38] use Augment to ship better code faster.
- 36:40SPEAKER_0: No more context switching, no more generic suggestions.
- 36:43SPEAKER_0: Just an AI that works the way expert developers do, fast and in flow.
- 36:49Plus what enterprise-grade security and zero training on customer code you
- 36:52can trust Augment with your systems.
- 36:55Start building with Augment in your favorite IDE and see what it's like when
- 36:58an AI actually understands your code.
- 37:01SPEAKER_0: Try it free at augmentcode.com/pragmatic.
- 37:06When we talk about front-end systems,
- 37:08one of the things that most companies would do is they would,
- 37:11if you're talking about mobile app or web app,
- 37:14create a design system.
- 37:15I've seen this so many times at Skype,
- 37:18Skyscanner,
- 37:20every company,
- 37:20there's blog posts about it.
- 37:21SPEAKER_0: Here's our new design system.
- 37:24And this is usually a pretty big undertaking,
- 37:25but it might involve creating custom components or using system components,
- 37:29et cetera.
- 37:30SPEAKER_0: What is your design system?
- 37:31SPEAKER_0: If you even have one, do you have one?
- 37:35We have systems,
- 37:36but we have a very different design system that most companies will do.
- 37:40And so what most companies do is there is this called atomic design system
- 37:45where you start with base colors as atoms,
- 37:48and then you have buttons which combine colors and shapes as components and
- 37:53then you build bottom up from there.
- 37:55SPEAKER_1: And this has been very efficient.
- 37:58And design systems started coming along when there was this saying that
- 38:02design needs to have a CXO seat at the table.
- 38:05SPEAKER_1: And since most CXO-
- 38:08SPEAKER_0: Like a C-level, so chief design officer basically?
- 38:11Yeah,
- 38:11yeah,
- 38:11chief design officer just kind of design started saying we need a seat at the table.
- 38:15And they found this very common language of systems and components because engineers,
- 38:20and again,
- 38:21high-level executives and tech companies were often engineers in the past.
- 38:25SPEAKER_1: Rather than just saying, "We feel this looks good."
- 38:28SPEAKER_1: They could have this shared language of how this looks good.
- 38:32And for companies which have a very established brand,
- 38:36identities and guidelines,
- 38:37which is very static,
- 38:39this works well,
- 38:41and also it works very well for scaling quality.
- 38:44Now we all know that scaling quality versus improving quality or innovating
- 38:50are two very different systems.
- 38:52So for instance,
- 38:54I expect every front-end engineering Craft in two minutes to be able to
- 38:59create the exact same button we have.
- 39:01SPEAKER_1: Because what is the button we have?
- 39:03It's a rounded rectangle with a six pixel corner radius,
- 39:06eight on iPhone,
- 39:08with this background color and this font size,
- 39:12a light center.
- 39:13SPEAKER_1: Now creating that doesn't require a PhD.
- 39:17What we do have systems for is more sophisticated parts,
- 39:24and these are for instance animation.
- 39:26So in animation we figured out that it's not about,
- 39:32I mean you need to fine-tune some parameters,
- 39:34but really what happens is you animate multiple things at the same time and
- 39:39the consistency of that experience so it feels as one movement and every
- 39:42movement is harmonized together.
- 39:45SPEAKER_1: It's like because it's this visual movement, it's like a dance.
- 39:48When you look at a team dance competition,
- 39:50if the dancers move in the same time,
- 39:53it looks good,
- 39:54but as each one of them move in the different time,
- 39:56it feels terrible.
- 39:58For us having an animation engine,
- 40:00an animation library that synchronizes everything across everyone and we
- 40:05enforce usage of that,
- 40:07you cannot do anything else is something.
- 40:10Then I think there are other things which are quite important for us because
- 40:15we realize some things that I think I might just show my screen here,
- 40:20share my screen for a minute.
- 40:23And then just to be clear,
- 40:24when you said like it's like a dance and multiple things need to move,
- 40:26this is because you animate often everything on the screen,
- 40:30all your components,
- 40:31right?
- 40:32SPEAKER_1: Well, when an area grows, others need to shrink.
- 40:35So it's you have a fixed window size or when you change that window size,
- 40:40everything needs to adaptively fill that.
- 40:42SPEAKER_1: And in Craft, everything is animated.
- 40:44So I think this is also a very interesting thing of I think we're the only text
- 40:49editor where for instance,
- 40:51when you enter a new line or remove something,
- 40:55the entire document animates.
- 40:57SPEAKER_1: It's not jumping.
- 40:58SPEAKER_1: You don't have this tick, tick, tick but rather everything flows down.
- 41:01SPEAKER_1: So animation and everything by default when it's moving, it's-
- 41:05SPEAKER_0: No.
- 41:05SPEAKER_0: So the bottom document for example, it also moves down.
- 41:12SPEAKER_0: That's going to be a separate animation, right?
- 41:15In the next paragraph and you know,
- 41:16everything,
- 41:18companies shy away from animating these because it's harder.
- 41:22SPEAKER_0: Because the built-in.
- 41:24And also the built-in components don't allow to do this easily or nicely,
- 41:28right?
- 41:29SPEAKER_1: No, no.
- 41:29SPEAKER_1: they do not.
- 41:30Okay,
- 41:31so I'm starting to see that you're,
- 41:32did you know you're going to get all this advantages by building your own
- 41:37stuff or did it just happen?
- 41:41So what we knew is when you draw on a client bus,
- 41:45you decide what you want to do.
- 41:47So I think this is the point of when you just think about something where you
- 41:52have full control over everything,
- 41:54you know can do whatever you do.
- 41:55And five years ago I didn't know I want to have this type of animation or that
- 41:59type of thing,
- 42:00but what I wanted is to set up the environment in a way where I can do it if I want it.
- 42:07And I think this is a lot about having control over the basic parts of the system,
- 42:13which enables you to do these.
- 42:14And then it enables you to often do it very cheaply because often you can hack
- 42:19it into existing systems,
- 42:20but then those modifications,
- 42:22if they go against the original design principle of that system,
- 42:26it feels terrible.
- 42:27SPEAKER_1: It will be buggy, hard to maintain and so on.
- 42:32So then you said you don't have a design system,
- 42:35but you have systems like an animation system?
- 42:39SPEAKER_0: Yeah, three dots.
- 43:06SPEAKER_1: Yeah.
- 43:06SPEAKER_1: What we realized when you put three dots, you lose two characters.
- 43:09So if this were an ellipsis,
- 43:11I wouldn't see the O and the N,
- 43:13I would only see up to the question.
- 43:14And we found this both better aesthetic and more useful because in mobile and
- 43:18tiny spaces,
- 43:19those few characters matter.
- 43:21So we created a behavior which you can attach on any label and then instead of
- 43:26it cropping itself,
- 43:27it will have this nice fading out experience.
- 43:31And also it's a little bit more complicated because it needs to work against
- 43:35any background because Craft uses these tinted backgrounds,
- 43:38it takes over the document color and the likes of that.
- 43:41SPEAKER_1: So it has complexity to create on its own.
- 43:44SPEAKER_0: Plus you have dark mode as well, right?
- 43:46SPEAKER_1: Yeah, we have dark mode, light mode, transparent backgrounds.
- 43:49Color is quite complicated and that's why we create this once and build it in a
- 43:55way where you can attach it to any label you have in the application.
- 43:59Which means,
- 44:00again,
- 44:00for engineers,
- 44:02it's very easy to create these delightful experiences because they can just
- 44:06take something and tweak it easily.
- 44:12One thing that's interesting about Craft is it is,
- 44:15as you told me before,
- 44:16it's personal software.
- 44:18SPEAKER_0: It's very, you work with your own documents, with your own stuff.
- 44:25And how,
- 44:28what difference does this make in how you engineer the application?
- 44:31SPEAKER_0: What opportunities does this give you?
- 44:32SPEAKER_0: You mentioned things like local-first.
- 44:35SPEAKER_0: And how does it impact the architecture back in the front-end?
- 44:42SPEAKER_1: So this was something that I keep learning and relearning all the time.
- 44:48SPEAKER_1: It's very clear, I think that new technologies emerge on the server side.
- 44:54And for a while it wasn't clear for me of how much of the things we do can be local
- 45:00versus how much of them need to implement it on the server side.
- 45:03So we have quite strong teams on both parts,
- 45:06and I think that's what you need in the long term.
- 45:08What's very important is,
- 45:10is when you're dealing with personal software,
- 45:12usually the amount of content you're dealing with except for binary files
- 45:17like videos and media,
- 45:19but raw content that can fit on the user's device,
- 45:24which is very interesting because when you're looking at B2B software where
- 45:27there's a thousand individuals contributing to that is there's no way
- 45:32that's going to fit on your device.
- 45:34Now this is something very interesting because then if you think about it,
- 45:38a lot of the computes can be done locally,
- 45:41which is also interesting because how your cost base will move across those things.
- 45:46And also what I'm seeing right now,
- 45:48for instance,
- 45:49LLMs and AI is something that we're saying is like it's no way it's going to be
- 45:53on device,
- 45:54but just in the recent weeks we're seeing signals that actually in a couple of
- 45:57years that might be also available.
- 46:01So one of the things we're building is we're building every service in a way
- 46:06and wrapping them in architectural components that we can replace them to
- 46:09local or remote components anytime we feel now it's possible to do or not
- 46:16without significant infrastructural changes.
- 46:18SPEAKER_1: And this also has impact on how we architecture our backends.
- 46:23SPEAKER_1: So for instance, a very concrete example would be search.
- 46:26Now the traditional way of when you have,
- 46:30let's say Craft has more than 2 million users is you have a big,
- 46:35let's say elastic search cluster,
- 46:38all of the user's data is indexed in that elastic search cluster and you have
- 46:43logical separation,
- 46:44but you don't have physical separation.
- 46:47Now the problem is what if you just want to change the search algorithm for a
- 46:51few users or improve that and things like that,
- 46:53it gets complicated.
- 46:55So what we're looking at is could we have 2 million search indexes on a disk in
- 47:02the cloud?
- 47:03And every time somebody does a search,
- 47:06either they can download that search index locally and use it there to
- 47:09execute the search.
- 47:11Or if we cannot download it because it's too big,
- 47:13maybe a Lambda or a serverless function can just read the search index and
- 47:18based on that execute the search for the client that needs to do that
- 47:22specifically for API use cases or whatever headless capabilities we want to
- 47:28implement this might be very helpful,
- 47:30but thinking about how we can replicate and use the same infrastructure
- 47:35across client and backend is something you can only do when you're looking at
- 47:39personal scale data.
- 47:41And it's kind of impossible to think about when you're looking at very deeply interconnected,
- 47:46thousands of individuals in the same data set.
- 47:50SPEAKER_0: And it's interesting, you mentioned local computing.
- 47:54Until now,
- 47:56the traditional thinking was that,
- 47:58yeah,
- 47:58you should do every compute on the web because you have very thin clients.
- 48:02It might just be a web page,
- 48:04even if it's a mobile device,
- 48:05it doesn't have much computing capability,
- 48:08but this is all changing,
- 48:10isn't it?
- 48:12SPEAKER_1: I think it's always a ping pong.
- 48:15And this is what we realize when you're long enough in tech is you have cycles.
- 48:19We used to come from the central computer with terminals,
- 48:23then we came onto with the PC of local computing,
- 48:26then we went back with cloud of everything is computed in the cloud from
- 48:30websites being server-side rendered.
- 48:32And now we are seeing I think a new wave of personal computing,
- 48:38and I think it is powered by also processors getting lost faster.
- 48:41I believe the M4 Pro is a faster processor than anything you can buy on an AWS cloud.
- 48:48And if you can use those resources for it to code only for you and you as a user
- 48:54have an option to upgrade your level of service because of local computing,
- 48:59that is interesting.
- 49:02SPEAKER_1: I don't think it's ever going to be black and white.
- 49:04SPEAKER_1: It's always gray.
- 49:05I think they're,
- 49:07eventually people get tired of their own computers holding them back and
- 49:11they enjoy server-side components enabling them and then they start
- 49:14feeling bad about how much the server-side project costs,
- 49:18and they want to have that power on their own computer.
- 49:20SPEAKER_1: So it's a pendulum swing.
- 49:22And I think now we're starting to see a lot of interest in moving that
- 49:25ownership of being able to decide the performance I want to have to my
- 49:31computer versus to the cloud.
- 49:34SPEAKER_0: But I guess this can also help with, for example, just pricing.
- 49:37SPEAKER_0: Just right now we're in the end of zero interest rates have ended.
- 49:41SPEAKER_0: Efficiency is a lot more important.
- 49:43SPEAKER_0: It's harder to raise money.
- 49:44Basically,
- 49:45it's not really feasible to necessarily lose money on services.
- 49:50But if you can do this and you switch that,
- 49:52you might be able to,
- 49:53for example,
- 49:54offer software where it's free or very cheap or a one-off payment if use local.
- 50:00And if you want to use the server,
- 50:02okay,
- 50:02well then it'll be a monthly fee of this or that,
- 50:05right?
- 50:05Theoretically this could be an option,
- 50:07but only with local compute in the sense of not losing money on it.
- 50:11Well,
- 50:11I think one of the big challenges is underlying operating systems are
- 50:15changing a lot faster than they were and consumers expect even free software
- 50:19to adapt to that.
- 50:20SPEAKER_1: So yes, you're right on the hosting perspective.
- 50:23Our biggest challenge is every time Apple releases a new iOS version,
- 50:26it's like one and a half months of the full engineering team just to make it
- 50:29sure it's bug free.
- 50:30And if we don't do that,
- 50:32even free customers or one-time payment customers will be very upset that
- 50:36we're not updating the software.
- 50:37SPEAKER_0: Yeah, I hear you.
- 50:39SPEAKER_0: One thing you noticed is of one thing you mentioned is local-first.
- 50:43SPEAKER_0: And now I feel this technology is making a comeback or a surge.
- 50:48SPEAKER_0: What is your honest thoughts on it?
- 50:52Does local-first actually work for these personal software categories or
- 50:58is it still in its infancy?
- 51:01Local-first is a very interesting thing because for it to make sense,
- 51:05you need to have a very high reliance on the content you have there because
- 51:09really the value of local-first is when you don't have 5G on your devices,
- 51:13you can still access that information.
- 51:16And I think local-first is now experiencing a comeback because people are
- 51:22starting to travel again when they're on their airplanes,
- 51:25they're on the tubes.
- 51:26And it gets very inconvenient when you need something badly and you don't
- 51:30have it.
- 51:31But I think it only makes sense for a very small subset of products out there.
- 51:37It's very interesting because for instance,
- 51:38Craft is local-first,
- 51:40but when adding comments,
- 51:43we could do it in a local-first manner,
- 51:45but we figured the UX would be very weird out.
- 51:47You see a content,
- 51:49you post a comment on it when you're on an airplane,
- 51:52three hours later when you land,
- 51:54the comments get added.
- 51:56But at that point there might be other comments added which make your comment
- 51:59field super weird from a social perspective.
- 52:02So I think for us it's very important because we store some of the information
- 52:07you always want to have access to independent of what that is,
- 52:11but there aren't that many software categories which actually need to
- 52:16provide that with users for.
- 52:20How opinionated is Craft,
- 52:23and in generally personal software,
- 52:27compared to because one thing that strikes me about Craft,
- 52:30I've been using it since the Alpha like this,
- 52:32the advantage of being there,
- 52:35it just feels very kind of different.
- 52:37You have these gestures,
- 52:39I don't know,
- 52:40maybe you can show some of them that it just doesn't exist.
- 52:45SPEAKER_0: You're pretty opinionated and Craft seems pretty much.
- 52:48I wonder if this is unique to Craft or do you see more startups,
- 52:55personal software potentially doing this and actually it being a good thing?
- 52:59SPEAKER_0: Is it a good thing?
- 53:00SPEAKER_0: Do people like it?
- 53:01SPEAKER_0: Because I like it, but I'm never representative of the broader audience.
- 53:07I think when it comes to personal buyers and personal software,
- 53:10it's very much around when you think,
- 53:12for instance,
- 53:12pricing.
- 53:13SPEAKER_1: So businesses are, do what they call value-based pricing.
- 53:17SPEAKER_1: They say that, "Hey, this problem costs me $1,000.
- 53:20SPEAKER_1: If you can do it for 900, it's a win for me."
- 53:23SPEAKER_1: Consumers are a lot more emotional or anchoring around this.
- 53:28SPEAKER_1: Different mental model.
- 53:29Also when looking at software they use,
- 53:32since software is now mainstream,
- 53:33it's not an early adopter phase.
- 53:35Everybody in the world or most of the population in the world uses software extensively.
- 53:41SPEAKER_1: A lot of the effect of consumerization in general, I think taking place.
- 53:46And I look a lot at inspiration of non-software categories of what that means.
- 53:52SPEAKER_1: And when you look at some of the success stories in shoes.
- 53:56I like to run so I specifically,
- 53:57I look at running shoes and there are new brands popping up and they are very
- 54:03opinionated about what they represent and what are their values.
- 54:08And because the objective performance isn't that difference between shoes
- 54:13or it's very,
- 54:13very hard to measure,
- 54:15consumers choose a lot more on which one they feel resonates with them or
- 54:20which is around them.
- 54:22SPEAKER_1: And again, software is becoming cheaper to create, right?
- 54:25SPEAKER_1: We have a small team, we can create a complex software.
- 54:27Other companies out there can do the same independent from the technology.
- 54:31SPEAKER_1: I build something in three months, anybody can probably build it.
- 54:36So it comes back to a lot around what you choose to put in front and what you
- 54:42choose to emphasize in your way of doing so.
- 54:46SPEAKER_1: With shoes that might be shapes, and forms, and colors.
- 54:49And in productivity tools it might be certain features or the way you access
- 54:53those features or the way you store your data,
- 54:55which are going to be very important for consumers.
- 54:59So I do see this thing,
- 55:00yes,
- 55:00of in personal software,
- 55:02you need to be a lot more opinionated.
- 55:04In B2B,
- 55:05think a lot less or big buyers will tell you what they need because they know
- 55:09what they need and you need to be able to fulfill that.
- 55:12That's why B2B softwares tend to become complicated because everybody
- 55:16needs something and you add 50 buttons and it keeps working because they have
- 55:20what they need.
- 55:21SPEAKER_1: In consumer I think it's personal software, it's different than that.
- 55:28What is Craft's opinionated or values or how does it come across in the app?
- 55:35You can also share if you want to,
- 55:37if you want to show some visual examples,
- 55:38because this is pretty visual as well,
- 55:40right?
- 55:41SPEAKER_1: It is visual, but you need to touch the product.
- 55:44I think this is kind of when we talk about our values,
- 55:47it's a lot about how Craft makes you feel.
- 55:50And I think all of the animation and the custom solutions all are built so we
- 55:54can fine tune how the software makes you feel.
- 55:57Because again,
- 55:58we believe a lot that the software you use every day will influence you.
- 56:04I think for this audience,
- 56:05a very good example could be,
- 56:07we're trying to build what Visual Studio Code is for engineers,
- 56:10but for knowledge workers in the sense of Visual Studio Code feels lightweight.
- 56:15After all of those super heavy IDs,
- 56:17which were non-expandable and slow and everything,
- 56:21Visual Studio Code was a fresher breath air,
- 56:23which you are just happy to be in because it's responsive,
- 56:27it's fast,
- 56:27it does everything you need integrated.
- 56:31And of course for non-technical people,
- 56:34they're slightly different angles.
- 56:35That's where animation,
- 56:36fluidness,
- 56:38visual customization makes a lot of sense.
- 56:41But that's how I could bring our type of position closer to this more
- 56:47engineering focused audience.
- 56:50SPEAKER_0: So you built Craft with a pretty small team.
- 56:54SPEAKER_0: Can you tell me how, what the size of the team is.
- 56:57And then also how many people build,
- 57:00for example,
- 57:00the iPhone,
- 57:02the Mac apps?
- 57:04SPEAKER_1: Yep.
- 57:04SPEAKER_1: So we have, our product engineering team is around 20 people.
- 57:09This includes product engineering,
- 57:10design,
- 57:11and QA,
- 57:12and we don't really have product.
- 57:14SPEAKER_1: So it's mainly design, engineering and QA.
- 57:16SPEAKER_0: Well, you are a product, no?
- 57:18SPEAKER_1: Well, kind of design.
- 57:19I think design has an overweight in product and of course I do product as well.
- 57:26SPEAKER_1: But then we have.
- 57:27SPEAKER_0: But just to confirm, you do not have a dedicated product manager role?
- 57:30SPEAKER_1: No, we do not have a dedicated product manager role, no.
- 57:33And we're split now in platform team,
- 57:36so this means we have a web team,
- 57:37a native app team,
- 57:39and a backend team.
- 57:39SPEAKER_1: And each of those teams are like three, four people.
- 57:44SPEAKER_1: That's kind of it.
- 57:46SPEAKER_1: We try to scale up but it didn't work out.
- 57:49I think one of our parts problems of scaling up is we try to be a lot more
- 57:55systematic and a lot less flexible.
- 57:58SPEAKER_1: And at the iteration speed we want to grow.
- 58:00I think our decision would have been either to grow fivefold and then we can
- 58:05reap the scalability benefits.
- 58:07But we ended up in this interim situation where we were neither flexible and
- 58:12fast enough,
- 58:13nor structured enough and it was kind of a bad place to be.
- 58:17So we find this around four up to five people platform teams,
- 58:22understand the context,
- 58:23are resilient,
- 58:24they can step in for each other,
- 58:26but can iterate very fast.
- 58:28And it also puts a constraint on us on how complicated infrastructure we are
- 58:32willing to build.
- 58:34Because of course if you build complicated stuff,
- 58:36maintaining that requires a lot of effort and we only want to do that if the
- 58:42trade-offs are very attractive.
- 58:43SPEAKER_1: Like it's something truly special that our users will really love.
- 58:49You're saying there's three or four people building the iOS app and then ...
- 58:53sorry,
- 58:54the whole code base,
- 58:55all four code bases,
- 58:57iOS,
- 58:58Mac,
- 58:58iPhone,
- 58:58and iPad.
- 58:59SPEAKER_0: And even a Vision Pro?
- 59:00SPEAKER_1: Yes.
- 59:00SPEAKER_1: Yes.
- 59:01SPEAKER_1: Yes.
- 59:01So on the native app side,
- 59:03people who are writing Swift code,
- 59:04it's only kind of three,
- 59:05four people.
- 59:07That's surprising to hear,
- 59:08but also I guess encouraging that it does work and can work.
- 59:12And you're saying that in your experience,
- 59:14the smaller team worked better than a somewhat larger team because of,
- 59:19was it communications overhead,
- 59:21iteration,
- 59:22disagreements,
- 59:23what made it more challenging?
- 59:25So what happens is when you have a team over five people,
- 59:29the communication starts to break down.
- 59:31SPEAKER_1: So then you ideally want to split it to two teams.
- 59:34And what we did at the time is we had more than five people in each platform.
- 59:39So we said,
- 59:39let's move to feature teams,
- 59:41typically,
- 59:42what companies refer to it?
- 59:44So each team has a specific goal,
- 59:45they work on a specific feature,
- 59:47they execute on that.
- 59:48But we lost those holistic capabilities of everybody having full access to a
- 59:55full code base.
- 59:56If you get what I mean,
- 59:57of what I showed,
- 59:58if you want to create a focus mode,
- 1:00:00it's super easy because you just go down to the route and change that and it works.
- 1:00:05And also these teams being not having sufficient team members from the same
- 1:00:12platform while you're working on that,
- 1:00:14slowed it down a lot.
- 1:00:16So we noticed that a fellow iOS engineer can help a fellow iOS engineer better
- 1:00:21than a fellow web engineer,
- 1:00:22backend engineer.
- 1:00:23And that is what creates these very clever solutions when multiple people
- 1:00:29from the same domain have different ideas and they do understand the
- 1:00:33business context.
- 1:00:33We're providing a lot of context and we really focus on every team fully
- 1:00:37understanding that.
- 1:00:38But then they can really understand their technological limitations and
- 1:00:42how they can come through that,
- 1:00:44which for us increases velocity a lot.
- 1:00:48And the composition of the team is mostly,
- 1:00:52so if I understand,
- 1:00:53mostly it will be of those 15-ish engineers,
- 1:00:57about four or five backend,
- 1:00:59and the rest will be mobile front-end focus.
- 1:01:03SPEAKER_1: Yes.
- 1:01:04Which is interesting because it's usually,
- 1:01:06again,
- 1:01:06for most companies,
- 1:01:09even mobile-focused companies,
- 1:01:10it's usually the other way around.
- 1:01:12SPEAKER_0: At Uber, there were more backend engineers than the mobile engineers.
- 1:01:16SPEAKER_0: So an interesting twist, but I'm glad that it's working.
- 1:01:19SPEAKER_0: It clearly is.
- 1:01:21Now,
- 1:01:21what advice would you give to front-end or mobile engineers who are really
- 1:01:25passionate about what they do?
- 1:01:26They love the craft,
- 1:01:27they love building these things,
- 1:01:29but they do feel a bit stuck both professionally,
- 1:01:33they're just not getting ahead.
- 1:01:34SPEAKER_0: The next promotion will not be them.
- 1:01:36They will unlikely to be the team lead or if they want to go into engineering leadership,
- 1:01:42it looks really hard.
- 1:01:44What could they do to be taken potentially more seriously and to be able to
- 1:01:50take this front-end and user focus into a bigger organization and to have a
- 1:01:56larger impact?
- 1:01:58SPEAKER_1: Yeah.
- 1:02:00So it's very hard for us,
- 1:02:01again,
- 1:02:02front-end engineers to talk about if I do this project,
- 1:02:04we're going to save a million dollars.
- 1:02:06SPEAKER_1: It's just not possible to articulate in that sense.
- 1:02:10SPEAKER_1: So it's a lot about how it makes people feel.
- 1:02:14Now the thing I do,
- 1:02:16I still do this as CEO today a lot is what I call building prototype apps.
- 1:02:21SPEAKER_1: And I put it in the hand of decision makers.
- 1:02:24When I was at Skyscanner,
- 1:02:25I put it in the hand of the CEO,
- 1:02:27the VP engineering and showed him of this is what we could have,
- 1:02:30touch it,
- 1:02:30feel it.
- 1:02:31SPEAKER_1: Do we want to have this and do we want to do it this way?
- 1:02:35SPEAKER_1: And then these are the costs around that.
- 1:02:37And it's of course a limited prototype,
- 1:02:38but it's good enough so they feel the value rather than just trying to
- 1:02:43objectively describe that value into that.
- 1:02:46And of course,
- 1:02:46it always helps if you have backup studies,
- 1:02:48like when you press something and it appears in 3 millisecs versus 10 millisecs,
- 1:02:52there are writings there that every millisecond that you decrease in terms
- 1:02:56of response timing increases conversion by 0.2%.
- 1:02:59SPEAKER_1: So there are these type of things as well.
- 1:03:03But I think it's because the whole,
- 1:03:05our goal is to interface with people,
- 1:03:08the only way we can explain even to very senior decision makers is so they can
- 1:03:14experience it.
- 1:03:15Usually,
- 1:03:15these senior decision makers are very good at identifying patterns and
- 1:03:19looking at what they're just going through.
- 1:03:22SPEAKER_1: That is for me, as always, of don't talk about it.
- 1:03:25SPEAKER_1: Build a small prototype and show it in the way where it's not a video.
- 1:03:29SPEAKER_1: That they can, on their own device, touch it and use it.
- 1:03:33SPEAKER_1: And you'll see a vastly different response.
- 1:03:35So I have this so often with the design team,
- 1:03:37if I mock up something,
- 1:03:39I send it to them,
- 1:03:39they're like,
- 1:03:40"Ah,
- 1:03:40no,
- 1:03:40it'snotgoingtowork."
- 1:03:41Versus I just build a small prototype,
- 1:03:43give it to them and they're like,
- 1:03:44"Oh my god,
- 1:03:44there'ssomethingspecialhere."
- 1:03:47SPEAKER_1: So that is, for me, buy-in has always been about show, not tell.
- 1:03:52SPEAKER_1: And by the way, I acquire so many interesting skills while doing so.
- 1:03:58I think,
- 1:03:58nowadays,
- 1:03:59specifically when picking up new things,
- 1:04:02AI and LLMs can speed up this exploration process a lot so I become faster in
- 1:04:07building prototypes.
- 1:04:09SPEAKER_1: And that is my number one advice actually is again, show not tell.
- 1:04:15Speaking of AI,
- 1:04:18gen AI,
- 1:04:18how do you use it and how do you think front-end engineers,
- 1:04:23mobile engineers,
- 1:04:24people building,
- 1:04:25visual stuff should use it?
- 1:04:27SPEAKER_0: Because I do hear some hesitation.
- 1:04:30SPEAKER_0: It's never going to be the Craft that I can do.
- 1:04:33SPEAKER_0: It just spits out the boilerplate like, nah, shouldn't bother.
- 1:04:37SPEAKER_0: There's some of those.
- 1:04:38Yeah,
- 1:04:39I think a lot of companies,
- 1:04:41they don't want to be the top 1% of design.
- 1:04:43SPEAKER_1: They want to be the top 25.
- 1:04:45SPEAKER_1: And I think that's where AI cogeneration is good enough.
- 1:04:49SPEAKER_1: But in the recent months, I've had some very serious breakthroughs.
- 1:04:53And I'll tell you one example is in Craft,
- 1:04:56we have this capability where the Apple Pencil,
- 1:04:58you can sketch and draw a circle,
- 1:05:01but it's not going to be a perfect circle because you're drawing by hand.
- 1:05:05And we wanted to add something called shape recognition where we can detect
- 1:05:09if it's a circle.
- 1:05:10Now,
- 1:05:11this is a quite complex problem because it essentially has three stages from
- 1:05:14the point data creating shapes,
- 1:05:16from the shape estimating what it could be,
- 1:05:20and then replacing that.
- 1:05:22SPEAKER_1: And I think the latest reasoning models are very good at that.
- 1:05:25SPEAKER_1: I know nothing about these maths.
- 1:05:27And previously,
- 1:05:28I shied away of this problem because I estimated it's one or two weeks of my
- 1:05:31time and last weekend in three hours I had an end-to-end solution.
- 1:05:38SPEAKER_1: What it gave to me was topics I don't understand about.
- 1:05:44So if I were expert in this maths field,
- 1:05:46I probably would have been able to write it in three hours myself,
- 1:05:49but I wasn't.
- 1:05:51And just being able,
- 1:05:53it not just giving me an algorithm,
- 1:05:54but I could iterate with it of saying,
- 1:05:56"Hey,
- 1:05:56this one doesn't work for the rectangle,
- 1:05:58try another algorithm,
- 1:05:59orthisoneisn'tforthetriangle."
- 1:06:01SPEAKER_0: So just to be clear, you were talking with an LLM.
- 1:06:04If you could tell us which one,
- 1:06:06on how to build this code that could do an algorithm that would roughly
- 1:06:12recognize the shape and then turn it into an actual shape?
- 1:06:15Well,
- 1:06:16so this was the new o1 model from ChatGPT and actually didn't go to that depth.
- 1:06:21I told him I'm a developer at Craft,
- 1:06:24I use PencilKit,
- 1:06:25which is the framework,
- 1:06:28and I want to do shape recognition similar to the Apple Notes app,
- 1:06:31what it does.
- 1:06:31This was the prompt I gave and it gave me a very interesting solution,
- 1:06:36which I needed to iterate on a lot like an engineering architect saying,
- 1:06:40"I like this layer,
- 1:06:41but this layer seems to fail because I've been debugging in the meanwhile" so
- 1:06:45there was a lot of thinking there.
- 1:06:47But this was the first time where I said AI helped me not just to be 20% faster,
- 1:06:52but in this problem,
- 1:06:53it made me 10 times faster.
- 1:06:56And I don't know how reproducible this will be,
- 1:06:58but for me,
- 1:06:59these are the things where...
- 1:07:00Another example is we're now playing a lot with shader codes because shader
- 1:07:05code is very mathematical,
- 1:07:07very much like assembly.
- 1:07:08It's very hard for even engineers like me to write,
- 1:07:13but AI can help us write it,
- 1:07:15which can again open up a new dimension to how we present things.
- 1:07:19And it's a lot about the capabilities I did not have before I now have access to,
- 1:07:25for me,
- 1:07:26when it comes to AI.
- 1:07:27And also,
- 1:07:27I think a lot of us in our team,
- 1:07:29our backend engineers now can create prototypes with UI,
- 1:07:32and the UI isn't that good,
- 1:07:34butit'sgoodenoughtoshowcasewhattheywanttoshowcase
- 1:07:38SPEAKER_0: And to close it off, you're still very hands on, right?
- 1:07:43SPEAKER_0: You write a lot of code.
- 1:07:47SPEAKER_1: There's two things there.
- 1:07:48One is at my time at Skyscanner where I've been at this product director
- 1:07:53leadership role,
- 1:07:55I really missed being close to what I call the metal or the product.
- 1:07:59So for me,
- 1:08:00I realized that I get a lot of intuition and positive re-encouragement from
- 1:08:07being able to do things,
- 1:08:09see a user feedback and act on it.
- 1:08:12And if I don't have this when I get too far and maybe not ready yet or not mature
- 1:08:17enough for what they call delayed gratification,
- 1:08:20I like being there.
- 1:08:21SPEAKER_1: That's one thing.
- 1:08:22SPEAKER_1: The other thing I think I am still quite good at it.
- 1:08:27So I think I have special skills,
- 1:08:28which would be very hard to acquire in the market.
- 1:08:31And for me,
- 1:08:32having that ability of being able to connect deeply product,
- 1:08:35engineering and design,
- 1:08:36because I also do a lot of design,
- 1:08:39it helps me to think through problems and work with each individual domain to
- 1:08:44steer them towards,
- 1:08:45I'd say,
- 1:08:45a more efficient or more pragmatic solution.
- 1:08:49SPEAKER_1: Finding those spots.
- 1:08:50And I'm getting a lot of criticism of as a CEO,
- 1:08:52this should not be your job.
- 1:08:54And I get for a lot of CEOs,
- 1:08:55this is not part of their job,
- 1:08:57but the team is okay.
- 1:09:00I don't know if they like or dislike,
- 1:09:01but they're okay,
- 1:09:02me working with this way and I enjoy it a lot and I feel I'm doing a lot of things
- 1:09:09that make the product better and me more satisfied.
- 1:09:13SPEAKER_0: I mean, this is the benefit of doing your company.
- 1:09:16There's a lot of risks to it,
- 1:09:17but if you're working within an existing organization,
- 1:09:23you need to take whatever their priority is and do the stuff that they're
- 1:09:28assigning you.
- 1:09:29SPEAKER_0: Obviously, there's freedom, but not always.
- 1:09:33And to wrap up,
- 1:09:34we'll do some rapid questions so I'll just shoot and then you'll answer.
- 1:09:38SPEAKER_0: What's your favorite programming language and why?
- 1:09:41SPEAKER_1: So I would say Swift, but I think it's actually Objective-C.
- 1:09:47I hate Objective-C syntax,
- 1:09:49but compilation speed for me is super important and Objective-C code just compiles.
- 1:09:56SPEAKER_0: It's a lot faster, isn't it?
- 1:09:56SPEAKER_1: Super fast so yeah.
- 1:09:58SPEAKER_0: Several times faster.
- 1:09:58SPEAKER_0: I mean the way it works, right?
- 1:09:59SPEAKER_0: There's not many type checks and all those things.
- 1:10:02SPEAKER_1: Yeah.
- 1:10:03SPEAKER_0: What is the best design tool that developers might also want to use?
- 1:10:07SPEAKER_1: I design in code so I don't use design tools at all.
- 1:10:11SPEAKER_0: You don't use design tools?
- 1:10:13SPEAKER_1: No.
- 1:10:13I use very high-level sketching,
- 1:10:16but it's really just like rectangles and things like that.
- 1:10:21I go directly to code because I think,
- 1:10:24again,
- 1:10:24we're talking about drawing rectangles and that's quite fast to type rectangles,
- 1:10:29so I do it directly in code.
- 1:10:31So for me,
- 1:10:31I really love,
- 1:10:33by the way,
- 1:10:33Tailwind CSS because that I think with Visual Studio Code and Hot Reload,
- 1:10:38that is the fastest prototyping tool I have seen.
- 1:10:42And I think,
- 1:10:43for me,
- 1:10:44it's very natural the way you can express yourself there.
- 1:10:47SPEAKER_0: That's awesome.
- 1:10:48SPEAKER_0: I didn't think of it as a prototyping tool, but I guess, yeah.
- 1:10:50SPEAKER_0: It is a really efficient way of doing stuff.
- 1:10:54SPEAKER_0: And what are one or two books that you read and would recommend?
- 1:10:58So one of the very,
- 1:11:00it's not engineering,
- 1:11:01but in some ways it is,
- 1:11:02is there's Ben Horowitz wrote this Hard Thing About Hard Things book,
- 1:11:07and it's been super interesting for me because a lot of the things,
- 1:11:12how it talks,
- 1:11:12for instance,
- 1:11:13about something called management depth,
- 1:11:15which is working with people who aren't working out and how he compares that
- 1:11:19to tech depth.
- 1:11:20So what that taught me is how my experience in engineering with coding and
- 1:11:25engineering systems can often be translated to human systems when people
- 1:11:31work together.
- 1:11:31I'm not sure if you look at that as a bad or a good thing,
- 1:11:34but it's very interesting in helping me understand of these mental models
- 1:11:39live more and traverse across your immediate domain.
- 1:11:43SPEAKER_0: Awesome.
- 1:11:44Well,
- 1:11:45thanks for sharing this less conventional way of developing software,
- 1:11:51developing opinionated software,
- 1:11:53and also showing a little bit of behind the scenes of how in the end,
- 1:11:58it's all code and reminding us engineers,
- 1:12:01especially front-end engineers,
- 1:12:02you shouldn't be afraid of it.
- 1:12:03SPEAKER_0: This is great.
- 1:12:04SPEAKER_1: Really enjoyed it.
- 1:12:05SPEAKER_1: And yes, thank you very much.
- 1:12:07SPEAKER_0: I hope you enjoyed this pretty unique episode with my brother, Balint.
- 1:12:10I'm still amazed at how small teams can get so much done and how competent
- 1:12:14teams frequently can ignore best practices like using operating system
- 1:12:17level components.
- 1:12:18You can check out Craft and connect with Balint in the links listed in the show
- 1:12:21notes below.
- 1:12:22SPEAKER_0: For related to Pragmatic Engineer deep dives, also see the show notes.
- 1:12:25If you enjoyed this podcast,
- 1:12:27please do subscribe on your favorite podcast platform and on YouTube.
- 1:12:30SPEAKER_0: This helps more people discover the podcast.
- 1:12:32SPEAKER_0: Thank you if you leave a rating.
- 1:12:34SPEAKER_0: Thanks and see you in the next one.