###TDL1.0.7 – Audacity ##Intro Rob: Hey, this is Rob. I just want to take 30 seconds and thank the folks at Twilio.com for sponsoring this week's This Developer's Life. If you need voice or SMS capabilities in your application, check out Twilio. We've also received sponsorship from Umbraco. A content management system that runs on Microsoft's .net platform. And if you want to check them out they are at Umbraco.org. Many, many thanks to our sponsors who are bringing this show to you today. Speaking of the show, let's get on with it. As developers, we get a lot of advice. Read stuff on blogs... on Twitter. One of the things you read a lot is, "Don't mess with success." Or, to put it another way, don't reinvent the wheel. The pressure to conform is pretty overwhelming. And, it's because it's, well, the code we write shouldn't be volatile. It should be predictable. It should be straight-forward and understandable, and if you act like a maverick and write something and it's not, well, understandable, you're a bad coder. So, you might be thinking, "Why am I listening to this music in the background?" Well, it's because these guys have the audacity to mess with success. So, consider the song you're listening to. It's Bjork mashed together with The Cure. Two songs that are wonderful, amazing on their own. WHO in their right mind would ever have thought to put them together? But, as you're listening, you might be able to sense that the two of those things put together actually create... a nicer song. It's almost like the song is its own thing, should... like it should have always been. I think it's an amazing track. Now, believe it or not, there are a few folks who actually have left comments with myself and Scott saying, "You know, I like the podcast, but I don't like the music." And if you are one of those people, then this probably isn't going to be one of your favorite episodes. But - the music you are listening to is actually underscoring a point that I am trying to make with this show; which is that the DJ's that do these mash-ups did mess with success. They did reinvent the wheel. And in this case, they took two very popular artists, Bjork and The Cure, and two very popular songs of theirs and mixed into a whole new song. Now it takes a bit of daring. You don't mess with songs like that. It takes more than daring. It takes audacity. A lot of hubris mixed with a little bit of ignorance and you have audacity. Well, sometimes, it just works. Sometimes, you just have to rock the boat. You don't really know what's going to happen when you do. You could end up with something awesome. That is the theme of this week's This Developer's Life. Audacity. Three storytellers today. I think you'll know each one of them. The first one is John Resig, the inventor of jQuery. What in the world was he thinking? There was tons of Javascript libraries out there. How did we end up with jQuery? The next storyteller we have today is Alex Payne, developer from Twitter. Created quite a splash many times when he was at Twitter, and then when he recently left. He tells us his story. And, finally, we talk to Miguel de Icaza, the leader of the Gnome project at Novell, creator of Mono and many other things. Talks about what it takes to clone and reinvent an entire framework in pursuit of a dream. ##Act I: John Resig John: There are a large number of developers, it seems to me, that are just not content… and may just never be content with the tools that they have. I am probably one of those developers. The question's been posed to me before, "If jQuery didn't exist, what library would you use?" And… I would just simply have to say, "I would write my own again, from scratch." laugh Like, I wouldn't switch to another library, because – that... I am - that's who I am. Like, I like the tools that I build.
Scott: That's John Resig, the creator of jQuery. It's a Javascript library that's used basically everywhere. John's one of those Internet-famous people who doesn't really act like he's famous. He gives talks. He does his thing. He mostly writes code. The gravity of what he's done with jQuery really doesn't come through when you talk to him. He's the inventor of this thing... jQuery. It's huge. Like 40% of the sites on the internet use his library. Google uses it. Microsoft contributes code to it. We've effectively said, "Uncle," with our own Ajax framework and we use jQuery. We think it's awesome because it was, in a word, better. There were plenty of frameworks out there. There were lots of good frameworks. Prototype was already out there... Scriptaculuous. Why would John write his own? Again? From scratch? I mean he did say he's just one of those developers, but it takes a lot more than just discontent to decide to create your own JavaScript library. I think it take a bit of hubris, a little audacity, and a heavy dose of moxie.
John: Well, I mean, obvious, I think for any developer, they want to find the tool that is going to make their job the easiest it can possibly be. I don't think any developer really wants to sit down and, you know, just completely write something from scratch. Uh, because if they can find something that meets their needs from the start, it saves them time all around. Naturally, the problem comes that, you know, people can be, chuckle especially developers, phenomenally picky about what tools they want and what tools works exactly right for them. In the case of jQuery, in 2005 or so, I was building a number of different web applications. They were of various complexity. The problem that I saw was that the existing APIs, especially, at the time, Prototype - Prototype was very popular - but at the same time it was the best API that existed. It was better than the DOM for certain. That API, in and of itself, did not help me to make my code simpler in a way I wanted. I wanted to go simpler still, and I also wanted to reduce the amount of cross-browser issues I had to deal with. So, those two things combined sort of drove me to say, "Alright, well, I think it’s probably time to start from scratch. I can obviously take some inspiration from Prototype, from some of Dean Edward's work, from, at the time, there was a library called MooFX that eventually got turned into MooTools. So, I took a lot of inspiration from the different frameworks that existed. I took the parts that I liked, but, at the same time, I kind of wrapped it all together in a cohesive API that I enjoyed and that, like, I felt could kind of alleviate my personal stress. There is this fundamental difference in philosophy between that library and what I want to create. They had a certain elegance to their code which massively inspired me. And I think it... I don't think it can be understated... or I don't think it can be overstated, I should say... just the importance of Prototype in this generation of web developers because what they did is they showed that you can create and write elegant JavaScript code that interacted with the DOM. I think Douglas Crockford showed us you could write elegant JavaScript, but it wasn't until Sam Stephenson wrote Prototype that... that I think we really saw that you could write elegant JavaScript that actually interacted with a webpage, and I think that was, I think, just a huge breakthrough. So, while the internals of Prototype absolutely inspired me; at the higher level, the higher level API that they had, I knew that the API had to be much simpler.
Scott: John wants it his way. He likes the other API's out there, but there's always something missing - at least for him. As he reads the source for various projects and looks at demos out there, you know, that inspiration takes hold. John begins to see the foundation for building something great. In a way, it's like visiting an art museum, you know, you see, as an artist, the techniques that are used by the greats. But you use those techniques and what you learn from looking at that art to create your own masterpiece.
John: Yeah! I think that's a good analogy. Uh, yeah. Learning a new… seeing something done with, say, oil painting that you hadn't seen before... presumably, for example, if you went and saw, you know, like a Jackson Pollack and see what he did with, you know, drip painting, um, you would probably go back and decide to do some different things; playing around with textures and seeing how paint dries and things of that nature. So, yeah, absolutely there's absolutely a lot of inspiration to be taken.
Scott: John's a humble guy. He won't blow his own horn, but you know, it's clear that you can't go against popular wisdom and write your own JavaScript library from scratch if you don't just a little bit of hubris or at least a strong belief in your skillset. John's code powers an enormous amount of websites. I mean, he's gotta feel like a badass now, doesn't he?
John: It certainly depends upon the personality, to be sure. So, I mean, the thing is, like there are a large number of developers, it seems to me, that are just not content, and may just never be content with the tools they have. I am probably one of those developers. The question's been posed to me before, "If jQuery didn't exist, what library would you use?" And I would just simply have to say, "I would write my own again, from scratch." laugh Like, I wouldn't switch to another library, because - that... I am - that's who I am. Like, I like the tools that I build. Um, so, I mean, the thing is, going back to your question of, you know, like when do you realize, or, you know, when do you get, sort of, that cockiness? It took me years to feel confidence in my JavaScript code. That was only through significant amounts of trial and error. There's a lot of work, I feel, that has to go into becoming at least a somewhat competent JavaScript developer, especially in relation to doing cross-browser development. Most of that knowledge can only be learned through experience, and it isn't taught in anywhere - you can't just pick up a book on the weird browser bugs that exists. Most of the time, you just have to learn them the painful way of finding them, then fixing them.
Scott: John's got drive... just a dash of ego, which, as you can hear for yourself is not really arrogance. Clearly some amazing skills. It takes more than this, though, to swim upstream successfully. What about luck? Are there other jQuery's out there that didn't get the breaks that he did? Is jQuery the result of stars aligning, just so, behind John’s skills and ego and just general discontent? I asked John that next.
John: Almost definitely. Yeah, Absolutely. I mean, like I’ve said, I've seen a number of other frameworks spring up over the years. Um and none of them ever really caught on in a significant way. So, I think one of the fatal mistakes that developers make when they're working on a new library, especially a new set of tools, is that they don't get other developers involved early enough. I mean, obviously, you should first build something that works for you. But, at the same time, once you have something that works for you, you should immediately stop and release, and then get feedback from the general community and start to iterate. I start to chat with friends while I was working on it. You know, I just started to show some of them the code I had written. Some of the API. You know, they gave some feedback. But, I didn't necessarily... like, I didn't want to put up a website and announce it until I felt good. It's kind of funny... I ran across a notepad of mine the other day. I actually interviewed for a position at Yahoo! back in the fall of 2005. And I have written on my notepad... I said I had written down things I wanted to mention in the interview to bring up. One of the things said, "Talk about jSelect." And jSelect was my early term for jQuery, you know, before it became jQuery. I don’t' remember if I brought it up in the interview or not. Um, but I just thought that was kind of amusing. I did not get the job. laugh
Scott: Maybe I'm the only person to find that amazing, but just in case you missed it...
John: I actually interviewed for a position at Yahoo! I did not get the job. laugh
Scott: Certainly, interview loops are more than just technology gauntlets. They're also places to find out whether a programmer has personal skills. Whether they can interact with a team. Certainly, in this case, it's Yahoo!'s loss, but he was driven... he was discontent... he was ready to make change. Isn't that what a company wants in an employee? They want someone who won't just let the frog be boiled quickly. They’re a frog that's being thrown in to a hot pot, and they don’t like it and they're going to make change. But, sometimes, you push too hard, you don't fit, but isn't real leadership taking the hard decision-making… the hard choices, and pushing back against the status quo, even when all the odds are stacked against you?
Now I don't care how good you are, but when you are building code that other developers are going to use, frameworks, rather than applications, you're probably going come up against your own limitations as a developer. Now, John is clearly a smart guy. But, when someone makes a big maneuver, big audacious maneuver, you have to ask yourself, "Was this too much? Was this too audacious? Did I just dig myself a hole?"
John: Almost all the time, it doesn't make sense to write a framework from scratch. No. There's a phenomenal amount of code in Rails or Django... even, even jQuery, at this point, that having to replicate would just be an exercise in frustration. I think developers sometimes lose themselves and don't think as pragmatically as they should. And that the end of the day, you have to ship. And, if you spend all your time, you know, refactoring your framework or even building tools to help make the process simpler. And at the end of that, you don't have anything to ship, you know, there's really not much of a point. In that regard, at least in my personal development, I try to be you know very exact. Like, if I try to look at the problems that I'm trying to tackle, and I try not to overextend myself. If I'm just converting some lines in a text file. Sometimes, I'll just do it by hand because it's faster than writing the multi-line regex that it'll take to parse it all. So, I mean, yeah, it's, I think, at the end of the day you have to be… you have to be smart about it.
Scott: You can read more about John, his programming style, and his efforts on jQuery on his blog at http://ejohn.org. You can read more about jQuery at jQuery.org. Many thanks to John for his time. ##ACT II: Alex Payne Rob: Everyone knows what Twitter is. It's that constant stream of noise and voices bleeping at you throughout your day. When Twitter launched, it was a good idea right off the bat, and most the people I know had Twitter accounts within a week, possibly two. I remember when I signed up for Twitter. It was at MIX, and I wanted to know where people were… and Twitter was the obvious answer to the problem. And, to say that Twitter grew amazingly fast is an understatement. Everybody's aware of Twitter's growth problems. So, I don't need to go into that here. But, imagine that you're the development lead for the Twitter API, the thing that all third party Twitter clients actually talk to. That's a pretty high-profile job at probably one of the most visible tech companies, outside of Facebook, on the planet. It takes a little bit of nerve to walk away from that, and that's exactly what our next storyteller did. We talked to Alex Payne about audacity. Not only the audacity to leave Twitter, but to also start a new company that is, of all things, going to reinvent an industry that has been around since, well, I guess industry began. Well... Bold maneuver. That's TWO bold maneuvers.
Alex: With Bank Simple, it's basically let's go out and fix banking. That's... It's kind of nuts when you think about it. Our creative director is fond of saying that there is something kind of punk rock about starting a bank because it seems really fundamental. It's like a hospital, or a school. It's something in your community that's like this bedrock that's just always been there. You know, you don't really think about someone going out and starting it. SO... that, the idea of, you know, going and planting the seed yourself is weird.
Rob: Yep. I'm going to have to agree with you there Alex. Now, I was around in the dotcom boom. Turn of the millennium. I was doing my thing, surrounded by startups that were going to change the world. Not a single one of them tried to reinvent banking. You've got to remember, back then, companies, marketers, sales people... all the people in the tech industry were full of themselves: fool-hardy, precocious, ridiculously brash among other things. But, not a single one said, "I'm going to reinvent banking." But here we are! Alex is going to take that on. But to me that is not the most interesting part of his story, it's that he left Twitter to do it. He had a key position there. He was making a massive difference in peoples' lives. And he left that. That, in itself, is an amazingly brash maneuver. But then he left it to go reinvent banking. Who does this kind of thing?
Alex: An up and coming company doesn't stay up and coming forever. I mean, at a certain point, tiny little start-ups grow into... if not big, established companies, at least companies that are heading in that direction. And, my sense is that people who really love being in the earliest stages of a startup just aren't cut out for big company life. I think it, in a way, it’s something I might end up chasing throughout my career... is that first crazy couple of years of a new business and just doing that over and over again - which sounds exhausting, but anything else isn't motivational for me. It's a different kind of exhausting. It's the grind of figuring out... navigating the politics; navigating the organizational structure. That stuff isn't appealing to me. I think some people thrive on it. Some people thrive on coming into a big organization and making it more effective and making it their own. They like the support that comes with that. And, in some ways, I kind of wish that was my thing because I think it would be a lot easier. You know, there's more of those jobs out there. But it doesn't have the same draw. You know, we're all going to come into the office in ratty jeans and t-shirts, or this sort of like Mark Zuckerberg flip flops and sweat pants that everyone is talking about now. But, then, you know, we're going to work 20 hour days to ship a product. It's very weird. People are simultaneously very low key about many aspects of their life, but then totally driven when it comes to work.
Rob: Working at a start-up is really addicting, and I've worked at a number myself. The unfortunate part is that, after a while, you kind of have to make a choice. Because, there's really only two ways you can go as a startup matures. Either you start making money and go out and hire a CEO, a COO, and a bunch of other C-level type executives... and then quickly you lose the flip-flops and the hoodie. Then, life around the office becomes just a little bit more conservative as you try and please investors and clients, or you struggle to make money and people come up with ideas of things you can change and things you can do... and next thing you know you're thrashing 20 hours a day into the night burning yourself out and, well... for some people, both of those paths lead straight to the front door.
Alex: Before I worked at Twitter, I worked for an information security consultancy in the DC area, and it was a really fascinating place to work that the work they did was really high-impact and, basically, that the mandate they got was like some other agency or military branch wasn't able to do the job that we're asking you guys to do. So, however you want to do it, whatever technologies you want to use, whatever development methodology, the customer never cared, was just like RESULTS. That was the only thing that mattered. When I joined, there were a bunch of guys that had been working there for a while, the team was growing, and they kept very much the same attitude. And, it’s just like, let’s bring in talented people and, however they want to work, as long as they get results, that's great. And, I was in this environment for several years. Um, it was really demanding, but really fulfilling. And, one day, one of the guys who'd been there for a good long while - and to me just seemed like a bedrock of this group - um left, and it was kind of a big shake-up because in that culture, people just didn't leave. It was something that - the guy who hired me for that job is still there, and he still loves it, and he's still recruiting other people... you know, he's "a lifer." So, at the time, I had a really hard time understanding why this guy wanted to walk away from what, to me, at the time, seemed like the perfect job. Like, the work was really interesting, total freedom, um pay was reasonably good. They definitely took care of us. And now that I have kind of - you know I - for me being lower down on the totem pole there, it wasn't a super high-stress job. Like, there were stressful periods, but I didn't feel the weight of the world was on my shoulders there cause, at the end of the day, the work that I was doing was just making it easier for other people to do their jobs. I guess I was kind of a tools developer in a way, and now that I've... I've had a little bit more experience, I kinda... I kinda get it a little bit more. Being the key person on a team is... great. It's really nice to feel necessary… but it's also exhausting. I don't wanna sort of overstate my... how hard I work basically. There were... our key operations guy at Twitter KILLED himself for, you know, two... three years straight. I mean, just craziness. I put a lot of work in, but nothing... nothing quite like that. I definitely pushed back when I felt like it was too much.
I know that the center of the tech world is in the Bay area, and I know that moving here, being here, disconnects me from that. Um, and that making a long-term commitment to being here is, in some ways, a career-limiting decision, and it means that I'm gonna have to make my own fun, you know. If I want to find a really fulfilling job here in Portland after I'm done with Bank Simple, I'm probably going to have to start another company. But, I think, that's also something I've kind of accepted. It's the tech INDUSTRY for a reason, right? There’s a system. There's a process there from the hub of venture capitalists through the people who float from company to company turning them from start-ups into big businesses. You know, there's a kind of hamster wheel that people run. So, yeah, it might be harder to find work outside of that, but I think, at least for me, the work I'm gonna find is going to be more fulfilling. So, it's only career-limiting in the kind of, like, broadest sense.
Rob: It's pretty easy to listen to Alex's story and think, "He's just a malcontent. He probably wouldn't get the job at Yahoo! either." He just can't sit still for period of time, or we could be positive and look at Alex and say he's a specialist, he's a builder. He likes to get in there and get dirty, and work himself to the bone to get an idea off the ground. As a founder of a tech start-up, you need people like Alex and John. So, coming back to Alex's story, he has decide to leave Twitter... a pretty bold move in and of itself, because Twitter has basically outgrown him. What he needs is a challenge; the challenge of the build. And, he's decided to take on probably one of the most monumental tech challenges you can take on... reinventing banking. As he and Scott were talking, Scott asked him point blank, "Doesn't that take just a little bit of hubris to think you can pull that off?"
Alex: laughing Yeah, in a way it is. I've been in these kind of tiny, growing start-up environments several times, and every time I've gone in search of a new one, I've found a slightly even crazier idea to pursue. The question is, "What's your motivation?" right? I think it would be hubris to say, "I am smarter than everyone else, so I think that I can do better than the established players." You know, if our mission was we're going to be bigger than Bank of America - who you know, the other day I heard, you know, something like over a trillion dollars tied up. You know, that's like a sizeable percentage of the US economy is like tied up in Bank of America. If that was our goal, that would be hubritical. In our case, it's that we want to start the equivalent of a small to medium size bank that just does really well by its customers, and pushes banking technology forward. That, hopefully, is a more modest goal.
I think the new idea is that for the most part, banking should be this kind of automated service. It should be this like app that you would install, and you put your money in this app... and it just does the right thing for you. That's the new idea. Ideally, it's the... you hand it to the bank and you get your 4%. You're not going to get 4% in this economy. Even ING Direct or Allied isn't going to give you 4%. Maybe you could play it in the market and get lucky. And, realistically, what we're building isn't for people who have millions of dollars to invest. It's for the sort of average middle or upper-middle class person, where maybe they've got $20-$30K tops. You know they're... they're not quite at the point they need a money manager. Maybe they're not even quite at the point where they want to take a significant portion of their assets and invest it. You know, they want that $20k around in case their car gets totaled - or that kind of thing. There. We can do the right thing with that model. We can get them a decent interest rate. We can make sure that as their paychecks are coming in and it's moving over to savings, you know, you don't have to think about it. That's the way I'd kinda like it to be. I'd... That's the simple part right? You know, you put your money in, you don't think about it. Periodically, you check in and hopefully we have some good recommendations for you... about how you could make even more. Rob: Alex knows he's a ground floor guy, and in listening to him talk about the opportunity he has with Bank Simple, you can't help but hear the excitement in his voice. And, at the same time, you can't help but hear the pensive tone in his voice as he reflects on his time at Twitter. For those developers that like the start-up life, this is a bit of a drawback, having to say good-bye to a place that you invested so much time and effort in. Alex: In late 2006, I started talking to the folks at Twitter when they were still this little side project of a company called Obvious Corp. that was supposed to be this kind of incubator for different web start-up ideas or web app ideas and, at the time, I thought OK you know these guys are great. Ed Williams started Blogger, a real interesting person to work with. You know, I'll move out there, we’ll work on Twitter for a few months, then we'll work on some other projects. I'll get to see a lot of variety, and they were nice enough to move me out to the Bay area, but a couple of months after I arrived, it became really clear we were never going to get to any of the other Obvious Corp stuff; that Twitter was it. Which was a big mental shift. It wasn't exactly what I was expecting. You don't necessarily want to leave out of sheer anger or disappointment over a job, because you don't necessarily know that the next situation might be better, and you don't wanna leave because someone else is dangling more money in front of you - because that's usually a ruse. But that sense that I have to go do this other thing because it's the right thing to do for me personally, or maybe even, I think it's the right thing to do this kind of broader picture. I think that's the perfect motivation for a change.
Rob: You can check out what Alex is up to these days by heading over to http://BankSimple.com and they keep a bog and they are accepting sign-ups. They have recently closed a round of funding, so it look like they are getting off the ground. In addition, if you want to read Alex's blog, it's up at http://Al3x.net. Except the E is spelled with a 3. Many, many thanks to Alex for his time for this story. ##Act III: Miguel de Icaza Rob: When I think of audacious programmers... when I think of programmers that are just so powerful and out there that they can only be described as sassy, I think of my good friend, Miguel de Icaza. Over ten years ago now, he, along with Nat Freeman founded a company which eventually re-implemented Microsoft's .net platform, except for Linux and Unix. It’s an unbelievable story, and frankly, I just want to understand did Miguel think he was getting in over his head? Let's let Miguel answer this.
Miguel: It was actually a little bit of jealousy because we had been building an email client for about a year at that point. We'd been writing an email client for about a year at that point. We'd been writing and email client for Linux that we wanted to be very user friendly... kind of take some ideas from Outlook and other email clients like that. And we were building this in C, completely in C, a little C++ at some point. We were completely bought into the completely component model programming. And we were about a year into the development, and it had been very painful... very very painful. Every memory corruption bug... every double free, every allocation problem you could think of. You know, and we had about 12 people at that point. The team eventually grew up to be 17... but we had about 12 people at that point, and it was painful. Machines back then, in 2000, were not very fast, you know... so there were a couple of problems like that. Machines were not very fast. We had a relatively large team of people working on the same codebase, introducing different features. And, when Microsoft came out with C#, we really liked what was there. Properties were mapped beautifully with what we were doing. Events, because we were doing GUI programming, so we raised a lot of events in our applications. Uh, the managed model, garbage collection, not having to manage your own memory and so on... and we were a little bit jealous about that. At the time, although there were scripting languages in Linux, because it was a Linux application, we had Python. None of those things really worked or performed well at the time. So, Python... scripting languages were really out of the question for this application. Remember this is the year 2000, and we're building a desktop app with limited resources and you know on the target computers. So when Microsoft came out with the .net framework, we felt a little bit jealous that Microsoft was getting this amazing technology and we're still a little bit in prehistory, building this thing. And Java had a kind of rough start with Linux. It's a very complicated story, but back in 2000 it was a fairly rough start for Java. There was no... since we wanted to be on every Linux distribution, there was some requirements that everything we built had to be open-source, and from the ground up... so , we couldn't really take a dependency on proprietary Java, right. so it had to be everything open-source. So that’s when we said, "Let's go build our own .net implementation."
Scott: For those of you who don't know who Miguel is, he started the Gnome project in 1997 making a free desktop environment for Linux. He's worked in Linux for years. He event create a spreadsheet program called numeric. But, he's most well-known as the creator of Mono. Mono is a clone... a reimplementation of the Microsoft .net framework. Except, this time, open-source. It's a black box. Meaning that they didn't look at the source code for .net. But still, things that you write in .net on Windows probably work on Linux under Mono. It's an amazing piece of technology.
Miguel: It took about a year. It took about a year to go from no code to have a full bootstrapping C# compiler, and about another 4 months before we had our first GUI applications running on Linux. So, it was relatively fast, and we were a team made up of about 6 people at that point. So, it looked... It's the opposite of what mirror says, "Objects are closer than they appear." So, it's exactly the opposite. You know, you believe that objects are closer than they appear... They are actually further away. So, we thought, you know, 6 months of this, we can use the Microsoft C# compiler... we'll just build the class libraries in the VM, and how hard can a JIT be? You know, we'll buy a couple of books and we'll build a JIT. And, I think, in fact, we built the JIT very quickly. Once we had the VM running, the VM took about 6 months. So, we started in July, and by December we had a VM working. It was very primitive as it was an interpreter. We also had the C# compiler, on the other hand, on Windows bootstrapping, so it was able to compile itself on Windows, so we felt we were on the right track. Then, it took us about another 3 months to turn the interpreter into a very primitive JIT, or 4 months... a very primitive JIT. But, by, you know, when June rolled back and this was a year after the process started and we had a full system running, and uh, then it was relatively simple. We were very excited. There was a lot of excitement in the community. A lot of people stepped up to help. And, it just kept growing from that. Initially, it was very simple. C# compiler, VM, Core class libraries. We weren't even building System.Xml. That would come at some point in the future, and things kind of just got together. It's been like that the whole time. It's been driven by small successes all the time. You know, not big successes... just tiny, incremental successes.
Scott: A year. Have you ever tried to write a compiler? You know, I think I did in school, but not a full-blown C# compiler that can compile itself. Miguel and his team had never written one. It only took them a year. That's insane. It's brash. It's ridiculous.
Miguel: So, I never wrote a compiler before, other than an expression evaluator... like you do in high school or your first compiler class. So, this was a challenge; learning to build a compiler... and it was actually a lot of fun… for a team that had never done that before.
Scott: For those unaware, Miguel is saying JIT. J-I-T. This means "just-in-time" compilation. It’s a feature of the runtime. It means you're going to take some interpreted byte code and turn it into machine code... just in time... on the fly.
Miguel: So, I was. That was incredibly interesting. The other problem is that I am notoriously bad at estimating. So, maybe that had something to do with it. When we started our company, Ximian, in 2000, we got our first investment from friends and family. So, we got Nat's parent's gave us ten thousand dollars, some friends gave us another ten thousand dollars... a friend that we met on IRC gave us sixty thousand dollars. And, we said, "Alright, we're a company now... we're serious now. And although we're Linux people, since we're a serious company, we're going to go to the MicroCenter store and buy everything that a serious company needs." So, we bought 3 things: we bought a PC with Windows, we bought a printer - we needed a laser printer to print documents, and we bought Microsoft project. And we spent the whole first night entering data into Microsoft project. And we would take turns, so, Nat will enter the first part, I will enter the second part. We're working in Nat's apartment in Cambridge. And, by the end of the night, around 4 AM, we roughly had everything we needed to build our email client, Evolution. And it included everything from the time it was going to take us to send the software for shrink-wrapping, this was back in the day where CD's still mattered. You know, print the CD's, get office furniture, hire assistant. This was in December, late December of 2000. No, 1999. So, 1999, late December, and we enter absolutely everything we could think of. Second round of financing, get a lawyer, file copyrights, everything... and IPO in June or something like that. But the idea was that we'd be shipping the product in April. So, it was something like 5 or 6 months after we were entering the data... 4 months. So, we're ready to IPO in June. I mean we're ready. We were ready! And, it's about 6Am when Nat hits the re-calc button and Microsoft Project comes back and says April 19. So, April 19 we're going to ship Evolution. And it actually took, instead of 4 months, 2 and a half years to build. So, maybe by building compilers and jitters and things like that, it's just because I'm notoriously bad at estimating laughs.
Scott: Most people, myself included, would cringe if they think about slipping a due date on a project by TWO YEARS. But, most people wouldn't clone a framework because they didn't like the existing choices. Just to write an email client… this is a big thing. Talk about audaciously bold maneuvers. Remember that their goal was to ship an email client, not to reinvent .net. But how do you keep yourself motivated under circumstances where you've slipped a date on the original project by two years.
Miguel: You know, one time I met... I was at some conference in Switzerland, and after dinner was over, it was a conference of technology people and business people - all kinds of other people - and after dinner was over, it was a long day of meetings - they said, "There's this guy that came from the United States, and he does great talks, you should really go there." And I was sitting next to the princess of Sweden, and, you know, I was trying to talk her up. I was trying to say, "What's your name?" and stuff like that. And there was a handler there that would interrupt everything. You couldn't really get to the princess without the handler in the middle. So, I'm kind of disappointed at this point that I want to get to talk to the princess. And they say, "Well, there's this event here. This guy came from the United States. He's a great speaker." I'm a little bit tired. I want to go home. But, they said, "You really need to go see this guy." So, "OK. Let's go see this guy." And it turned out that he was the director of the Boston Philharmonic, and he had written a book with his wife about the art of possibility. So, we go into this room, and, here, we see the director of the Boston Philharmonic telling us to not worry about the future... to always look at the bright side. He has great examples and great stories of what he does with his students, uh music students... And it's a fascinating story, so I leave that room thinking, I mean, "This guy opened my eyes to a whole new world of..." Every time something went wrong, he would look on the bright side. For example, his flight had been cancelled to go to Switzerland. And he had two options. He could had stayed in Boston and said, "tst Couldn't make it" or he could buy new tickets, so he would have to pay, out of his pocket, new tickets to get to Switzerland. And he figured, "You know, there's a lot of people waiting for me... there are about 50 people that are waiting for me, so I'm just going to take this flight, and instead of resting, I'm going to go straight from the airport to this thing." So, he had to go through 3 or 4 connections more just to get to this meeting. He said, "You know, I had an appointment, and I figured..." laugh "I'm not going to just sulk here and get depressed." So it kind of changed, a lot, the way that I saw the world. You know, programmers tend to get complainy, and they complain about things not being perfect. Things like first world problems on Twitter. And, this guy, he radiated Joy For Life. And I've never seen somebody radiate such joy for life, you know, like this guy. And, I said, "You know, I want to be like that guy. I want to be able to take on those things." Ever since then, I really haven't seen it - any other problems. It has kind of blinded me to a lot of problems. Every time someone say, "You know, there's going to be horrible path in here. Oracle is going to hate you. Or Microsoft is going to hate you." All kinds of excuses that people make. The reality is that they are all excuses. And you realize at some point that we're programmers. We're machines designed to find bugs in software. We're machines designed to look at little corner case of the off by one. We're perfectly tuned devices of complaining and finding problems. And kind of meeting this guy made me realize that although you're always going to have problems. You're gonna have bugs, and you're gonna have all kinds of issues. You can always find solutions, and for many years, every time somebody said, "Oh, we can't make that," my response was always... "Oh, that's a weekend hack. That's a couple of hours hack." Now, it doesn't have to be a full product. It doesn't have to be a full solution. But, if you start thinking of things as, "These are weekend hacks..." or "Yes, it can be done in a couple of hours over the weekend - 8 hours" It doesn't have to be perfect, but you can kind of make some progress there. It helps you change a lot of the way you see things. Now, it still took us 2 years and a half to ship the product, but I think we had a lot of fun during the process. We were never bummed out about something that wasn't possible to do. There were always challenges, but you know, you always find a way.
Scott: Seems that there's not much that will intimidate Miguel, but as we wrapped up the interview, I asked him, "What's your next big project? What's the bold move are you going to tackle next?" It turns out Miguel does get scared.
Miguel: My, my, my daughter. I think my daughter is my next big project. laugh When we took the baby home, I was like, "I don't know what I'm going to do! I don't know how I'm going to keep this running!" I mean I felt like, you know, does it use batteries? How do we… I don't know! I mean, if she starts crying, I don't know what to do. But eventually, you know, we figured it out... we're very happy, and I'm very psyched about the baby.
Scott: This has been episode 7 of This Developer's Life. [sign-offs & thanks to sponsors]