 Hi everyone Who's that ridiculous guy? I don't know just Crazy stuff going on at this conference. How's everyone doing? Are you having a great first day? Rodolfo just told me that this is the largest little bit conf ever. I am so happy for him. What a fantastic success This is my sixth out of seven And I'm so happy to be here again for my second time in Montevideo Second time in Uruguay last time I came for vacation and in order to have a vacation I didn't tell anyone I was here and then I hid in Punta del Este for ten days With no internet connection. It was wonderful. Wonderful All right, let's get started. I want to talk about Software development culture in this unique area of open blockchain Software development. So first of all, how many people in the audience are software developers? Whoo quiet quiet a lot and how many people are not software developers at all like no Interest or understanding on how to code fantastic. We welcome you to That sounded very patronizing but no we do You know there's something interesting that happens in our industry Which is there's a very fundamental difference between the people who are involved in software development and the people who come from a financial background and One of the reasons for that is that those two domains have never come together The way they have come together with Bitcoin and open blockchain technology For the first time money is software and software is money Protocols determine trust security is based on open systems, and it seems contradictory in a financial space the idea of open systems is the opposite of security, right? because in open systems the basic idea is we let everyone participate and In finance the basic idea is we let no one participate Unless we know who they are and then sometimes not even then All right, so open systems versus closed systems and the cultures of the people being involved in both of these spaces are very very Different and in fact you can see that every day on the conversations. We have online on social media right Especially when you see some people who come from a financial background from an economics background or even from a libertarian and Austrian economics background where they see no value in the software side of the industry and Consider anything that's not Bitcoin as a waste of time kids playing with software creating new terms and Trying to do new things and they're full of bugs and all kinds of broken And then at the same time you have people who come from a software engineering background Who neither understand nor want to understand the world of? Finance a conservative bankers who needs a monetary policy DeFi for the win That culture clash is really interesting because These two cultures have been apart for a very long time And of course you've got one culture software engineering, which is a very new and young Culture with a very new and young industry and science Coming to meet a very conservative very old culture that has been around for centuries And that culture clash has felt a lot in our industry and outside our industry Outside our industry. We're just the weird people trying to do software as money, right? In sorry at our industry There's all of these weird bankers who are not seeing the world as we see it Which is of perfect software that's easy to use and they're stuck in their ways With their models and that that clash is going to change and the reason is going to change is because the fundamental idea behind Bitcoin which now is a whole ecosystem is The idea that money can be software pure software It can be implemented as a pure protocol not an institution of trust But a protocol of trust a language of trust in pure software Money as a content type money as a transmission protocol money as data and That is a fundamental shift in how we see money and have seen money for centuries Because for centuries we've seen money not as data, but as something physical the more physical the better, right? and Bitcoin represents the exact opposite of that it represents something that is invisible That is implemented in software, but can deliver trust as a protocol service but This is a new space and we don't quite know how to do Software programming for financial applications. This is complicated stuff Well, one of the interesting things that all humans do is they assume that if they have expertise in one area They can easily transfer that expertise to every other area, right? So if somebody's smart in one space, they think We think that we are also smart in any other space that is even closely related so that's how you end up with People who are really good at programming thinking they can also be really good at financial engineering Or people who are very good at financial engineering thinking they can be very good at programming of course reality has a way of Breaking that vision quite quickly. It's like so we built this thing and it was a decentralized Autonomous organization we fundraised $150 million and then we had a bug and everything got stolen, but it was fun while it lasted This culture of systems is really interesting You know, I've been working in software since I was 10 years old when I first encountered software Programming for the first time in my life and I was immediately in love I was in love with this idea that you could take just thoughts and convert them into something that Worked that did something you could take thought and convert it into action I don't know if that is a form of art It's certainly a form of expression taking things that are purely in your head Writing them down as a series of instructions and then the moment when the computer actually does what you told it to do Often not what you wanted it to do After would you find out that you told it to do something slightly different and it followed it? Absolutely correctly and not what you wanted to do But that moment is golden if you've ever had that experiences. It's an incredible feeling of control and of the ability of People to conquer machines. I think it satisfies our ego to be godlike and tell the machine computer Do as I say not as I mean, but as I said Let's see what happens that moment when it goes. Well, it's beautiful, right? But It's not a science in many ways This is such an early science that we still have a lot of ambiguity one of the great programmers of our era once said if we built houses The way we build software One woodpecker could end civilization And it's so true, right? And now we're discovering what happens when you try to take the fragile complex and Often very vague world of software and introduce it into the machines that govern our lives a great example and one of my hobbies is aviation and You know, it's one thing to tell the computer to put a pink box here and the computer instead Puts a pink box there, and you're like fucking CSS Was it floats? And then you're like you spend four hours trying to move the pink box from here to there I mean, it's frustrating But when instead what you're trying to tell the system is if you're Boeing 737 max Noises up here push it down there and instead it's here and you push it down there Bad things happen, right? So introducing software into engineering disciplines into engineering industries without the rigor that most engineering Industries and practices have causes bad things to happen And this is because software engineering is still a new science, you know How did engineers figure out how to make bridges that didn't fall down? It's really simple. They spent hundreds of years making bridges that did fall down Right and every time a bridge fell down. They went. Oh Interesting so if the wind blows just like that whoops We should do it differently next time and then repeat and iterate, right? And then you build a building and it stays up for a while and then it falls down and lots of people die And then you go oops, and you build a better one next time Really in order to get to an industry where you have Very good execution very high accuracy of deliverable very high quality control What it takes is simply five or six hundred years trying fucking up and then trying again, right? Until recently, however in software The results of our fuck ups are rarely lethal and They're rarely destructive for entire economies Right the pink box in the wrong place isn't going to destroy the world The nose attitude of a 737 max is gonna kill a lot of people So we're making this transition of software into the real world Without yet having the engineering discipline and this is a bit of a problem How do you fix that problem? There are a number of approaches to fixing that problem one approach is to take and apply rigorous mathematical proofs In order to ensure that before the software is used in the real world, you know exactly what it will do Exactly what it will do under all possible Circumstances and then you have a slightly better chance of succeeding The other one is to throw the software out Test it under difficult conditions by having real people do real things with it with real money And then when inevitably it does crash and people lose their money You go oops and you try again and again and again and again And you iterate as fast as you can Improving and you say listen. I know we still have bugs. I know there are still bugs in the code, but We don't have that bug anymore That one we fixed there may be more, but I'm pretty sure that one isn't happening again We learned the lesson the third time So how do you marry these two worlds? This is a very interesting concept And it became much more serious on January 3rd 2009 when Satoshi Nakamoto unleashed the software of Bitcoin onto the world Now a lot of people have asked me. What do you think of Satoshi Nakamoto's work? I say as the most brilliant white paper. I've ever read nine pages concise Insightful predictive just a brilliant scientific paper The software I mean really if there's something you could say about Satoshi Nakamoto not a very good programmer Because as soon as that software was released a whole bunch of much better programmers took one look and went oh We'd better start fixing some things here because there are some nasty bugs in this software And then an interesting phenomenon happens and the interesting phenomenon is that when you operate inside Consensus critical systems. What does it mean to say consensus critical systems? Systems that follow rules that cannot be changed and follow them precisely While trying to synchronize Across thousands of computers that are also following these rules systems like that are Very difficult to manage and one of the reasons they're very difficult to manage is because it doesn't matter if the thing Isn't doing what you expect it as long as all of the copies of the thing are doing the same thing Which means if you introduce a bug and all of the copies of the thing Believe that is the correct way to do it. Well now it is Because someone went and put money against that bug And now you've got to carry it forward It's difficult to understand that to people who are not into software engineering But again the fundamental issue in software engineering is the computer does not do What you want it to do it does exactly what you told it to do even if you told it wrong Every 2016 blocks in the Bitcoin blockchain We go through a dance called the difficulty retargeting algorithm The difficulty retargeting algorithm ensures that we recalibrate the difficulty of Bitcoin mining in order to achieve a 10-minute target between blocks It happens every 2016 blocks and it takes the average time of the previous 2016 blocks in order to decide how much time a block should take. Oh No, actually it takes the average of the previous 2015 blocks. Why? oops So Bitcoin on average issues blocks at just a hair less than 10 minutes Why because there was an off by one error an Off by one error if you're a programmer, you know what that means It means that if you if you want to go to the third floor of the hotel and the hotel numbers the ground floor is one Then the third floor is three, but if it starts numbering it at zero then the third floor is actually two And if you do that in programming bad things happen So there are bugs like that. What do we do about it? Absolutely nothing. We can't fix it We can't fix it because it's the basis that every block has been calculated up to now In order to fix it you have to put a rule in the software that says until the block where we fix it do it every 2015 average But from that moment on after do it every 2016 average now in order to make that fix you've now introduced Five or six lines of code into the system and you have to get everybody to coordinate and launch that code without fail Because if some people don't launch that code at that retargeting period They're going to get the wrong answer and they're going to end up on a different chain call it Bitcoin slow Because it's gonna issue blocks a bit slower and you're gonna have an inadvertent fork So you have to have a massive coordination thing in order to introduce three or four lines of code to fix the problem That does it really matter? No, so Okay, for the rest of history Bitcoin is gonna do that calculation wrong When multi-sig was introduced The multi-sig script had a bug in it and it didn't work unless you had an extra item on the stack because it Did one too many pops Great every single multi-sig script since then has an extra item on the stack. Why because the fix Was worse than the problem Because actually creating a fix again massive coordination And what do you do about the multi-sig scripts that have it versus the ones that don't have it the ones that followed The bug versus the ones that didn't follow the bug How do you coordinate that everybody knows when the bug gets fixed and then is it worth it? Because maybe in the three lines of code you add to fix this problem You have a worse problem And now you have to add three more lines to fix that problem Writing code for blockchains is very difficult I describe it a bit like a ship of consensus that gradually has Barnacles that attach to the hull and these are the bugs that were introduced in the codes and then now The rules of consensus did we mean them to be the rules of consensus? No, but they are and so what do we do? We carry them forever Because we need to be able to make a client sink even if it's never seen the blockchain before From the Genesis block all the way to today without too many rule changes It is an incredibly difficult environment to do software engineering and None of us know how to do this right I'm certainly not a good enough programmer to work in that space. I prefer doing this stuff But there are even great programmers who make these mistakes and it's a very difficult problem to solve I Think of it as the straight jacket of consensus You may think that things that are not part of consensus don't matter and In April of 2013 we discovered that a database bug that wasn't part of consensus caused the 26 block fork divergence That was almost catastrophic for Bitcoin Because even things that you didn't think are consensus Are now consensus Very difficult to do programming in that world There are two approaches to escape the straight jacket of consensus and to move fast Well, actually, there's three one is move slow. That's what Bitcoin does Move slow. It's a deliberate design decision that says This thing is now a hundred billion dollar aircraft with ten million passengers on board And we are trying to do engine maintenance while flying You'd be very careful sticking that screwdriver in there, right? That's the engineering that you're doing on a live Production adversarial global system on which hundreds of billions of dollars are riding It's almost impossible to introduce change that will not be controversial resisted the cause of a fork or Potentially introducing a catastrophic bug so when people say a when a snore signature is coming to Bitcoin When we've tested them and then tested them and then tested them again And then tested them once more just to make sure and then a hundred times more just to make sure again And we'll probably get it wrong the first time there's another way of doing this and that is the method that Ethereum uses which is oops hard fork oops hard fork in fact, let's introduce a mechanism I See you think this is a criticism of Ethereum No You like that They introduce the mechanism that would ensure that hard forks must happen Called the difficulty bomb in order to ensure that you cannot stagnate Core protocol development in the census world development that you force change that you force coordination At least once or twice a year in order to ensure forward momentum That is not a bad choice It's not a good choice. It's simply a different Choice and it has advantages and disadvantages just like the choice the Bitcoin makes which is very slow and conservative development Has advantages and disadvantages and of course the biggest disadvantage is The people can say well, you haven't done anything in two years. Come on Do something snore signatures something increase the block size. Let's throw some stuff out there. See what works. That's not Bitcoin Bitcoin is the state level robust system that resists But that can be Ethereum and in fact, it's great to have Platforms that can move faster and that means breaking things a lot of people in Bitcoin hate that Guess what? That's mostly the finance culture talking because the software engineering culture in Bitcoin Does not hate that they see the necessity of introducing rapid change and iteration because that is the way You build a bridge that doesn't fall down That is the way you build a doll that doesn't get drained and hacked in the first week of its operation You don't build it by magically being right the first time you build it by being right non-magically the 27th time and Assuming that the 26 times when you lost money are okay because they're part of the experiment That is a valid choice and To conclude I'd like to introduce something for you to think about a bit, which is why I'm really excited About the lightning network because the lightning network introduced another valid choice Which is now generating the most rapid development model for Bitcoin that we've seen in the past six or seven years And that model is hey Let's just leave the security to the slow-moving very very conservative core protocol and Let's do all of the fun stuff on the layer above and what that means is if you have five different Lightning network nodes that are operating within the standards All they have to do is agree on the basics and they can go explore things that the others don't agree on They're not operating inside the rules of consensus and suddenly within the lightning development community We have now seen a completely different culture Emerge and flourish check out how developers work in lightning versus Bitcoin And you will see a culture that is much more like ethereum where things are moving fast Where companies are trying new techniques and new solutions that are not necessarily Synchronized because they don't have to be so option number one do it on the base chain very conservatively Option number two force continuous change on the base chain until you can iterate fast enough to keep fixing bugs And now option number three keep the conservative development on the base chain and move all of the rapid development One layer up where you now can play with a bit more freedom and flexibility Because you've left the security for the protocol that does the security right and with a few more Great ideas approaches and a bit more courage We are finally going to develop the kind of engineering culture that even bankers can respect. Thank you If you enjoyed this video, please subscribe like and share All my work is shared for free. So if you want to support it join me on patreon