Tips For Technical Startup Founders | Startup School

Episode Summary

The Role of the Technical Founder - A technical founder is a partner in the startup journey, not just a developer. They lead building the product and talking to users. - In early stages, the role is like a lead developer - making all the tech choices and doing whatever it takes to get the product to work. Building in the Ideation Stage - Goal is to build a prototype quickly (days) to demo to users. - Keep the prototype simple to convey the product vision. Building the MVP - Goal is to build quickly (weeks) to get to launch. - Use clever hacks and shortcuts to launch faster. - Restrict features and scope to simplify the initial product. - Choose technologies based on your expertise and speed of iteration. Post-Launch Iteration - Goal is to iterate towards product market fit. - Use analytics and user interviews to guide iterations. - Continuously launch new features and improvements. - Balance new development with tech debt; some jankiness is okay. The role evolves after product-market fit to focus more on scaling the technology and team. But the main principles remain moving quickly and focusing on customer needs.

Episode Show Notes

YC Group Partner Diana Hu was the CTO of her YC startup Escher Reality, which was acquired by Niantic (makers of Pokemon Go). She shares her advice for being a technical founder at the earliest stages - including topics like how to ship an MVP fast, how to deal with technology choices and technical debt, and how and when to hire an engineering team.


Apply to Y Combinator: https://yc.link/SUS-apply Work at a startup: https://yc.link/SUS-jobs

Episode Transcript

SPEAKER_00: Welcome everyone to how to build and succeed as a technical founder for the startup school talk. Quick intro, I'm Diana Hu. I'm currently a group partner at YC. And previously, I was a co-founder and CTO for Azure Reality, which was a startup building augmented reality SDK for game developers. And we eventually had an exit and sold to Niantic, where I was the director of engineering and heading up all of the AR platform there. So I know a few things about building something from, well it's just an idea, to then a prototype, to launching an MVP, which is like a bit duct tape-y, to then scaling it and getting to product market fit and scaling systems to millions of users. So what are we going to cover in this talk is three stages. First is what is the role of the technical founder and who are they? Number two, how do you build in each of the different stages where all of you are in startup school? Ideating, which is just an idea, you're just getting started. Building an MVP once you got some validation and getting it to launch, and then launch, where you want to iterate towards product market fit. And then I'll have a small section on how the role of the technical founder evolves post product market fit. I won't cover it too much because a lot of you in startup school are mostly in this earlier stage. And I'm excited to give this talk because I compiled it from many conversations and chats with many YC technical founders, like from Algolia, segment, Optimously, Wayapp. So I'm excited for all of their inputs and examples in here. All right, the technical founder, sometimes I hear non-technical founders say, I need somebody to build my app. So that isn't going to cut it. A technical founder is a partner in this whole journey of a startup, and it requires really intense level of commitment. And you're just a dev. What does a technical founder do? They lead a lot of the building of the product, of course, and also talking with users. And sometimes I get the question of who is the CEO or CTO for a technical founder? And this is a nuanced answer. It really depends on the type of product, the industry you're in, the complete scale composition of the team to figure out who the CEO or CTO is. And I've seen technical founders be the CEO, the CTO, or various other roles. And what does the role of the technical founder look like in the early stages? It looks a lot like being a lead developer. Like if you've been a lead developer at a company, you were in charge of putting the project together and building it and getting it out to the finish line. Or if you're contributing to an open source project and you're the main developer, you make all the tech choices. But there's some key differences from being a lead developer. You've got to do all the tech things. Like if you're doing software, you're going to have to do the front end, the back end, DevOps, the website, the UX, even IT to provision the Google accounts, anything. If you're building hardware and maybe you're just familiar with electrical and working with EagleCAD, you'll have to get familiar with the mechanical too. And you'll, of course, as part of doing all the tech things, you'll have to talk with users to really get those insights to iterate. And you're going to have a bias towards building a good enough versus the perfect architecture. Because if you worked at a big company, you might have been rewarded for the perfect architecture, but not for a startup. You're going to have bias towards action and moving quickly and actually deciding with a lot of incomplete information. You're going to get comfortable with technical debt, inefficient processes, and a lot of ugly code, and basically lots of chaos. And all of this is to say is the technical founder is committed to the success of your company. And that means doing whatever it takes to get it to work. And it's not going to cut it. If you're an employee at a company, I sometimes hear, oh, this task or this thing is not in my pay grade. No, that's not going to cut it here. You got to do it. This next section on how to build. The first stage is the ideating stage where you just have an idea of what you want to build. And the goal here is to build a prototype as soon as possible with the singular focus to build something to show and demo to users. And it doesn't even have to work fully. In parallel, your CEO, co-founder will be finding a list of users in these next couple of days to TIA meetings to show the prototype when it's ready. So the principle here is to build very quickly in a matter of days. And sometimes I hear it's like, oh, Diana, a day prototype. That seems impossible. How do you do it? And one way of doing it is building on top of a lot of prototyping software and you keep it super, super simple. So for example, if you're a software company, you will build a clickable prototype, perhaps using something like Figma or Envision. If you're a DevTools company, you may just have a script that you wrote in an afternoon and just launch it on the terminal. If you're a hardware company or hard tech, it is possible to build a prototype. Maybe it takes you a little bit longer, but the key here is 3D renderings to really show you the promise of what the product is. And the example I have here is a company called Remora that is helping trucks capture carbon with this attachment. And that example of that rendering was enough to get their users excited about their product, even though it's hard tech. So I'll give you a couple of examples of prototypes in the early days. This company optimisely went through YC on winter 10, and they put this prototype literally in a couple of days. And the reason why is that they had applied with YC with a very different idea. They started with a Twitter referral widget, and that idea didn't work. And they quickly found out why. So they strapped together very quickly this prototype, and it was because the founders peed and Dan. And Dan was actually heading analytics for the Obama campaign. And he recalled that he was called to optimise one of the funding pages and thought, huh, this could be a startup. So they put it very quickly together, and it was the first visual editor by creating an A-B test that was just a JavaScript file that lived on S3. I literally just opened option command J if you're in Chrome, and they literally run manually the A-B test there, and it would work. Of course, nobody could use it except the founders, but it was enough to show it to marketers who were the target users to optimise sites to get the user excited. So this was built in just a few days. Another example is my startup, Azure Reality. Since we're building more harder tech, we had to get computer vision algorithms running on phones, and we got that done in a few weeks. That was a lot easier to show a demo of what AR is, as you saw on the video, than just explaining and hand-waving, and made selling and explaining so much easier. Now, what are some common mistakes on prototypes? You don't want to overbuild at this stage. I've seen people have this bias, and they tell me, hey, Diana, but users don't see it, or it's not good enough, this prototype doesn't show the whole vision. This is a mistake when founders think you need a full MVP on the stage, and not really. The other mistake is obviously not talking or listening to users soon enough. You're going to get uncomfortable and show this kind of prototypey, duct-typey thing that you just slapped together, and that's okay. You're going to get feedback. The other one at this stage, as an example for Optimisely, when founders get too attached to the idea, when the feedback from users is somewhat obvious that it's not quite there, not something that users want, and it's not letting go of bad ideas. Okay, so now into the next section. Imagine you have this prototype, you talk to people, and there's enough interest. Then you move on to the next stage of actually building an MVP that works to get it to launch. The goal is basically build it to launch, and it should be done also very quickly, ideally in a matter of can be done a few days to weeks or sometimes months, but ideally more in the weeks range for most software companies. Again, exceptions to hardware and deep tech companies. The goal here at this stage is to build something that you will get commitment from users to use your product, and ideally what that commitment looks like is getting them to pay. The reason why you have a prototype is while you're building this, your co-founder or CEO could be talking to users and showing the prototype and even getting commitments to use it once it's ready to launch. I'm going to do a bit of a a bit of a diversion here because sometimes founders get excited. It's like, oh, I show this prototype, people are excited, and there's so much to build. Is hiring a good idea? The first is thing is like, okay, I got this prototype, got people excited, I'm going to hire people to help me to build it. As a first time founder, it's like, oh my god, oh my god, there's a fit, people want it. Is it a good idea? It really depends. It's going to actually slow you down in terms of launching quickly because if you're hiring from a pool of people and engineers that you don't know, it takes over a month or more to find someone good. And it's hard to find people at this stage where it's very nebulous and chaotic, so it's going to make you move slowly. And the other more insidious thing is going to make you not develop some of the insights about your product because your product will evolve if someone else in your team is building that and not the founders. You're going to miss that key learning about your tech that could have a gold nugget but it was not built by you. I mean, there's exceptions to this. I think you can hire a bit later when you have things more built out, but at this stage it's still difficult. So I'll give you an example here. Justin TV and Twitch, it was just the four founders and three very good technical founders. At the beginning for the MVP, it was just the founders building software as software engineers. And the magic was Justin, Emmet, and Kyle building different parts of the system. You had Kyle who became an awesome, fearless engineer tackling the hard problems of video streaming. And then Emmet doing all the database work, Justin with the web, and that was enough to get it to launch. I mean, I'll give you an exception. After they launched, they did hire good engineers, but the key thing about this, they were very good at not caring about the resume. They tried to really find the misfits and engineers that Google overlooked, and those turned out to be amazing. So Ammon and Gilem were very comfortable and awesome engineers, and they took on a lot of the video web in just three months since joining. You want people like that that can just take off and run. All right, so now going back into the principles for building towards your MVP, principle one is the classic Paul Graham essay on do things that don't scale. Basically find clever hacks to launch quickly in the spirit of doing things that don't scale. And the trick posting edition of this, avoid things like automatic self-onboarding because that adds a lot of engineering. Building a scalable backend, automated scripts, those sounds great at some point, but not the stage. And the hack perhaps could be manually onboarding. You're literally editing the database and adding the users or the entries and the data. On the other counter to your thing is insane custom support. It's just you, the founders at the frontline doing the work. Doing things that don't scale, a classic sample is with Stripe. This is the site when they launched, very simple. They had the API for developers to send payments, but on the backend, the thing that did not scale, it was literally the founders processing every manual request and filling bank forms to process the payments at the beginning. And that was good enough to get them to launch sooner. Now, principle number two, this is famous create 90 10 solution that was coined by Paul Buckeye, who was one of the group partners here at YC and original inventor of Gmail. The first version is not going to be the final remember, and it will very likely a lot of the code be rewritten and that's okay. Push off as many features to post launch. And by launching quickly, I created 90 10 solution. I don't mean creating bugs. You still want it good enough, but you want to restrict the product to work on limited dimensions, which could be like situations, type of data you handle, functionality, type of users you support, could be the type of data, the type number of devices, or it could be geo. Find a way to slice the problem to simplify it. And this can be your secret super powers to startup at the beginning because you can move a lot quickly. And large companies can't afford to do this. Or even if your startup gets big, you have lawyers and finance teams and sales team that make you kind of just move slow. So I'll give you a couple of examples here. DoorDash, at the beginning, they slapped it in one afternoon and they were actually called Palo Alto delivery. And they took PDFs from menus and literally put their phone number. That phone number there is actually from one of the founders. And the site is not dynamic, static. It's literally just plain HTML and CSS and PDF. That was their front end. They didn't bother with building a backend. The backend quote unquote was literally just Google Forms and Google Docs where they coordinated all the orders. And they didn't even build anything to track all the drivers or ETA. They did that with using fancy on your iPhone. Find my friends to track where each of the deliveries were. That was enough. So this was put together literally in one afternoon and they were able to launch. The very genius thing they did is that because they were Stanford students, they constrain it to work only on Palo Alto. And counterintuitively, by focusing on Palo Alto and getting that right as they grew, it got them to focus and get delivery and unit economics right in the suburbs right at the beginning so that they could scale that and get that right versus the competition which was focusing on metro cities like Grubhub which made them, now you saw how the story played out, the unit economics and the ops was much harder and didn't get it right. So funny thing about focusing at the beginning and getting those right can get you to focus and do things right that later on can serve you well. So now at this stage, how do you choose a tech stack? So one thing is to balance what makes sense for your product and your personal expertise to ship as quickly as you can. Keep it simple. Don't just choose a cool new programming language just to learn it for your startup. Choose what you're dangerous enough and comfortable to launch quickly. Which brings me to the next principle. Choose the tech for iteration speed. I mean now, and the other thing is also, it's very easy to build MVPs very quickly by using third-party frameworks and API tools and you don't need to do a lot of those work. For example, authentication, you have things like Auth0, payments, you have Stripe, cross-platform support and rendering, you have things like React Native. Cloud infrastructure, you have AWS, GCP, landing pages, you have Webflow, backend, serverless, you have Lambdas or Firebase or hosted database. In the past, startups would run out of money before even launching because they had to build everything from scratch and ship for metal. Don't just try to be the kind of like cool engineer just build things from scratch. No, just use all these frameworks. But I know CTOs tell me, oh, it's too expensive to use this third-party APIs or it's too slow, it doesn't scale to use XYZ. So what I'm going to say to this, I mean, there's two sides of the story with using third-party. I mean to move quickly, but it doesn't mean this. This is a great meme that Sean Wang, who's the head of developer experience at Airbyte posted. The funny thing about it is you have at the beginning core tile kind of the noob that just learn PHP or just JavaScript and just kind of use it to build the toy car. Serious engineers make fun of the noob because oh, PHP language doesn't scale or JavaScript and all these things. It's like oh, PHP is not a good language, blah, blah, blah. And then the middle or average or mid-width engineers like, okay, I'm going to put my big engineer pants and do what Google would do and build something optimal and scalable and use something for the back end like Kafka, Linker, Rust, MA, Prometheus, Kubernetes, Envoy, Big Red or hundreds of microservices, okay? That's the average technical founder. The average startup dies. So that's not a good outcome. Now the funny thing, you got the Jedi Master and when you squint, their solutions look the same like the noob one. They chose also PHP and JavaScript, but they choose it for different reasons, not because they just learned it, but they recognize this is because they can move a lot quicker. And what I'm going to emphasize here is that if you build a company and it works and you get users good enough, the tech choices don't matter as much. You can solve your way out of it. Like Facebook famously was built on PHP because Mark was very familiar with that. And of course, PHP doesn't quite scale or is very performant. But if you're Facebook and you get to that scale of the number of users they got, you can solve your way out. And that's when they built a custom transpiler called Hip Hop to make PHP compounds C++ so that it would optimize. See? So that was just Jedi move. Even for JavaScript, there's a V8 engine, which makes it pretty performant. So I think it's fine. WayUp was a 2015 company at YC that helps companies hire diverse companies and is a job board for college students. So JJ, the CTO, although he didn't formally study computer science or engineering at UPenn, he did taught himself how to program and freelance for a couple years before he started WayUp. And JJ chose, again, as a Jedi master, chose technology for iteration speed. He chose Django and Python, although a lot of other peers were telling him to go and use Ruby and Rails. And I think in 2015, Ruby and Rails were 10 times more popular by Google Trends. And that was fine. That didn't kill the company at all. I mean, that was the right choice for them, because he could move and get this move quickly and get this out of the door very quickly. And kept it simple in the back end, Postgres, Python, Heroku, and that worked out well for them. Now I'm going to summarize here. The only tech choices that matter are the ones tied to your customer promises. For example, at Escher, we in fact, rewrote and threw away a lot of the code multiple times as we scale in different stages of our tech. But the promise that we maintained to our customers was at the API level in Unity and game engines. And that's the thing that we cannot throw away. But everything else, we rewrote, and that's fine. All right, now we're going to go part three. So you have the MVP, you built it and launched it. Now you launched it. So what happens in this stage? Your goal here in the launch stage is to iterate to get towards product market fit. So principle number one is to quickly iterate with hard and soft data. Use hard data as a tech founder to make sure you have set up a dashboard with analytics that tracks your main KPI. And again, here choose technology for your analytics stack for speed. Keep it super simple. Something like Google Analytics, Amplitude, Mixpanel. And don't go overboard with something super complex like Logstash, Prometheus. These are great for large companies, but not at your stage. You don't have that load. Again, use soft data, but keep talking to users after you launch. And marry these two to know why users stay or churn. And ask to figure out what new problems your users have to iterate and build. WePay, another YC company, when they launched, they were a B2C payments product, kind of a little bit like Venmo-ish. But the thing is that it never really took off. They iterated. So in terms of analytics, they saw some of the features that were launching, like messaging. Nobody cared, nobody used. And they found out in terms of a lot of the payments, their biggest user was GoFundMe back then. They also talked to users. They talked to GoFundMe, who didn't care for any of this B2C UI stuff. They just cared to get the payments. And then they discovered a better opportunity to be an API and basically pivoted it into it. And they got the first version and again, applying the principles that didn't scale. They didn't even have technical docs and they worked with GoFundMe to get this version. And this API version was the one that actually took off and got them to product market fit. Principle number two in this launch stage is to continuously launch. Perfect example of this is Segment, who started as a very different product. They were classroom analytics. Similar story. They struggled with this first idea. It didn't really work out until they launch a stripped out version of just their backend, which was actually Segment and see the impressive number of launches they did. Their very first launch was back in December 2012. That was their very first post. And you saw the engagement in Hacker News very high. That was a bit of a hint of a product market fit. And they got excited and they pivoted into this and kept launching every week. They had a total of five launches in a span of a month or so. And they kept adding features and iterating. They added support for more things. When they launched, it only supported Google Analytics, Mixpanel and Intercom. And by listening to the users, they added Node, PHP support and WordPress, and it kept on going. And it took them to be then a unicorn that eventually had an exit to Twilio for over $3 billion. Pretty impressive, too. Now, the last principle here, what I want to say for when you launch, there's this funny state where you have tech built. You want to balance building versus fixing. You want to make thoughtful choices between fixing bugs or adding new features or addressing technical debt. And what I want to say, tech debt is totally fine. You're going to get comfortable a little bit with the heat of your tech burning. Totally OK. You're going to fear the right things. And that is towards getting you product market fit. Sometimes that tiny bug and rendering maybe is not critical for you at this point to fix. In fact, a lot of early products are very broken. You're probably very familiar with Pokemon Go when it launched in 2016. Nobody could log into the game. And guess what? That did not kill the company at all. In fact, to this day, Pokemon, I think last year, made over a billion dollars in revenue. That did not kill them. And I'll give a little background what was happening with the tech. It was very straightforward. They had a load balancer that was on Google Cloud. And they had a backend. And they had a TCP termination and HTTP requests that were done with their NGINX to route to the different servers that were the AFE, the application front end, to manage all the requests. And the issue with there was that as users were connected, they didn't get terminated until they got to the NGINX. And then as a result, client also had retries. And that what happened when you had such a huge load that in fact, I think Pokemon Go by the first month after launching, they had the same number of active as Twitter, which took them 10 years to get there. And they got there in one month. Of course, things would break. It was basically a lot of users trying to log in was creating a bit of DDoS attack. Now to summarize a bit on when you launch, some of the common mistakes after launching and I myself has made CTO Doge sad. It is tempting to build and say, what would Google do that's almost certainly a trap with trying to build like a big company or hiring to try to move quickly. Sometimes I think this is more of a nuanced question, can be a mistake. Or the other thing is focusing too much on fixing, refactoring, and not building features towards iterating to product market fit, not discovering insights from users. Sometimes I see CTOs like, okay, we launch, I get to conquer down and just get into building. Totally no. Again, your role as a technical founder, very different. You got to be involved in the journey and really understand the insights of why users stay or leave your products. You have to keep talking to them. And the other mistake I see is like, oh, we're just building features for the product. But you also need to build tech to grow. In fact, some of the best growth hacks where engineers paired up with sales and growth folks who are non-technical. So now the last section on how the role evolves. So assuming you got product market fit, what happens? This is this point where you could actually then put on your big engineering pants and figure out pieces of the tech that need to be built to scale. You need to, and the tech will break, which is actually a good thing, breaking because of too much demand. And that's totally okay. That's my example from Pokemon Go. You'll find the pieces that need to be reworked, refactored. This is when you do it, not before now, not before product market fit. And you'll decide also what the engineering culture will look like. And this is a stage where you actually do more of the hiring. And here you're probably going to evolve from leading a small team of engineers to hiring. And your first hires are going to be people that you know. And at this point, your role really changes because you'll start having communication overhead. And this is when you realize your role morphs. Between two to five, you still get time to code about 70%. When you get to five to 10, you only have less than 50%. And beyond 10, you probably won't really have time to code and have to decide how to structure things and whether you're going to remain as a architect type of role, or you want to be more of a people role and be more of a VP of Edge. Now to summarize, here the talk. First stage, ideating. The goal is to build a prototype as soon as possible. And the principle is build very quickly in a matter of days. Stage two, you're in the process of building an MVP, which I think a lot of you are in this or the previous one. The goal is to build as quickly to launch in a matter of few weeks. And the principles are do things that don't scale, create a 90-10 solution, choose the tech for iteration speed. And the last one is once you launch, all of the previous ideas on 90-10 solution, do things that don't scale, still apply and add these onto it. And the goal is to get an iteration towards product market fit. So you're going to also quickly iterate with hard and soft data with analytics and user interviews. You're going to continuously launch, and you're going to find the fine balance between building and fixing and where tech debt is totally fine. Feel the heat for that tech debt is totally fine. And if there's only one takeaway from this whole talk is that startups move quickly. So thank you, everyone.