S01E18 55mSeason 1

Episode Summary
Please enjoy this interview with Richard Campbell, known for his work with the Humanitarian Toolbox and both the ..NET Rocks! and Run As Radio podcasts. Campbell discussed his upcoming book on the history of .NET, which he has been researching for about a year. He has conducted 65-70 hours of interviews with people both inside and outside of Microsoft who have worked with .NET in various capacities, including web development, client-side development, and mobile development.
Campbell’s goal with the book is to tell the story of .NET’s evolution from a product built to support enterprise developers consuming Windows to a cross-platform, open-source product. He wants to reveal the decision-making processes behind .NET’s development and explain why certain decisions were made.
The interview also touched on the challenges of building a new audience for separate shows and the difficulty of getting new listeners, even for established podcasters. Campbell acknowledged the importance of passion and the finite lifespan of any project, as well as the potential for future books on the history of .NET Rocks or other podcasts.
Additionally, the conversation examined the split between the .NET community’s standard framework and .NET Core. Campbell believes that efforts to bring the two communities closer together are necessary to create a unified version of .NET that works for everyone, including those who are resistant to open source technology. He notes that the development of .NET over the years has been a significant endeavour, and it is crucial to appreciate and value different languages’ strengths to create a better product.
Campbell considers software development to be an engineering discipline, but acknowledges that there is also an art to engineering. He believes that software should be functional first and beautiful second, just as a bridge should be safe first and beautiful second. The interview concludes with Campbell stressing the importance of empirical data as the best possible teacher and encourages developers to try new things and make mistakes, without letting scar tissue stop them.
Overall, the interview provides insight into the history and current state of .NET and the challenges faced by the community. Campbell’s upcoming book promises to shed more light on the decision-making processes behind .NET’s development. The interview serves as a reminder of the importance of unity and appreciation of different languages’ strengths in creating sustainable software.
Sponsor Message
This episode is sponsored by elmah.io - Error logging and uptime monitoring for ASP.NET Core.
Episode Transcription
Hello everyone and welcome to THE .NET Core podcast - the only podcast which is devoted to:
- .NET Core
- ASP.NET Core
- EF Core
- SignalR
and not forgetting The .NET Core community, itself.
I am your host, Jamie “GaProgMan” Taylor, and this is episode 18: The History of .NET with Richard Campbell. In this episode I interviewed Richard Campbell about his upcomming book on the history of .NET, and the Humanitarian Toolbox. Some of you may know Richard Campbell from the ..NET Rocks! and Run As Radio podcasts and his work with the Humanitarian Toolbox.
So let’s sit back, open up a terminal, type in dotnet new podcast and let the show begin.
The following is a machine transcription, as such there may be subtle errors. If you would like to help to fix this transcription, please see this GitHub repository
Jamie
Richard
Jamie
Richard
Jamie
Richard
Honestly, we’ve dialled the professionalism down a little on .NET Rocks. In the early days we really looked at ourselves as radio and wanted everything to be perfect, and we fixed every little thing. I think more people are comfortable with the fact that there are mistakes in audio, so we’ve left in things that we thought were funny but were mistakes. I think it makes it a little more personable. We’re in an era now in podcasting where that familiarity is almost more important than perfection.
I would definitely encourage you to leave things in, but don’t waste anyone’s time. If I’m looking for a note, or I have to double-check a fact, I’m going to edit that out. If you fumble on something and it’s a humorous outcome, that’s real life. I think people appreciate hearing that we’re not as perfect as the audio engineers make us seem, that we’re human, that there are real, normal human things in there. Warmth and reality, truth, is more important than perfection.
Jamie
Richard
I think it’s interesting to decide how far to edit. We have done the anti-um thing, but I’m only going to make edits where I know it’s not going to be intrusive, where we’re actually making it easier to listen to the show.
Jamie
Richard
Jamie
Richard
Carl’s original inspiration for .NET Rocks, which predates the word podcast by a few years, was in the speakers’ lounge at conferences, seeing a Billy Hollis and a Rocky Lhotka arguing over the way a particular piece of code should be written. What was the right way? He acknowledged that that conversation was so valuable that everybody should hear it, so let’s capture it.
If you put on a pair of headphones and listen to .NET Rocks, you’ll notice that we position ourselves around a table using panning. I’m a little on the right, Carl’s a little on the left, the guest is more in the centre. I really want to simulate that effect of you sitting at a table with us while we have a conversation.
Jamie
Richard
Jamie
Richard
Jamie
Richard
Jamie
Richard
One of the classic ones is, “why did we make The Tablet Show?” There was this period from 2011 to 2014 where we made 130 episodes of a different show. The reason is something I’m happy to talk about today. I didn’t want to talk about it at the time because I thought we were overreacting, but we came out of the Build conference — the first one, in 2011 — where they were talking about Windows 8 and WinJS, very JavaScript-focused, and they really didn’t talk about .NET. I looked at Carl and said, “what if .NET doesn’t rock any more? What are we going to do if Microsoft is actually going to make this shift?” Not that they were saying they were going to, but all the hints were there. We were a bit freaked out about it. Plus, at that time .NET developers didn’t build stuff for iOS and Android and so forth, so it didn’t make sense to do those shows on .NET Rocks anyway.
Lighting up The Tablet Show was our contingency plan. Here’s a place to put this content that I think is important but doesn’t necessarily fit with a .NET Rocks theme. If .NET is really going away — which we now know it didn’t do, but it seemed threatened at the time — we have another show to fall back on, somewhere we’ll end up putting all our energy.
Then, three years on, by 2014, it became apparent that iOS and Android development was just part of the .NET repertoire as well. It became hard for me to figure out which show I should do on .NET Rocks versus The Tablet Show. They were the same, so we rolled them back together.
Jamie
Richard
One of the side effects of being first is that you have this huge audience because you were first. Could we actually build another show? We didn’t know the answer to that. Even with all the support we had, the numbers for The Tablet Show never got as big as .NET Rocks. It’s just not that easy to get new listeners. It’s a challenging thing, even for old guys.
Rolling it back in was just, why are we separating this? It doesn’t make any sense any more. .NET is clearly thriving and tablet developers are .NET developers, so let’s put this together. Then we consolidated the two shows. It’s a stamp of time: 140 episodes, still running over on thetabletshow.com.
Jamie
Richard
I don’t want to shy away from both aspects of what actually happened with .NET. I am a little conflicted as the storyteller, because I was also there. I had my own emotional reactions to it, my own plans for business around it. I’m trying to take the middle road of what were we thinking? Why was it going this way? Was that focus on JavaScript at the time unreasonable, and did .NET still make sense? I appreciate the idea that you need to question those things from time to time, because if you don’t, if you just presume that you’re right all the time, that it’s always been this way and it should continue to be this way, you’re going to get surprised one day when you’re really, really wrong.
Jamie
Richard
At the same time, of course, with WebAssembly, we’re now looking at C# in the browser. C# becoming cross-platform and open source has allowed us… if you love working in a statically typed, strong API type language, well, hey, here’s C# to help you. You code a different way than you would in JavaScript.
You can make sustainable JavaScript. I look to the Angular guys, the folks working at Google who use TypeScript to help enforce reliability in their JavaScript code. It’s a tactic of how you write your code. You can be successful in any of these channels. You just have to follow the procedures that make sense for your toolset. I don’t like the idea that we would ever be stuck with only one toolset. It makes no sense to me. If there was one right way, we’d all be doing it.
Jamie
Richard
When you have those three groups of people working closely together and they share the problems they’re dealing with, often one of the three will nominate themselves: I think I can solve that problem best, I would do it this way. Maybe you’ll agree that it’s actually the right way to solve the problem. The same comes with coding. These different languages are better at different things, so if you appreciate the differences and value those differences, you actually make a better product.
Jamie
Richard
I do appreciate your sentiment around F#, though. F# for the right problem is remarkably terse. The question is, is terseness an asset? Is it clear enough that somebody can look at that, grasp it, and be able to work with it? What I was able to do in 12 lines of F# maybe takes me 50 lines of C#, but if more people can read that C# and understand it, then it’s more maintainable. That’s why I poke at Perl, because Perl is remarkably a write-only language, very, very resistant to reading.
Jamie
Richard
Jamie
Richard
Jamie
Richard
Jamie
Richard
I am also very aware that much of my wisdom is scar tissue from an earlier age. Someone will approach a technology that maybe burned me ten years ago, and I have to push back on my visceral reaction to that, because it was ten years ago. Maybe it’s different. Just because it hurt you once doesn’t mean it’s still going to hurt you. Maybe lay a few cautions in there, but certainly don’t say no, because you’re not the sole possessor of all knowledge. All you really have is a bunch of scar tissue. If that informs you to make better decisions, that’s great, but if it stops you from trying new things, that’s not great.
Jamie
Richard
Jamie
Richard
Jamie
Richard
Jamie
Richard
It’s no different from raising children, or training a dog, or anything else where the more they understand, the better off they are. Allowing them to see the edges and the dangers and the risk, and to stub toes rather than go off cliffs, is to learn more. You never know: sometimes you believe that there’s a toe-stubber over there and there actually isn’t. You’ve got old experience, not current experience. Time goes by, tools change, methodologies improve, and suddenly that thing that was a really risky way to build code may not actually be that risky any more. That was last year’s problem; this year it’s fine.
Jamie
The reason I’ve asked you to be on the podcast is because I would love to talk to you about a little bit of the history of .NET.
Richard
Jamie
Richard
I’ve had conversations with someone who’s worked in .NET for many, many years, but they’ve always been a web developer, so their relationship with .NET is ASP.NET. Maybe they did some time in Web Forms, and they did some MVC, and they tied in with Entity Framework, but that’s their view of .NET. Then you spend time with someone who’s a client developer, who actually came from Visual Basic, working in the early versions of WinForms, moved over to .NET, but they’re still a WinForms developer. They may or may not have got involved in WPF, but they’re a client-side developer. That’s their experience, that’s their relationship to .NET.
The same for mobile. Windows Phone, the modern one, certainly had a bumpy life, but we talked to folks back in the [Windows] CE era too who were building stuff in mobile. Windows Phone 7 was actually a variant of Silverlight, so a lot of Silverlight folks jumped over there, but 8 was substantially different, and 10 different again. There’s a story there as well in the Compact Framework, and some of the early IoT stuff. There are a lot of different aspects to .NET. It is too broad a product, and I want to make something readable. It can’t be War and Peace. I don’t want this Titanic book; it doesn’t serve anyone.
I also want to honour these different aspects, so I’ve come to appreciate the idea that perhaps what I need to do is not dive deeply into any of the aspects of technology in .NET, and instead talk more about the story of .NET: this product originally built to support enterprise developers consuming Windows, which then evolved away from that into this. Think about February of 2002, when .NET is announced, and literally the tagline is “22 languages, one platform”, which was the counterpoint to what Java’s marketing was, which was “every platform, one language”. That’s where .NET began. Now look today at this cross-platform, open source product. It’s not anywhere near the same product. What happened? How did that happen? That’s nuts.
That’s the story that I’m revealing bit by bit in all of the research. We’re recording this at the end of November, and it’s been about a year of doing interviews. I have about 65 to 70 hours now of interviews done with various people, both inside and outside of Microsoft, about their experiences building .NET. I’m not done; there’s still much more research to happen, so it’s going to be a little while longer.
The meat of that is large enough to recognise that I can just tell that political story and it should be an interesting book. Then the companions could be: how about a book about web development in the Microsoft stack that goes all the way back to Active Server Pages and InterDev, as well as up through .NET itself? The same for client-side development. It’s a way for me to manage myself, to not put too much into the book, but to say there’s a place for each of those things if we can do them all.
Jamie
Richard
I think it’s valuable. I would love to read this book, so I guess I have to write it. I think I’m well positioned to do the writing part, but I am telling stories of others, not myself. Donald Knuth led the industry that is development, and his stories are a proper inspiration for how we should be as developers. Yeah, I’m not going to do that. I don’t think they’re the same thing at all.
Jamie
Richard
To be able to pull back that curtain a bit and say, here’s how that decision actually came to pass, why things worked the way they did… There are some painful moments in .NET history for the average .NET developer who was never an MVP, never worked closely with Microsoft, never really saw behind the curtain themselves. If there’s anything I can do, it’s to let that person know. You remember when you were frustrated with what happened to Silverlight? It was a frustration because it just stopped. There was never an explanation, there was never an announcement, other than what happened in the news, where there were articles saying Silverlight is dead. Microsoft never said a thing. Why? What happened? I haven’t got the whole story, but I’ve been able to talk to folks who were there and pull back some of the pieces of what was going on at the time.
Jamie
Richard
Jamie
Richard
Jamie
Richard
Jamie
Richard
Jamie
Richard
One of my favourite stories around titles is how we actually named RunAs Radio, which is the IT podcast that I do. It’s such a good name; everybody gets it, it’s totally apparent. But how do you get to that name? I’d been working on making an IT podcast for a while, and Carl and I had been going back and forth brainstorming names. Same thing: no idea is too dumb, just write it down. Then we’d go through all the names, and we’d have a session over the phone for an hour arguing about the merits of each one.
One day, after the end of one of those arguments, I’m like, “dude, we’re still nowhere. We’ll go through this brainstorming cycle again and we’ll see if we can get better.” He was like, “all right, I’ll talk to you later.” We hang up the phone, and within 30 seconds he calls back. I pick up the phone. I’m like, “did you forget something?”
He goes, “it’s RunAs Radio.” I’m like, “there it is. That’s the title.” It’s just so apparent when that moment hits.
Jamie
Richard
Jamie
Richard
Jamie
I know that we recently had — I say we, I recently had — a conversation with Steve Gordon.
Richard
Jamie
Richard
Jamie
Richard
It’s directly related to .NET Rocks. The origins of Humanitarian Toolbox come from the .NET Rocks Visual Studio 2012 Road Trip. Going back as far as 2005, Carl and I were able to rent an RV and drive across the United States, making stops and talking about the new version of Visual Studio. The biggest of these turned out, in hindsight, to be the 2012 one.
We knew it was going to ship in the fall of 2012, so during the summertime — I think it was in July, and I actually still have my original OneNote notes from this meeting — I’m talking to some Microsoft folks who are going to provide sponsorship money so that we can rent the RV and pay for things. We put logos on the side of the RV, so we looked a bit like a NASCAR driving from city to city. In the end, the 2012 road trip was 34 stops in 13 weeks. It was a beast.
It was the Microsoft folks who said there should be a charitable element to the tour. Can you come up with a way to include some sort of charitable element to the tour? I think if I’d had any brains, I would have taken the easy way out and simply said, “how about we match dollar for dollar for Kids Who Code,” something like that. It would have been the easiest solution. Instead, I went on a bit of a rant about how frustrated I was with how hard it was for software developers to donate their time as coders to a charity.
Code is never free. If you write code for someone, they have to live with that code. Code is free like a puppy is free: you have to clean up after it, you have to maintain it. Software lives; it needs work.
I think most software developers understand this, and when given an opportunity to support a charity with code, they also recognise that it’s a permanent commitment, that you have to keep going back, keep contributing, and keep doing work on it. Many folks are just like, “I can’t make that large of a commitment, I have too many things going on,” so they resist doing it. I’ve seen codathons — weekend coding sessions to support a charity — where they’ll build a brochureware website, which is a great idea, but again, the charity has to live with that software. At the end of the weekend, the software developer gets to go home, but the charity, there it is: they now have this app with whatever problems it may have, whatever maintenance it needs, and you may or may not be able to get that same developer back. Getting a different developer onto that code is even more difficult. It was a sprint of code, it was a weekend. What kind of code are you going to write in a weekend?
With those things in mind, knowing that developers do want to donate their time to charity and do want to do good with their software… why does open source exist the way it does? Often the software we write at work is not our passion project. You can only do so much forms over data, where you’re like, done it. If it’s paying your bills, you keep doing it, you are good at it, you are valued in that, but it’s probably not your passion project, which is often why we end up in open source, writing things that mean more to us. Could you do that as a charity project as well?
The challenge, of course, is that software is more than the code that is written. It is the project management parts, the planning of features, the writing of user stories, hopefully the organising of tests, then giving a space for programmers to work — and how do you care and feed for the app? That was really the essence of Humanitarian Toolbox: what if we did all the other things, so that volunteer developers could sit in a place where they knew their code could do some good and would be properly cared for, so that they can put in their volunteer hours and then walk away with a clear conscience when they have to do the next things in life that matter to them? That started to work. It took us a few years to figure out how to do it right.
We chose disaster response because it was an equal-opportunity problem. Disasters happen everywhere in the world. Everybody needs help in it. They’re technologically unsophisticated, so there are lots of opportunities to introduce mobile and cloud and techniques that we know how to use to actually improve their ability to respond to these things. It was something that every developer could relate to, whether it was a tornado or a hurricane or an earthquake or a typhoon. Pick your disaster; we could make a difference here with software. That has been the mission.
I thought it was a good enough idea at the time that I literally just went looking to see who’s already doing this, because we’d just support them. I found pieces of organisations and different bits, and we started connecting with them and looking at how they were working, knowing we would be able to recruit, knowing that the one thing we had in our pocket through stuff like .NET Rocks was the ability to reach developers and encourage them to be a part of things. It took time to figure out the right way to do that. Ultimately we ended up creating a 501(c)(3), an American charitable entity, and that provided mechanisms for us to receive grants and to do tax credits. We’re looking at certifying in different international spots, so becoming a UK charity as well, or a Canadian charity as well. The ability to get developers up and running, that worked. Folks wanted to work on these things. We found some great projects and we were able to make contributions.
Jamie
Richard
Jamie
Richard
Jamie
Richard
Jamie
Richard
The allReady project, which is one of the HTBox projects, had an initial implementation focused on a Red Cross initiative for putting smoke detectors in homes that didn’t have them. Look at the early stats from when they were doing this the manual way, where they’d set up a stand at a home improvement centre, take down names, and eventually get enough together that they could send out qualified installers — the volunteers — to install them. Typically it would take a few months to get that whole thing together. On the day that person could volunteer, which would be a Saturday, they’d send them out with eight smoke detectors to install and eight addresses, and people weren’t home, or they’d forgotten about it, or they wouldn’t let them in, so often they’d only get two or three of the smoke detectors installed.
When we were doing the first trial runs using the software, we were now utilising social media to do the campaign, so we’re gathering the names faster. We were able to ship the smoke detectors out to the volunteers so that they didn’t have to go to a central location. We’re using mobile apps so that they have the GPS stuff already sorted out. We tied in Twilio so that on their way to each location they were able to call ahead automatically. Now we were getting 70–80% of the installs done successfully. We used that volunteer’s time more efficiently and ultimately protected more homes.
That’s a real-world consequence for what was not a terribly complicated piece of software. If you think through what that is — organising volunteers, using GPS data to coordinate things, and a little bit of SMS on the side — it’s not rocket science. It’s just the right piece of tech in the right place. Its result is, I think, that we saved some lives. I don’t want anybody to have a house fire, but if you’re going to have a house fire, have a working smoke detector. If we were responsible for getting that smoke detector into that house, well, we saved those people that day.
Jamie
There’s a few of us that get together. A friend of mine, Paul Seal, and James Studdart, who I mentioned earlier on, and we go to random hackathons. We went to one this year in a city called Nottingham in the UK. When we were there, they were asking for something to help the people of Nottingham, and we came up with a system that allowed people to walk around and go, “oh, there’s a vulnerable person in need, and for some reason I’ve got my phone but I can’t make a phone call.”
Richard
Jamie
Richard
Jamie
Richard
Jamie
Richard
Jamie
You’ve had this dual, wonderful position where you’ve seen the evolution of .NET as a first-person event, and you’re able now to look back and listen to other people’s opinions on what happened, their different perspectives, and all of those kinds of things, collecting all of those stories. How do you feel — or do you feel — that the .NET ecosystem, maybe the community, or the way that the software is built these days… have you seen it change much? Has it changed radically? Has it changed for the better, for the worse, in your opinion?
Richard
Maybe they’re not web developers. Perhaps they don’t care about the fact that it runs on Linux, or that it’s open source for that matter. I’m still meeting companies on a routine basis where their company policy is no open source code. That’s not an option, so they have not looked at Core at all. I think it’s very expensive for Microsoft right now to essentially be building two versions of .NET: the ongoing development of the standard framework, which is also compliant with .NET Standard, and then .NET Core.
It’s been several years — .NET Core first shipped in 2016, so we’re a couple of years in — and I think the weight of these two lineages is starting to show. The moves you’re seeing around Core 3 are about trying to bring the community closer together: adding the Windows SDKs that run on top of Core 3, so that you’ll have a WinForms and a WPF which may not be cross-platform or open source, but are designed so that an existing .NET application built against the standard framework could be lifted and shifted and just run with Core 3 and the Windows SDKs on top of it. I think that’s super important, and it’s a movement towards bringing the community together under a single umbrella of .NET.
I’ve certainly seen this in conversations on the show and with listeners, that there’s concern about that split, that there are the Core folks over there and the standard folks over there and they are not going in the same direction. I think there’s an effort at Microsoft to end that, to get them together in the same place. I don’t think it’s going to happen immediately, but I’m appreciative that we’re moving in that direction.
Jamie
Richard
I’m excited about what’s coming. Knowing that I’m still a year away from putting the book out, I expect that by a year from now the story is only going to get better, that we’re only doing more. If there’s any epilogue to talk about, it’s the fact that there is this dichotomy, there are these two worlds. The mission of getting those two worlds closer together is a worthy mission, a positive mission. Maybe it’ll be done by the time the book’s done, maybe it won’t be, but I’d like to end with “the future looks bright”.
Jamie
Richard
But I think it’s achievable. I think everybody wants to be together. I don’t think anybody wants to feel, quote unquote, left behind. Not that I think Microsoft is leaving anybody behind, but you do have a split in innovation going on, and there are actually more divisions than that. The Windows side of things with UWP: that was actually a different build of .NET. With the reorganisation of Windows, I think part of what’s going to happen there is that we’re going to consolidate more of the .NET world into a common version, so that we have more confidence that it’s going to work the same way across the board.
I think we’re not done with Xamarin integration yet, that all of the things that were built by Miguel and his boys need to be improved and need to be part of a whole. I think there’s a vision there of truly a one .NET that works for everyone. I don’t know all the twists and turns that it’s going to go through to get there, but I think it’s a worthy goal. People wonder if there’s anything more to do, and it’s like, I feel like there’s a big stack to do here. We’re nowhere near as good as we could be.
Jamie
Richard
Jamie
Richard
Jamie
Richard
Jamie
Richard
If you don’t have cycles to do coding, or if you’re not a coder, we take donations. We are a 501(c)(3). If you go to htbox.org, there is a Donate Now page. Every bit helps. We largely spend the money on project management; we’ve come to appreciate that professional project management is necessary to keep all of our volunteer developers productive. If you qualify — if you’re in the US, or you have, like Canada does, a treaty allowing charities to cross over — it’s tax deductible.
Jamie
Richard
Jamie
Richard
Jamie
Richard
Jamie
Richard
Jamie
Well, that’s all the questions I have, so I just want to say, Richard, thank you ever so much for taking time out to talk with me today. I realise there’s a huge time gap between yourself and me, and obviously it’s cutting into your daytime.
Richard
Jamie
Richard
Jamie
Richard
The above is a machine transcription, as such there may be subtle errors. If you would like to help to fix this transcription, please see this GitHub repository
Wrapping Up
That was my interview with Richard Campbell. Be sure to check out the show notes for a bunch of links to some of the stuff that we covered, and a collection of text snippets from the interview. The show notes, as always, can be found at dotnetcore.show.
And don’t forget to spread the word, leave a rating or review on your podcatcher of choice, and to come back next time for more .NET Core goodness.
I will see you again real soon. See you later folks.
Useful Links
- YouTube version of the episode
- Richard Campbell on twitter
- ..NET Rocks!
- Some of Richards live presentations on the history of .NET:
- The Tablet Show
- Run As Radio
- Humanitarian Toolbox
Ontological humility is the acknowledgment that you do not have a special claim on reality or truth, that others have equally valid perspectives deserving respect and consideration. There are many ways to look at the world, and each way has its bright and its blind spots. Only from the perspective of ontological humility can you accommodate that diversity and integrate it into a more inclusive view.
This is a quote from Conscious Business: How to Build Value Through Values which helps to describe ontological humility.