CoRecursive: Coding Stories - Tech Talk: Tech Evangelism and Open source With Gabriel Gonzalez

Episode Date: November 1, 2019

What makes some pieces of technology take off? Why is java popular and not small talk or Haskell. Gabe is a popular blogger, a former Haskell cheerleader, and creator of the Dhal configuration languag...e. Today we talk about marketing and tech evangelism. "One common mistake I see a lot of new open source developers make is they tried to build what I call the hype train. Where they have started a new project that has a lot of poTech Evangelism with Gabriel Gonzalez tential and they advertise on hacker news hoping that, okay, we're gonna generate a lot of hype, maybe get a lot of influx of new contributors, new contributes, new features, generate more hype and so forth." "They hope that there'll be that virtuous cycle that will get them to the mainstream in practice, that never happens. Usually, the thing about contributors is that their needs are always going to be fragmented, right? If you have eight new contributors, they're going to be taking you in eight different directions. You should focus on one direction and sometimes that means not only doing a lot of work yourself, but it's explicitly saying no to something and saying this is not where I want to take the product right now." Links: Crossing the Chasm Dhall Lang Adam's SE Radio Interview with Gabe Haskell For All - Gabe's Blog

Transcript
Discussion (0)
Starting point is 00:00:00 One common mistake I see a lot of new open source developers make is they try to build what I call the hype train, where they advertise on Hacker News hoping that, okay, we're going to generate a lot of hype, maybe get a lot of influx of new contributors. In practice, that never happens. Hello, this is Adam Gordon-Bell. Join me as I learn about building software. This is Code Recursive. That was Gabriel Gonzalez. Gabe is a popular blogger, creator of the Pipes Library for Haskell. He also created DALL, which is super interesting for 10 programming language type reasons and probably, you know, just as many ops, dev ops type reasons. Check out my software engineering radio interview with Gabe to learn more about that. We spent a long time discussing some of the interesting aspects of DAO. But that is not what I'm talking to him about today. Today, we are talking
Starting point is 00:00:54 about marketing. How do you market a programming language? What makes an open source project succeed? How do you become a tech evangelist in your company? Why is Kotlin finding more mainstream success than Scala? What else? And we also talked about why does the Hacker News hype train fail to lead to adoption of a library or technology? And stay tuned to the end. I have some more thoughts about this. Super interesting talk.
Starting point is 00:01:18 I hope you enjoy it. Gabe, thanks so much for coming on the podcast. This is actually our second interview. So I talked to you on SE Radio about Dahl. That was a lot of fun. But you mentioned in that talk some stuff about evangelizing for technology. So this is like my problem statement. You don't have to answer it immediately.
Starting point is 00:01:42 But let's say that I or a listener is really keen on some library or language that's maybe a bit French. I'm hoping that today you can tell me how that I might like advocate for it. So when did you first try to advocate for technology? So this for me, it started way back when I fell in love with Haskell. I was a PhD student at the time. And I found out Haskell. I learned more about it. And I was super into it.
Starting point is 00:02:14 I felt the need to tell the whole rest of the world that they need to be using Haskell. And so that's where I started learning a little bit about technology, evangel difficulties, and convincing other people to adopt technology. It's far harder than you think. There are a lot of things that I wish I had known back then that I know now that would have made it a lot easier. It seems like everybody who learns Haskell maybe goes into this mode. Maybe that's just my...
Starting point is 00:02:39 That's correct. What was your pitch for using Haskell? I don't exactly remember what was the pitch I used back then, but I think it was like a combination of it's really lightweight. Like, you know, you don't, you have type inference. You don't, it's not like heavyweight, like Java. So it's still type, but you don't have to pay the freight. It's very like good data structures.
Starting point is 00:03:00 Good for data science, for example, easy to transform things, especially in memory and stuff. Because for me, I was coming from a background of a phd student that was exactly what i needed i needed to be able to like quickly change my mind because my advisor kept changing his mind about where he wanted the project to go so i want something like very refactor friendly easy to maintain good data structures good collections and so forth and you're probably already thinking like yeah that's kind of like a really long-winded elevator pitch right there already right yeah at that time i didn't really know what other people were looking for a language and how to frame it in frame it to appeal to them i was just thinking about it in terms of like what i needed out of the language so this was at twitter right no this is
Starting point is 00:03:39 like before even twitter i mean sorry okay so like this is back when i was a phd student i was already doing like blogging and trying to get people to use Haskell. But I did actually try to do evangelism when I was at Twitter to try and get them to use Haskell as well. And had you like perfected your let's use Haskell pitch by that point?
Starting point is 00:03:57 No, not at all. But so while I did not convince them to use Haskell, I learned much more about like, what is the mindset of the mainstream programmer and what they're looking for in a technology. For example, if you said something like, Haskell is very terse and point-free and elegant, those are all very negative things from their point of view. The things that actually would resonate much more with them, you didn't convince them in
Starting point is 00:04:22 the end, but the things that had more of an impact with things like it's stable, low maintenance, low total cost of ownership, won't get paged on weekends or late nights for Haskell service breaking, things like that. That's what really warms their heart when they're looking, at least for the niche that Haskell occupies. Interesting.
Starting point is 00:04:41 So yeah, I can see the pager one, especially being useful. We check the stuff at compile time, so we're not going to have something blow up in production. So did those arguments resonate? about like twitter is the largest scholar company in the world right so they got a huge scholar code base the marginal improvement from switching to from scala to haskell is small enough that you can't really justify the switching costs for example and you actually find that like usually where haskell takes root is in displacing a much more terrible language than like skull is actually pretty good you know i have some comparisons of the scholar but like as far as languages go it's pretty high up there if now if you're trying to make the case this place say you know php right then i was like oh yes let's please i'll take anything else right whatever and that way just like whatever language comes up next they'll they'll be fine that is not what i would have
Starting point is 00:05:41 expected because like yeah you're like oh scala has some of these things that Haskell has. So you think it's a smaller jump to Haskell. Like the convincing should be easier, I would think. But you're saying, no, it's actually, there's just not enough difference to matter. Well, you have to think about in terms of that, what is the niche you're trying to occupy? And is that niche well served? So in this case, the niche, at least for Twitter and more generally, for both Scala and Haskell is, you know, backend web service. And Scala was already doing a pretty
Starting point is 00:06:09 good job. So you really, when you're trying to get a technology adopted, you want to target a use case that is really poorly served by like the existing set of mainstream technologies. For example, like for backend web services, like it's kind of okay to use Scala, right? There's already like, you know, a mature ecosystem there. So it's like, what's, you know, people aren't going to change unless they really have to. And I mentioned to you in the previous podcast, the book Crossing the Chasm, which talks about how you make things appeal to mainstream programmers. And one thing you learn from that book is that, you know, mainstream programmers, they're like a herd, right? Nobody wants to be the one that sticks their neck out. So if you want them to get them to try something new and to deviate from the herd,
Starting point is 00:06:55 you need to basically make it so that they have to, right? There needs to be some huge tire fire, they need to be hemorrhaging time or money in some way that they don't even have a choice except to adopt this technology. Heather, she was describing how Scala as like a bunch of penguins who like go up to the water, but they're all afraid to go in because there could be some sort of prey. And then like Twitter fell in and started using the language. And then once they did, then like other penguins weren't afraid to get in. Yes. In fact, the book actually talks about this phenomenon, which is that one of the most successful strategies for getting technology to transition from early adopters to mainstream programmers is you have to target a really narrow mainstream use case. Because the thing about early adopters and mainstream programmers is that they don't
Starting point is 00:07:43 really overlap, right? So like early adopters do not make good references for mainstream programmers. I described the example, you know, trying to convince a mainstream programmer, the language early adopters use to sell things is totally different from the language mainstream adopters use to sell each other on technologies. So early adopters are all about, they're visionaries, right? About revolutionary changes that will transform things. Mainstream programmers are not, right? You know, they're evolutionary and they just have a different set of values.
Starting point is 00:08:13 And so that makes it hard, right? Because you actually like, you know, a lot of new technologies kind of get stuck in the early adopter phase. Haskell is the perfect example of that because they haven't really penetrated the mainstream market. But the thing is, once you make that initial mainstream use case, then it starts to spread. Because mainstream programmers make very good references for other mainstream programmers.
Starting point is 00:08:30 It's just like finding that beachhead where you can get some mainstream use case and then grow from there. It's a strange idea. It makes sense, but when I think about a programming language, oftentimes they're Turing complete. They can do everything, right? So like picking a specific area seems like a strange choice. It seems like narrowing your possible audience, right? Yes. So this is the general purpose programming language
Starting point is 00:08:57 fallacy that I find a lot of new programming languages run into. Haskell made this mistake all the time where people say like, what do I use Haskell for? And Haskell programmers will say, it's a general purpose programming language. You can use it for anything, right? And that's not really going to fly. The reason it's not going to fly is that mainstream programmers do not adopt something that is 80% complete, right? They want to adopt something that is a fully featured product. So, for example, like Java, right? They adopt Java because they know there's not going to be some missing functionality that's going to block them at an unexpected time. They're not going to have to worry about maybe the runtime or set of available libraries
Starting point is 00:09:36 or weird issues. They assume that's already been worked out by this point. Compared with Haskell, people are a little bit scared because they think, you know, am I going to have to do a little bit of extra work to get this going? And it may depend. Maybe the maturity of the ecosystem might vary from application domain to application domain. So it's not enough to say that it's a general programming language.
Starting point is 00:09:57 It needs to be very well-developed for the use case that they have in mind because they don't want to invest the work to make it usable. They just want to adopt it. So all technologies have this awkward period where they're trying to at least satisfy this one vertical so they can get that mainstream edge. And then once they satisfy the vertical, they can slowly spread horizontally and actually become a general transformational platform. So you mentioned crossing the chasm. I know this book mainly just from this like diagram. It's like a bell curve. And then it has like the very left,
Starting point is 00:10:31 most part of the bell curve is like says early adopters. And then like the middle is like mainstream. And then I don't know, there's some third part, but like, how do you know where you are? Let's say if I'm a big evangelist for Rust, it seems to be growing in popularity. How does Rust know where they are on this chart? So the thing about mainstream programmers, and this is to answer your question, mainstream programmers, once they adopt a technology, they make the choice to adopt,
Starting point is 00:11:00 they become very loyal supporters. So they're hard to win over but once you get their support they will do everything in their power to make you like the standard way of doing things because they really love standardization so like a perfect example would be like you know you got this big tech company you know they're considering whether or not to use let's say go right and like once they're convinced but to use go then it's in their best interest to get the whole company just to just like let's we're going to make the switch everybody's going to be using go right they don't want fragmentation they just want one approved mainstream standard way of doing things so that's how you know when you've crossed the chasm and you enter the mainstream market is you start seeing mainstream programmers doing everything they can to standardize on your technology.
Starting point is 00:11:45 So like adding, making officially support integrations. You asked about Rust specifically. I would say Rust is already penetrating the mainstream. A good example of this would be when Amazon, I think Amazon like added official Rust support to one of their SDKs.
Starting point is 00:12:00 I forgot. Maybe it was like for the Lambdas or something like that. So when you see like big tech companies offering official support for your language, that's how you know you're mainstream. Again, those are the mainstream programmers trying to standardize on your platform. Like you won't
Starting point is 00:12:13 see that in Haskell. Like Haskell, we always have every time a new platform comes out, the Haskell community has to like do the third party bindings to whatever that platform or SDKs because they don't have the support of the mainstream programmers to do it for them. Oh, yeah. Like even silly things like the whatever Gmail API,
Starting point is 00:12:31 it might have code examples for Go and Rust and Java and Python, but Haskell's not there. Yes. So mainstream programmers, they like there to be order. They hate chaos. They hate fragmentation. They want there to be a clear winner for any given niche or market or application. Like I said, once you win them over, they really want to defend your advantage against the newcomers. There's always like for any new market or
Starting point is 00:12:56 application, there's always like this weird point where like it's not really well defined, like what the market even is, right? Sometimes you just have to convince them that this is actually its own new application that is a mainstream use case in the first place and then once you convince them then it's like okay now we're convinced that this is a problem that we need to solve then you need to also convince them we're the best solution in this category we're way better than all the other alternatives and once you convince them that they'll say like okay we will defend you as the leader because we want there to be a leader and only one in this category. We don't want to have to switch for a very long time.
Starting point is 00:13:30 So we're going to protect you from any newcomer technology by like, whether that means like adding integrations, adding SDKs, defending you on social media or Reddit or Hacker News, anything to protect your position of dominance as much as possible. That's interesting and i assume like that means the early adopters the people who are actually if you haven't become this popular the people who you actually have in your community i think the thing you're implying is like they're flighty and can't be trusted because they're on to the next new shiny thing yeah i mean that would describe the early adopters, right? So that is exactly
Starting point is 00:14:05 the personality of early adopters, which is that like, they see the potential, right? But they're not loyal to technology. They just want to, and that's actually
Starting point is 00:14:13 one of the reasons why mainstream programmers really don't like early adopters because like mainstream programmers like are very loyal by nature. They're the ones
Starting point is 00:14:20 that are entrusted with like committing, maintaining systems long term, you know, building a career for a specific vertical. Earlyters are not like they're just moving kind of like locusts from one technology to the next looking for the next revolutionary advantage that i mean i'm sure early adopters like either but they do in a positive way but like that's the way that
Starting point is 00:14:37 mainstream point of view early adopters it's like they're just they don't have any long-term loyalties or careers so they can't be. They're not dependable in any way. That's funny. Yeah. I mean, early adopters, going back to that diagram, the bell curve, early adopters do play a important part in that lifecycle, right? They prove that the technology can be used for a use case, right? It's not like paperware, right?
Starting point is 00:15:00 At that point, there still is potentially a lot more work that needs to be done before it's really a polished use case for the mainstream. And they can also not only provide the proof of value, but they can also help provide resources. One thing that's important to keep in mind is the book was actually written for startups. The book was not an open source technology evangelism handbook, but rather a startup handbook. But a lot of the advice from that book is actually useful for open source tech evangelism too. And specifically for startups,
Starting point is 00:15:30 early adopters can provide initial source of like seed funding. Like there's sort of like a hidden source of venture capital to use the book's own words. So they can keep a technology going, at least to be able to develop the product until it can finally have enough resources to build out that polished mainstream use case. But at some point you have to wean yourself off of early adopters and make build out that polished mainstream use case.
Starting point is 00:15:45 But at some point, you have to wean yourself off of early adopters and make that jump to the mainstream use case. So I read the book like so, so long ago, and I never had this perspective on tech evangelism, but it's called Crossing the Chasm because like nobody makes it across, I guess. Yeah, it's very difficult to do.
Starting point is 00:16:02 And part of what makes it difficult is that you don't really have a lot of data to make that decision. Because remember, you've only had a few early adopters, right? You see like, okay, Adopter 1 is using it for this use case. Adopter 2 is using it for this use case. Adopter 3 is using it for this other use case. And the book says, you don't want to play the field. You've got to pick one use case and really focus on it.
Starting point is 00:16:24 Otherwise, you're not going to have the resources to build out that polished like i said if you have three 80 use cases nobody in the mainstream is going to adopt it but if you have one 100 polished use case then you're going to get traction in the mainstream and it's really hard to figure out which one you focus on because you don't really know which one of those is really going to be the killer app. Let's posit examples around this to maybe make a bit more sense. So like, I don't know a ton about Rust, but I've done a couple interviews. And I think that Jim Blandy, when I talked to him is in the earlier days of Rust, he was kind of like, this is just better C++. So C++ has a lot of things, it's complex complex and here's something better is that what you're talking about is that like a beachhead is that a specific use case yes so the way you identify
Starting point is 00:17:11 a really good beachhead is four things so one is that you need to identify a compelling reason to buy so going to rust that would be no memory safety issues right like we're getting a growing number of cVEs every single year, and the safety of C is really rapidly being called into question. So people are very keen to replace C with a safe alternative, but garbage-collected languages are not an option
Starting point is 00:17:35 for the user. They don't want to use Java. They want to do low-level stuff, maybe embedded programming or high-performance programming or low latency. Maybe they don't want GC pods for their server. So that's the compelling reason to buy. You're drowning in segmentation faults and other attacks, and you're just
Starting point is 00:17:54 looking for a better solution. Second thing you need is what's called the whole product. So you need to be able to be as good as what was there before. And this goes back to what you said about Rust is basically just a better C++, right? What that means is that they sufficiently built out the maturity and polish necessary to displace the existing use case.
Starting point is 00:18:13 People adopting it know that they don't need to do any extra work to make the transition to Rust, or at least it would be very minimal compared to like C++. So they know they're not going to have to do any research or experimentation or new library development. And now they don't say anything like a better C++. What they say is that Rust has four distinct domains, command line usage, networking, embedded devices, and web assembly. So it sounds like they're taking something from your playbook and saying like, we can't say we're just better than C++ because that's probably a massive ask, right?
Starting point is 00:18:45 So they're like narrowing in. I would actually say that's still not narrow enough. Honestly. I mean, I think that, like I said, I think by this point they've kind of already crossed. So I wouldn't be too concerned about them. But like, if you were still, if you were still not mainstream yet,
Starting point is 00:19:00 you would not want to have that tagline. It's like, oh, we're a mobile assembly or I forgot what the other things you said. Or like maybe for command line tools, like that's not what you want to do, right? You just want to have that tagline. It's like, oh, we're a mobile assembly, or I forgot what the other things you said. Or like maybe for command line tools, like that's not what you want to do, right? You just want to pick one, make sure that's really polished. And generally you just,
Starting point is 00:19:11 you do not want to advertise use cases that are not 100% well-developed. That's like a really big mistake a lot of people do when advertising technology. Like example, like let's say, going back to Haskell, right? So Haskell says like, you know, maybe it's great for data science.'s like well is it is it like how good are the plotting and charting
Starting point is 00:19:30 libraries right it's like maybe it's good in some ways right but there's still deficiencies in other ways right so you don't really want to sell it for say data science unless you've really thought through all the use cases like okay like some data sciences can data science overlaps a little bit with machine learning or statistics like how good is the statistics or machine learning libraries does haskell have good bindings tensorflow all those little details are you have to get all of them right in order to get into the mainstream for that particular vertical that's why it's so important to focus on just one because like once you really get into a vertical you realize wow i have a lot to do before this is really ready to go yeah so like
Starting point is 00:20:10 i'm sure i've told this story before but years ago i was learning haskell trying to introduce it my work and so i built some web services and uh then i had to like pull data from this other service that used like soap and then i remember asking haskell gurus like how do i interact with like a soap based web service i think the answer was basically like oh gross don't do that because nobody had done that right it's like so then you're stopped in your tracks right i guess the early adopter move is like building your whole home soap parsing library yeah exactly so the early adopter would be totally fine creating a soap binding if they had to. A mainstream adopter,
Starting point is 00:20:48 when if they hit something like that, there would be a negative reference for Haskell. Say like they would be telling other mainstream programmers, please do not use Haskell. It's not mature for this use case. Stay away. That's why it's very important not to advertise use cases which are not fully polished
Starting point is 00:21:00 because then you start generating negative references, which will be very hard to dispel later. But it's tricky because if you get an early adopter into this use case, then they'll help build it out. But if you get a mainstream programmer into this use case, then they'll advertise against it. The early adopter will not necessarily help build it out. So early adopters are project oriented, right? They will often want like customizations for their specific transformational project because like they have a, or they want to do something revolutionary, which is not necessarily specific to your technology. They see your technology as an enabler of their revolutionary project. But they're really only interested in customizations which benefit their project.
Starting point is 00:21:38 So you have to walk a fine line and try to figure out ways to improve it for their use case that also gets you further to addressing a vertical. But even then, it's kind of difficult because each early adopter is really probably going to be targeting a different vertical if you're not careful. So you really only want to devote resources to one vertical if you can as much as possible. That's what makes it very challenging to parlay early adopters into a staffing vertical. You really just have to kind of like hoard resources and then focus them all yourself without the help of early adopters into a stabbing vertical you really just have to kind of like hoard resources and then focus them all yourself without the help of early adopters into getting that one vertical totally polished so for rust you would say instead of those four things like if rust were earlier in the game you would pick one you would be like rust is for embedded yes the author of classic
Starting point is 00:22:20 has i'm using the analogy of a bowling pin which is that once you knock down one mainstream use case, it starts to tend to spread into other mainstream use cases. So let's say you've got these Rust programmers, they've already accepted these mainstream embedded programmers, they've accepted that Rust is what we want to be using now. It's the new official best-in-class embedded programming language. And now they're highly motivated to start convincing their colleagues, their other mainstream colleagues, to use Rust. Maybe they have to do stuff and make... They work at a company, a large company, that company has CI, right? So they're going to ask their company, okay, we need to use Rust. We have to. And we need CI
Starting point is 00:22:58 support because the whole company standardizes on CI. So they're going to ask their company, you have to add Rust support to CI. And all of a sudden, the CI people start using Rust and they'll be like, oh, hey, Rust is actually pretty good. Maybe we can start replacing some of our CI services in Rust. And that's the bowling pin. So now you've got a new mainstream Rust adopter. And then they say, okay, well, now
Starting point is 00:23:17 we need to not only build this in CI, we need to deploy it. So then they go to Ops and say, okay, we need you to add Rust support for building Docker images or what have you, right? And then the ops will try it out and be like, oh, hey, like this is Rust. Maybe we should start using Rust for our use case too. And that's how it spreads
Starting point is 00:23:33 once you have that one mainstream use case. In your history, you tried Haskell evangelism during your PhD, you tried it at Twitter. So have you tried other approaches to evangelism throughout your career? Ah, yes. So at Awake Security, we actually have adopted two relatively new technologies. So one is Haskell and one is Nix. Actually, this is a case where Haskell has a fairly well-developed mainstream use case, and that's how it got into the company. There is one use case where Haskell is very polished. And so it's compilers or programming
Starting point is 00:24:05 language implementations or interpreters. And that was actually what got Haskell into our company is that we really needed to build, it was a very specific language we need to build in our product that users could like explore the high level insights. We're a network security company. We want users to be able to explore the insights we collect. And so we needed a programming language for that use case. And so Haskell was the best in class compiler's language. So that's the initial mainstream use case. Right, and then once we adopted it for that use case, all of a sudden, like other people in the company
Starting point is 00:24:33 started using like old, new web services, and you know, for the company, why don't we use Haskell for that too? In fact, it's actually better, because then we can share code in the programming language, right? We don't need to call out as like a sub-process or a service, right? You know, it's just a library dependency that's very good right that reduces the possible
Starting point is 00:24:49 points of failure and then we need ci support for haskell and so that's how it's spread in at least inside our company same thing like i keep most other stories i hear in industry of haskell getting taking root at bigger companies is typically in the programming language route interesting yeah and you could even i'm trying to think if you could expand that to like some sort of parsing. There's parsing that's not building your own language, I guess. Verifying the format of something or, yeah. Well, I mean, it's not just enough to have the use case. So this goes into the third point of what you're looking for when you're trying to get a technology adopted, which is not enough to have the killer use case.
Starting point is 00:25:26 You need to have a clearly identified buyer, so somebody in the company who has either economic or technical authority to adopt. I'll give a counterexample. So once I asked somebody in my own company, like, what do you think is the reason to adopt Haskell? And he said, like, I think it's concurrency. But you think about it,
Starting point is 00:25:44 like there is no director of concurrency at Facebook. They might have a data science division or privacy and safety division, but currency is not the way that companies think about things. There is no clear person
Starting point is 00:25:59 in the company who can adopt the technology. Whereas, if you say compilers or programming language theory, there is usually like there's a compilers team at various companies. That gives you like the clear person that you target and sell to and then who has authority
Starting point is 00:26:12 to introduce language into your company. Another example would be like ops. That's another clear vertical you can target within a company. Oh, that's interesting. Because like memory safety for like Rust, like that's not a person who's in charge of memory safety.
Starting point is 00:26:25 But like embedded is probably a team. Yes, so you might have like a chip design team or a firmware team within a company and they would be the technical buyers of the open source technology. What were the three things? Well, there's four of them, right? So a compelling reason to buy.
Starting point is 00:26:42 So polished whole product. Three is target customer that can buy and four is is there already a leader so ideally there should not be an existing leader because remember going back to mainstream programmers but once they've identified the clear leader of whatever space you're trying to occupy they're going to defend them to the death against uh newcomers so you don't want to attack a proverbial fortified hill so you want to make sure that whatever use case you're addressing there isn't like a very well established best in class solution yet you want you want to be that first one so that you can then have very good then you can have the staying power against
Starting point is 00:27:17 competitors and if there is a leader in an area then do you focus in even more like no you just find another use case just give up on that area yeah i mean you focus in even more? No, you just find another use case. Just give up on that area. I mean, you could penetrate it, but you'll always play second fiddle to whatever is the defender. Again, mainstream programmers just want to standardize the... I mean, the only way you'll really surpass the existing technology is if they
Starting point is 00:27:37 really mess things up. They just release... It will be like the Angular 2 I don't know if they have 3 Angular had this like really breaking release at some point
Starting point is 00:27:49 right that really pissed people off and like that would have been a good opportunity for like one of their competitors to then like leapfrog ahead of them
Starting point is 00:27:56 to be like the new best in class for whatever it was that Angular does I'm not too familiar with the frontend ecosystem but yeah I think
Starting point is 00:28:02 that's what React did basically to my vague understanding, knowing nothing of JavaScript frameworks. Exactly. So if the leader makes a huge misstep like that, then there's an opportunity. But assuming that they just sort of play it safe,
Starting point is 00:28:16 keep incrementally improving, and don't rock the boat, they'll probably just continue to remain the leader for a very long time. One I was thinking about is TypeScript. So I looked it up. TypeScript's slogan is JavaScript at scale, I think. Pretty sure that's what it is. Yeah, I don't know.
Starting point is 00:28:34 Is that a good fit or not? What do you think? Is that a niche? First off, that's a very good slogan. And so the reason I like it is that one thing that the book talks about is how you position your product. So position is how basically it book talks about is how you position your product. So position is how basically it's like when customers try to adopt your product, or at least they're thinking about adopting your product, they try to compare you to other technologies. And when they do so, usually there are two reference points they need for comparison.
Starting point is 00:28:58 So the first reference point is what technology am I displacing? So that's called the market positioning. So in this case, like going back to that slogan, JavaScript at scale, JavaScript is the market that TypeScript is displacing. The second positioning is like, okay, so you're displacing this. What makes you better than whatever it is you're displacing?
Starting point is 00:29:17 And that's called the product positioning. So usually you have like a second thing. So usually, actually, there's a slight way we can improve upon our slogan by instead of saying it's scale, saying like specifically compare it to an analogous technology. But even just saying it's scale is already pretty good. So you're saying like, this is what we're doing better. It's like we can do this at scale, whereas previously we couldn't before.
Starting point is 00:29:37 So what would we compare it to? What's your improvement? Let's hear the new slogan. Let's see. So the best comparison for product positioning is something that had a similar transformational effect in another ecosystem but that's not useful for the market you're trying to displace so a good example would be typescript i think it does like a lot of type in it's not just like it does types but you can do like type inference and stuff like that so normally i might
Starting point is 00:30:02 say like this i still think it's not good, but like maybe like, you know, it's like the Haskell for JavaScript, right? But that's not good because Haskell is not a mainstream technology. You want to pick a mainstream technology with type inference to use as the clear positioning. I don't know if there's like a really good one. Like an example of a bad one to use as a comparison
Starting point is 00:30:19 would be it's like Elm, but for JavaScript. And that's a really bad one because Elm is competing for that exact same market. So you don't want to use them as the product positioning. Preferably it'd be some language with type inference that's not competing for the JavaScript market. It's interesting because I think that people who were probably early adopters for TypeScript,
Starting point is 00:30:38 they were people, I'm just guessing, who didn't like JavaScript that much, right? Who didn't like that it didn't have strong static type guarantees. That's probably the people who were the early adopters, right? But the market is all of the JavaScript developers. So if my slogan for TypeScript was like, it's JavaScript, but better, JavaScript developers wouldn't like that because they would be like, no, why is it better? JavaScript is great. You're just making me add some type annotations. Yeah. The reason the slogan works well
Starting point is 00:31:05 is again, it clearly calls out what is the huge problem that JavaScript people are suffering, which is that like JavaScript does not scale well to large code bases. So like the people who are struggling under that issue have a very compelling reason to adopt, to deviate from the herd
Starting point is 00:31:20 because they have a good excuse to do so. But if you just says like, it's just a prettier JavaScript or a more elegant JavaScript, right? That's not the compelling reason to adopt. So we have a reason, a buyer, a customer, a leader. I would say yes. A target customer, compelling reason to buy,
Starting point is 00:31:37 fully polished whole product, and then no competition, or at least competition that has not dominated the market yet. Yeah. So that's what's really important. Like it's okay to have competition as long as they haven't really gotten that strong foothold. But once one particular technology gets like 50% or more market share,
Starting point is 00:31:53 then it's staying. Yeah. Because the mainstream programmers, once they've learned something, then you know, that's the tool they'll use. Yes. They don't want to change.
Starting point is 00:32:02 They're very reluctant to change. So when I previously talked to you, it was about DAW. Oh, actually, we didn't talk about Nix. I don't know if we want to talk about that. Yeah, Nix is actually a very interesting use case. Okay. So Nix is still a technology
Starting point is 00:32:15 I would consider not mainstream yet. I think most people would associate Nix with early adopters at this point, or they may not even know what Nix is, for example. So what is Nix? So Nix is a package manager, but even that's not a really good description. Nix is actually doing a lot of things, which again, is kind of like a danger area. So it's a package manager, but there's also NixOS, which is an operating system.
Starting point is 00:32:34 There's also Nix packages, which is like a monorepo of packages. There's NixOps, which is a deployment tool. There's Hydra, which is like a CI tool. So there's like this ecosystem of half-baked stuff floating around, right? And so it's already hard to even just answer the question, what is next? It's really difficult. And that's bad for adoption
Starting point is 00:32:54 because when you want to penetrate the mainstream, you need your message to be viral. You want all the mainstream programmers to agree what is the reason to adopt. It's kind of like a chemical reaction, right? If you're trying to mix two things and get them to react, you want them to be at very high density and concentration, right? So if your message is diluted, it's infragmented,
Starting point is 00:33:13 you don't get that chain reaction to occur. So I think out of all those things that I mentioned, the one that's closest to mainstream adoption would be NixOS, which is the operating system. It's essentially an operating system that is completely declarative, fully defined. You can configure literally everything about the operating system using the exact same option format. So I can configure boot parameters, I can patch the kernel, what version of system D I'm running, I can define
Starting point is 00:33:41 services, everything. It's just like a well-orchestrated whole. And it's immutable, so it supports rollbacks. It's declarative. It's fantastic for ops or DevOps in particular, but even just ops. If Nix ever goes mainstream, I think NixOS will be the key use case that we'll get in mainstream, but it still needs to be polished more before it does so.
Starting point is 00:34:00 Their slogan should be like, your OS in code or something like that. Yes, there's a name. It's really good for GitOps, which is like, you know, very control-based ops. And because, yeah, like everything is declarative.
Starting point is 00:34:13 And not only that, everything is source-based. I guess the closest thing in this area would be like Docker Ansible. All those other technologies, like a lot of your dependencies are binary dependencies, right? So if there's something wrong with them,
Starting point is 00:34:23 you can't really fix them, right? It's like, okay, I got to hopefully release a patched version or something like that. But otherwise, you have very little control over fixing things. Whereas in Nix, like everything is fully specified down to, you can patch every single thing that you depend on, not just in the system, but like in the things that were used to build your system. I could patch GCC that was used to build the system D that my system uses.
Starting point is 00:34:48 That's like the level of control you have over the entire bill. It is Docker built by Gen2 developers. Yeah, exactly. That's a really good, that's actually a really good slogan, by the way. It's like Gen2 but for Docker, right? So like Docker is the market positioning.
Starting point is 00:35:01 Gen2 is the product positioning, right? So that's a very good adoption slogan. Yeah. So do you need like the overlap of people who are Gentoo people and interested in Docker? You don't need them to overlap. The key thing about the product positioning is like the Docker user,
Starting point is 00:35:16 who's considering using NixOS, doesn't really need to actually use Gentoo. They just need to understand that like Gentoo is a mainstream thing that was transformational in some way that I understand. Then VIX OS is going to be transformational in that same way and like the problem that Gentoo solves is the same problem I'm having right now with Docker yeah I can see that right there are businesses where they have very specific builds of their OSs that they use you know using Gentoo or something and now they're transitioning to this like Kubernetes Docker world.
Starting point is 00:35:46 And they're like, but we really want to specify every little detail. We don't want, like Docker is great, but it just says from X and it pulls in this image. I don't know what's in that. And then it adds things on top. Yes. So I think the reason I brought this up is because you had some experience like evangelizing for Nix.
Starting point is 00:36:02 Yes. So in our company, like the main issue we had was lack of reproducible builds and lack of support for rollbacks. So for example, I think the one case that really sticks out in my mind is early on in our company's history,
Starting point is 00:36:15 we were about to assemble our first end-to-end system to demo for management. And it was like, it was a mix of Docker and Ansible at the time. And it just totally crapped the bed because like what we did is like before the demo, we did, we just deployed it. We said, okay, And it was a mix of Docker and Ansible at the time. And it just totally crapped the bed.
Starting point is 00:36:28 Because what we did is before the demo, we just deployed it. We said, okay, it seems to be working. There was some issues, but it was fine. We said, okay, now we're just going to deploy it again. It should be item-coded. So just to verify that it just works. Turns out it was not. So we just redeployed it.
Starting point is 00:36:41 No changes. All of a sudden, brick to the system. And 30 minutes before the demo, we're all scrambling to get it working again. And so like that was the compelling reason to adopt something new is that like we could not get reproducible and again, lack of rollbacks, right? So like brick the system,
Starting point is 00:36:56 we could not roll back to the last working version. So these are like the key things you were looking for in a new technology to fix the problem that we were having. And Nix just nailed those two use cases perfectly. Like Nix has that, that is very well polished in Nix. It's amazing. And so that was like, so we had the compelling reason to buy.
Starting point is 00:37:13 We had the whole products, like Nix's support for immutable deployments, rollbacks is perfect. Nothing to change, no new investment necessary. I was the economic buyer. I was responsible at the time. I was the economic buyer because I was responsible at the time. I was tasked with fixing the system to get it working.
Starting point is 00:37:29 Eventually, my effort formed a team, which is sort of like our DevOps team within our company. That's the vertical, DevOps. The lead of the DevOps team is the technical. DevOps is technically not a team. A lot of people listening to this will say, DevOps is a culture of mixing dev and ops.
Starting point is 00:37:46 But so technically, we're actually a systems and shared infrastructure team, not a DevOps team. But anyway, our team is the vertical that has the authority to adopt Nix and ask the rest of the company to begin using it. And then competition is like, again, there's no clear leader in this space. Like, all the other tools for deployment,
Starting point is 00:38:01 like, you know, Ansible, Docker, Chef, Puppet, whatever, they're all totally bad in this regard nobody has like taken the clear leadership on fixing this problem right and nix totally nailed it so those are like those all those stars lined up for nix at least to be adopted within our company yeah because you could be like i can upgrade the kernel version and then just roll it back if it doesn't work the little things happen all the time in our company where we've just like tried really random changes to our system and we break the system and then just roll it back if it doesn't work. The little things happen all the time in our company where we've just like tried really random changes to our system and we break the system and then just roll it back to the last reboot and then it's as if nothing happened. So it's very
Starting point is 00:38:32 nice in that regard. So it really enabled a lot of experimentation inside of our company to try like best of breed technologies long before they would probably be safe to use for other platforms. That's interesting. And then the topic that originally got us here was a doll, which I feel like I should spell like D-H-A-L-L. Yeah. That's why the doll readme has like how to pronounce it in IPA at the bottom of the readme just in case there's any confusion. But I agree.
Starting point is 00:38:58 To me, this is like the interesting use case that shows how you've taken these ideas of tech evangelism as you've like butted your head against pushing various pieces of technology. So like if I were to describe Dahl, I would say like some Haskell guy rethought configuration from first principles, but that's not what it says on the website. How do you describe Dahl to people?
Starting point is 00:39:20 Our slogan right now is a non-repetitive alternative to YAML. And actually I still think it's not a good slogan. And it's like for the same issue with TypeScript, which is that it does a good job of describing what the market is, which is YAML, right? That's what we're trying to displace. If you use YAML, we're talking to you. Non-repetitive is like, that's the product positioning, right? So it's like, that's the problem we're trying to solve.
Starting point is 00:39:42 It'd be much nicer if there were like a mainstream technology we could compare to that we could explain what are the features that Dull offers. What makes it difficult is that there isn't another mainstream total functional programming language like Dull. So that's what makes the positioning a little bit more difficult. So we settled for something that was simple, clear, and something that is totally mature and polished. It's not hard to do for Dull. It's something that everything can, that is totally mature and polished. Like it's, it's not hard to do right for dull, but it's something that everything else does
Starting point is 00:40:07 really badly, right? All the other attempts to fix this problem have been very poor. A lot of people like, apart from like people doing like Jinja templates, YAML or Helm or Kubernetes. So why YAML? It's a configuration format. Yes. So it could replace XML or INI files or et cetera, but you focus in on YAML.
Starting point is 00:40:27 Yeah. Part of the reason why is because one, we just want to narrow the use case, right? It's easier to just displace YAML than try and displace, you know, four other different configuration languages. Second reason why is we actually don't, we actually target a narrower market than YAML. In fact, we're going to be calling that out more prominently soon. The narrow market is ops related in YAML. So like Docker Compose, Kubernetes, I mean, also not YAML, but JSON also supported, CloudFormation, things like that. But again, the advantage of narrowing things down is that one, we can more clearly identify the problem. Two, there's a more clear buyer, which is ops team in this case, the ops vertical within the company. And three, if we're not displacing all YAML,
Starting point is 00:41:09 we're just displacing ops related YAML, then that's much less work for us to do to develop a polished product. But actually we can narrow it down even further. And so like the one specific ops use case that we're really digging into right now is Kubernetes. So like, so Kubernetes is the market. And then if I were to give the slogan of DOL, it would be kind of like, it's like Agda, but for Kubernetes. If Agda were a mainstream technology, which it's not. A lot of people don't appreciate how similar DOL is to Agda. So yeah, Kubernetes is the market that we're trying to prove upon. Again, because it's very simple. There's a huge problem with the Kubernetes ecosystem right now, which is that Kubernetes is, there's no clear, quality, decisive leader
Starting point is 00:41:47 in the solution for dealing with large Kubernetes files. There have been a lot of attempts, like Ksonet, Helm, all of them have just fallen flat, and people are looking for a much better solution to this problem. And Dall is already kind of starting to go viral in the Kubernetes community for exactly this reason. And one of the things we're working on is just developing that whole product so there's no question that DALL is the best solution.
Starting point is 00:42:11 So right now DALL is okay. You can use DALL to generate YAML. Kubernetes understands YAML so you can read it in. But you could actually polish it more. So what if DALL had Go bindings, which it will soon, then you could actually just have the QB control command read DOL files natively without having to go through an AML intermediate, for example. Or like what if DOL had a repository of Helm-like charts? And then that would be another reason. It's like, again, like mainstream
Starting point is 00:42:36 programmer doesn't want to write all those charts themselves, right? So they're not going to DOL unless that large repository of charts is already present there for them. So like those are the things that you really need to use to build out that fully developed use case. And then once we can get adoption from the Kubernetes community,
Starting point is 00:42:49 it'll slowly branch out because like ops people using Kubernetes will be like, well, I want to make sure my Kubernetes configuration stays in sync with, I don't know, my CloudFormation configuration
Starting point is 00:42:58 or my Terraform configuration. And so they'll say, okay, so now I want to get those into DAW too so they can all share the same code or configuration in this case and all be in sync with each other. And so that's how DOL spreads from one ops technology to another ops technology. And then all of a sudden, they say, well, it's not just ops things. There's going to be lots of services that need program configuration.
Starting point is 00:43:19 And it'd be nice if those services could just read shared values that were shared with the deployment via DAW, right? So all of a sudden, your people are going to want to have services reading in DAW configuration files natively, and the chain continues. But you just need that one initial use case, which in this case will be Kubernetes, to create that chain reaction of adoption. Like at some point you have DAW, it's better configuration.
Starting point is 00:43:42 And then at some point it's like DAW, it's better than YAML. And now you're like, DAW, it's how you configure Kubernetes. So how did you find this niche? So usually when you're first starting out, you have a lot of early adopters. They'll come to you with all these projects, and they'll be kind of diverse. Only a few of my initial early adopters were Kubernetes-related, right?
Starting point is 00:44:01 Some people were adopting Dahl for entirely different use cases. I think the reason we focused in on Kubernetes was just because, one, there's a very clear void in the market. Kubernetes, well, out of all the ops-related ones, Kubernetes has the largest and most sprawling invigoration, so the largest compelling
Starting point is 00:44:18 reason to buy. Two, there was a void there. Again, like you said, there were several challengers that stepped up, Ksonet, Helm. They tried and failed, so there's still a void that are Again, like you said, there were several challengers that stepped up. Case on that helm, they tried and failed. So there's still a void that are left in the market waiting for somebody to step in. And people already understand the compelling reason to buy, which is that they know Kubernetes
Starting point is 00:44:33 files are unmaintainable. You've got a clear technical buyer, which is ops. That's the vertical. So all we're missing to line up all the stars is just have the complete whole product. And the other reason we chose Kubernetes is because that's the one we were closest to developing the complete whole product because some early adopters
Starting point is 00:44:49 had already created adult Kubernetes that auto-generates Kubernetes bindings from the API specification. So really at this point, we're just missing the native Go bindings and the repository of charts. And that's all we need to do to flesh out the entire whole product.
Starting point is 00:45:03 Whereas if we went for like Terraform or CloudFormation, there's more work we need to do to flesh out the entire whole product. Whereas if we went for Terraform or CloudFormation, there's more work we have to put in before we have the fully developed experience. What's a complete whole product? Basically, it just means the adopter doesn't have to take any risks or do any additional work to adopt. I mean, they might have to do like, there'll always be a migration cost,
Starting point is 00:45:19 like you have to translate things. But even that we've actually kind of made easier too. So for example, there's a YAML to DAW, where if you just give it the expected type, it'll auto-convert your YAML files to DALT configuration files. So even that is kind of a very low migration path. And it's also
Starting point is 00:45:34 not just like their surrounding tooling, like how easy is it to install the DALT tools, static Linux executables, various packages, how easy is it to train people? All those details are part of the whole product. It's not just the executable you deliver, but it's the whole ecosystem of things around it that comprise the whole product. And that's why it's really
Starting point is 00:45:55 important to focus on one use case because building out that ecosystem of documentation and tooling and IDE support and packaging and distribution is a significant amount of work to do even just for one vertical. It's interesting because TypeScript that we were talking about earlier, like it seems their onboarding is run this command to get TypeScript installed, whatever, and then just change the file extension from like JS to TS. So it sounds like one of the keys is to have a really low friction onboarding process for some specific use case. Yeah, like going back to Rust, which is one of the examples,
Starting point is 00:46:27 like Rust, you can bind to C if that's what you want to do, right? So there is that migration path that you can slowly carve out stuff from C and turn it into Rust. So whenever you're trying to adopt a missing vertical, you want to make sure you have good integration with the existing previous leader of that vertical.
Starting point is 00:46:43 So like if we're displacing YAML, we got to make sure there's a smooth migration path from YAML to DAW. Yeah, there was some really old story. Maybe it comes from that crossing the Chasm book about WordPerfect and Microsoft Word. So like WordPerfect, they changed their file format at some point.
Starting point is 00:46:58 And like you couldn't open one version of the file in like the newer version. Yes. And then so Microsoft Word made it so you could open that old version. And everybody just switched because there was no migration path on the Corel side. version of the file in like the newer version. Yes. And then so Microsoft Word made it so you could open that old version and everybody just switched because there was no migration path on the Corel side. But on the Microsoft side, they just stole their migration.
Starting point is 00:47:12 Yeah, that's one thing that's really important is that like that actually is more relevant to after you've crossed into the mainstream market is that once mainstream developers are in the process of trying to standardize your technology industry-wide, you don't want to rock the boat, right? You just kind of want to freeze what you have and not make significant changes and let them do the work for you. That's a good point in which you would like to stabilize your APIs or create an RFC, for example. So if I have some open source project, I built it and I'm interested in seeing it grow, and I'm kind of the main force behind it, like you are with Dahl.
Starting point is 00:47:47 I only have so much time in the day. How do I decide, should I be fixing some bug that came in? Should I be evangelizing in whatever format it is? Should I be on Hacker News, just telling people how awesome my product is? Should I be fixing bugs? Should I be, what do I do? Definitely don't rely too much on other people
Starting point is 00:48:04 getting that whole product out. So like one common mistake I see a lot of new open source developers make is they try to build what I call the hype train, where they're starting a new project that has a lot of potential. And they advertise on Hacker News hoping that, okay, we're going to generate a lot of hype, maybe get a lot of influx of new contributors. Those new contributors will add new features, generate more hype, and so forth. And then they hope that there will be that virtuous cycle that will get them to the mainstream.
Starting point is 00:48:31 In practice, that never happens. Usually, the thing about contributors is that their needs are always going to be fragmented, right? If you have eight new contributors, they're going to be taking you in eight different directions. Again, if you want to get that vertical built, you need to focus on one direction. And sometimes that means not only doing a lot of work yourself, but explicitly saying no to some contributors saying like, this is not where I want to take the product right now.
Starting point is 00:48:53 We should not build this out because this is just going to slow us down, add more maintenance, make us less flexible and agile. So you might deny, you know, merging some pull requests, even if it adds a feature because the feature isn't in the direction you want to go? An example of this was like, I think the feature I've had to deny the most out of any other feature for Dull is support for templating. So first off, so already it doesn't help the YAML use case, right? But you can say, okay, it doesn't help. Maybe they're not going to use it, but it doesn't hurt, right? But actually it does hurt because it's something that we have to support, Right. It's interesting because you're saying,
Starting point is 00:49:26 yeah, we want to get this viral mishappening where it spreads, but you're also saying like you're against what sounds like promotion based growth or something. Yes. Is there a distinction there? So this is why I think one of the coolest things about the book, which is that it teaches you that marketing is not just advertising or branding or evangelism. Like marketing is really about prioritization and focus. And if you get that right, you actually don't need to do a lot of advertising. So for example, if you've done your job well, then your target adopter already wants to use you even before they've done a
Starting point is 00:50:03 comparative analysis of technologies, right? They've already thought to use you even before they've done a comparative analysis of technologies right they've already thought to like it should be clear to them that for a given vertical you're the best choice for that vertical at that point they're just sort of like trying to rationalize that decision right so they may write a design document saying i'm comparing x y and z right but they know in the back of their head x is really the best here like that's my gut feeling based on what all my friends have told me and what I've read and my initial perceptions of it.
Starting point is 00:50:29 And so at that point, they're just trying to rationalize their choice of X. And marketing is about building that focus, maturity, and polish by careful prioritization so that you are there and you've created an X-shaped hole
Starting point is 00:50:43 in their head that they really need to fill. How is this done? Like, that sounds great, but I don't, what steps do you take to do that? Focus and prioritization are always the key here. So like, again, like as an open source developer, you have very limited resources, right?
Starting point is 00:50:57 Even more than a startup, right? Because a startup, you at least get paid somewhat, as well as a tech company, right? Open source is totally free volunteer only you're very little of your own time and for people who are other contributors like you don't know if they're going to start stop contributing tomorrow so you have to very carefully pour your resources and pay them on very selected things so for example like i'm not going to work on something or at least i'm going to spend very little time on things that don't get me closer to
Starting point is 00:51:22 building out that polished kubernetes use case So an example of a thing that I would work on right now that would help Kubernetes use case would be performance. So DAW, there are ways we can improve its performance because DAW configuration files for Kubernetes can get quite large. So you want to have a very fast interpreter so it's snappy and gives good results. I think marketing is really underestimated as a force amplifier for engineering. Because if you don't have a very careful marketing understanding of what is the small vertical that you're targeting, then you end up spreading yourself very thin because you don't really know what you're trying to build. Once you have that clarity of vision for what is the polished product that you're trying to build,
Starting point is 00:52:00 you get much better utilization of your engineering resources, whether you're an open source team or a startup team. That's why I think marketing is something that's very important to get right when you're a small organization in general. Yeah. And how do you get the perspective of the customer, the adopter in this case? Once you advertise that you're going for a use case, just tentatively commit to it. You can always change your mind later.
Starting point is 00:52:21 So I can say like, okay, I'm going to make Dahl the best in class for Kubernetes. And then you sort of like made that commitment, that personal, you stake your brand on it. Once you do that, all of a sudden you're going to get a flood of feedback saying like, I know you said Dall is good for Kubernetes, but it's not. Here's why. Here's what you need to fix to get to that point. And so just that tentative committal can generate a lot more feedback. Whereas if you're playing the field, you're not going to get that rich feedback. So some random pieces of technology I'm trying to think about, like GraphQL. So I think GraphQL is pretty cool.
Starting point is 00:52:54 Their slogan says, a query language for your API. The thing I found with GraphQL is that most people have heard the term, but they don't know what it is, or they specifically misunderstand what it is and think it's like SQL or that it's based on like filtering. Yeah, or a graph database. So actually, the funny thing about GraphQL is that was one of the use cases
Starting point is 00:53:15 that was an option back when we were trying to figure out what vertical should Dull target. Because a lot of people said like, Dull would actually be an okay GraphQL, maybe a little bit verbose, right? But it's very powerful, right? So you can use that to filter down or transform basically just like because doll's first class code you can push a lot of logic upstream into the server and it's totally safe to do because doll is you know um is a totally safe language to interpret we decided
Starting point is 00:53:37 not to go with that because for a lot of reasons which is that i mean i think i won't go into the reasons but like i think that space still is that's a market that's not mature. I think GraphQL is okay there, but I think the main issue with GraphQL is you still have to do a lot of work, right? You know, it's like the front end doesn't have to do a lot of work to use GraphQL. But on the back end, you still have to do a lot of investment to take your existing APIs and wrap them in a way that GraphQL understands. So it's not just like out-of-the-box support. So I think like GraphQL needs to have like, there needs to be more that needs to be built on the backend
Starting point is 00:54:09 to just like automatically take advantage of GraphQL so that the backend team doesn't need to invest any more resources to adopt GraphQL. It means like the backend needs to be automatic. We shouldn't need to have a person maintaining the GraphQL server. Yeah, because it's like GraphQL, their slogan could be like,
Starting point is 00:54:24 it's like SQL for your backend services except you have to build the database yourself. You have to do all this. It is a format. Why don't I just use SQL? Right? Yeah, exactly. Yeah, we talked about Rust, TypeScript. So Haskell, it sounds like you would
Starting point is 00:54:40 market it as for building programming languages. Yes. Yeah, Haskell has very well-developed resources and ecosystem for doing that. Lots of great libraries. Like, I mean, Dull is a perfect example of that, right? I was trying to build Dull. Haskell is a great language for building Dull.
Starting point is 00:54:55 And because that's actually allowed Dull to iterate very quickly. Like, I get tons of feature requests every week. And without Haskell, it would be much more difficult to keep up with the sheer volume of those feature requests. There are lots of great literature and documentation on how to build programming languages in DAW. For example, there's a very efficient way to write interpreters. It's called normalization by evaluation. And if I just search normalization by evaluation in Haskell, I'm going to get some complete examples of compilers and interpreters implemented in Pascal. I can just like copy and paste
Starting point is 00:55:25 or modify and reuse in my project. So like I have to do absolutely nothing to get fantastic results out of the language. So it's just that whole ecosystem of supporting resources that makes it excellent. And then Scala is an interesting one. You talked about that at Twitter. How would you sell it?
Starting point is 00:55:42 I think big data is the closest thing to the mainstream use case of Adopt Scala. That's what Twitter used it for. And like Spark, I think is one of the common things that drive people to Adopt Scala. It's also why we use it at our own company. A lot of the big data processing we use
Starting point is 00:55:57 is written in Scala. And again, it's just like, it's not necessarily because Scala is intrinsically better data processing. It's just that there's like, it can interact with Java. So you get Hadoop, there's probably Scala bindings to everything, there's Scalding and there's Spark
Starting point is 00:56:12 and there's a lot of resources because like Scala has like staked its brand on big data or maybe data science to a lesser extent. And so people start writing supporting documentation and resources like how to install Spark on your machine, how to use Spark to do this simple example, like here's a project you can copy and paste and modify to do what you want.
Starting point is 00:56:36 So I think that it's all down to that fully developed whole product that gets Scala adopted for big data processing. So if you look at the Scala website, it says Scala combines object-oriented and functional programming in one concise high-level language. Yeah, that's already a terrible slogan, right?
Starting point is 00:56:54 Yeah. But then whenever people mention it to me who aren't familiar with it, it's either Spark. They're like, oh yeah, for big data, right? Or it's like ACA and Actors. And both of these things, I use neither of them, but they have more compelling use cases.
Starting point is 00:57:11 Like Spark just says something like, Spark's position is like for big data. And then ACA says, build distributed applications more easily. Like they have more cohesive statements. Another thing that makes big data good, let's think about the four, you know,
Starting point is 00:57:26 reasons for adoption. So clear technical customer, right? Companies have big data teams. So like, there you go. The leader of that team, that's the person who has the authority to adopt compelling reasons to buy.
Starting point is 00:57:36 Like your data doesn't fit on one machine anymore, right? You've maxed out Ram, you maxed out MVME drives, maxed out disks. Still not enough, right? You got to use big data.
Starting point is 00:57:46 And also because Java is just like, just using low-level Java to do big data is extremely verbose and time-consuming. Yeah, I just, I wouldn't recommend it. Old product, right? We've got Spark and all these other literature resources and packages that you can use and lots of example projects.
Starting point is 00:58:01 Competition, right? There's not a lot of out there, right? You're not a lot out there, right? You're not going to do big data in Python. Maybe Rust at some point. I think Rust would actually be a great language for doing big data because it solves a lot of the efficiency issues that plague JVM.
Starting point is 00:58:14 It's just missing a lot. It's ready to go, so it's just not there yet. You're not going to use Ruby, which is slow. You're not going to use Go. There's not a lot of big data libraries in Go. You're not going to use Haskell.
Starting point is 00:58:24 I mean, you could use Haskellkell but like again the maturity is not there so again lack of competition makes it easy for skull to establish itself as the leader of that market yeah and a lot of like data people data scientists etc right they're using python and then the spark position explains to them they're like oh this is for big data yeah i mean so that's the interesting thing about would be like Scala appears to kind of penetrate the mainstream with the big data use case. And I think about like, what will be the domino effect from there? Because I
Starting point is 00:58:51 still don't quite see the domino effect just yet. Like it's like you see maybe distributed systems and that seems to be quite it. Like, because it's not really well positioned to take advantage of other things, right? Like it's not easy to write command line tools in Scala. Like, you know, JVM runtime just adds too much to them and it's just missing that that viral effect to spread out I think right now so I think I would classify it as mainstream
Starting point is 00:59:13 but it needs to do more so that it can branch out and I think it's missing if it doesn't do that soon I think at some point if Haskell gets into the mainstream via the compiler's use case it will spread faster than Scala will because Haskell has a lot of advantages over Scala. Like one is that much lighter weight, better runtime, better currency support, better for command line tools, better interop with other languages and ecosystems. And so that's, I think it was like, that would be the one thing that Scala should focus on is like fixing those interop issues with other ecosystems so that it can grow more viral and establish that horizontal that it still is missing. Yeah. And so an interesting use case, like you just made me think of this is like Kotlin. So
Starting point is 00:59:53 the first time I saw it, somebody gave a presentation on it. I was like, oh, it's like Scala, but less good. It's like almost exactly the same in a lot of simple use cases. Right. But I think that it's succeeding. Like it's taking off at like a very fast pace. And the interesting thing is that I think that they targeted like Android app development as like a big use case. Yes, that's the proverbial killer app of development. So that's actually one of the reasons.
Starting point is 01:00:20 Actually, I want to take back what I said about Scala going mainstream because I think going back to what I said before, one of the indicators actually i want to take back what i said about scholar going mainstream because i think though going back to what i said before one of the indicators of something going mainstream is when you are officially like endorsed or standardized by things and actually i don't see that right now for scholar yet you don't see like people saying like we have to have a scholar sdk for this or like we have to have skull support for android or we have to have skull support for you know various other things like those are, I think, would be the key indicators I would be looking for for mainstream adoption. So I think while maybe Skull has gone mainstream
Starting point is 01:00:49 in perhaps some large tech companies like Twitter, I think in the broader industry, we're still missing those industry-wide standardization processes that would herald it going horizontal. Yeah, and then with Kotlin having targeted Android initially, that gives them a better chance, you think? Because they've kind of got one domain under their belt? Yeah, that'll with Kotlin having targeted Android initially, that gives them a better chance, you think? Because they've kind of got one domain under their belt?
Starting point is 01:01:08 Yeah, they'll make it better. Again, what you're looking for is, the sign of going mainstream is that your users do it for you, right? So somebody who is not a Kotlin developer says, like, we have to have Kotlin support for Android. Like, it's not an option to go without it. That's the key. It's like going back to the hassle community right the hassle community can always
Starting point is 01:01:27 keep like doing the work of adding haskell bindings to each new sdk or platform right but that's not the indicator of my mainstream right it only happens when non-haskell developers are force people to use haskell then you know you've gone mainstream so how will you know when doll is mainstream will that be like when kubernetes says this is a way to configure things? Yeah, so very simply, when Kubernetes natively supports DAW, then that's how I'll know that DAW has gone mainstream. So I think this is super interesting
Starting point is 01:01:53 because I guess I'm an early adopter for a lot of things. Me too. It's interesting to think about how you kind of get things to this mainstream place. I'll recommend to the audience, if you haven't read The Crossing the Chasm, the book you should, if you're doing open source technology and evangelism is a great way to make good use of your free time and to hone your message. So you won't say that your technology is like what an object oriented, whatever it was,
Starting point is 01:02:18 that's the slogan was. It's also because it helps you better understand what, like, especially it's really great for people like me who are early adopters, right? It helps you better understand what like especially it's really great for people like me who are early adopters right it helps you like for me well i wish i had this book before i joined twitter because before i joined twitter i didn't really understand the mindset of a mainstream programmer i did once i worked at a big tech company right but if i had this book i would have learned this before joining twitter what is that makes these people tick so if you if you consider yourself an early adopter and you're trying to figure out how does a mainstream programmer think, feel, evaluate technology, this is a great book for getting into that mindset.
Starting point is 01:02:53 So how would you sell Haskell now if you were back at Twitter? So I would just not sell it. And then part of good marketing is specifically not chasing sales. So don't try to sell it where it doesn't fit. And your users won't appreciate that. Because if you try to sell it for a poor fit, then that generates negative references. So don't oversell it. Just figure out what you're good at and stick to that.
Starting point is 01:03:16 It's like a great example of this would be Go, right? Go doesn't pretend to be everything, right? It's like, we're just good at web services and that may be command line tools and that's it, right? We're not going to sell ourselves as being anything more ambitious than that. Another one you just made me think of is functional programming, right?
Starting point is 01:03:31 So I was on some podcast with a bunch of C-sharp developers. They were asking me about functional programming. I explained it, hopefully all right. And then they said like, what's the big use case here? And I said like, I don't know, it's great for everything, right, just how you should write code. I don't think that was a compelling argument for them. Yeah, I mean, first off, functional programming is just poorly defined already.
Starting point is 01:03:51 So yeah, I think functional programming is not really ready as a market of its own yet, but specific use cases of it may be ready. Interesting. All right, Gabe, thanks so much for your time. This has been a lot of fun. Yeah, you're very welcome. Thank you too. That was the show. Gabe's thoughts on this topic are profoundly affecting my thinking.
Starting point is 01:04:11 For one, I love to evangelize for functional programming. And as Gabe points out, that is not really a fruitful endeavor. Take a look at how Gabe is positioning Dahl. Dahl is not sold as some like Agnefer config to maximize hipster points, but he's actually targeting a very specific narrow use case, better Kubernetes configuration. I think when I started programming,
Starting point is 01:04:31 it was all about the cool things I could build, but you know, slowly certain aesthetic sensibilities have taken over, which is totally fine. But when I gush about referential transparency, I'm not really selling anybody. I'm speaking the language of an early adopter and I'm attempting to sell to a mainstream programmer. So I have a certain aesthetic of programming that I think is valuable and I want people to adopt it. How should I do that, right? I was seriously considering going around talking to everybody about the beauty of higher kind of
Starting point is 01:05:01 types. Higher kind of types are, and I think everybody should want them in their programming language, but I think it's missing the point. If Gabe is successful at selling his Agda-based language to ops people as the simplest solution for doing Kubernetes configs, then I think myself and everyone out there who likes kind of fringe technologies
Starting point is 01:05:20 that haven't yet hit mainstream adoption, we need to learn from Gabe, right? What is this move that he's doing? It's selling a complete product for a narrow use case and then stepping back and watching adoption take off. I mean, I don't think he's got there yet with Dahl, but it definitely seems like he has a playbook that he understands. When I first heard of Kotlin, I didn't really get what people were excited about. It seemed to me like it was Scala dialect that sort of had better marketing. And some of the people who were talking to me about it were people previously who were like, ah, Scala seems kind of complicated.
Starting point is 01:05:54 But I think that maybe I understand it better now. Because when it first came out, the first things I heard about it was Kotlin was for Android development. And that was kind of their beachhead. And from there, it spread to other areas. I think that Kotlin is still less popular than Scalab, but I think that they maybe understand this marketing playbook that Gabe was talking about in ways that other languages are missing.
Starting point is 01:06:16 Yeah, so if you are a proponent of some programming language, some open source library, some new way to do X, I think that Gabe's rules that he adapted from Crossing the Chasm make a lot of sense, right? Think of a specific use case, pick one, and make sure that that onboarding process for that use case is solid, that it's the simplest thing. People who aren't even interested in all the coolness of the new way you thought to do X, they would still use it because it's just the easiest way. And I forget all his other rules, but make sure there's not already an existing leader in that space. And make sure that you just focus on that use case and leave behind others. Have a very clear message.
Starting point is 01:07:01 I hope you enjoyed the interview. Let me know what you think.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.