Managing a Successful Open-source Project With Dennis Doomen
Episode #2 Published Wednesday, July 1, 2020
This week, I'm talking with Dennis Doomen, about how he created and runs a successful open source project that has been downloaded 50 million times!
This episode is brought to you by me. If you like this show and want to support it, please visit my courses on Pluralsight and buy my new book "200 Things Developers Should Know", which is about Programming, Career, Troubleshooting, Dealing with Managers, Health, and much more. You can find my Pluralsight courses and the book at www.developerweeklypodcast.com/About
Dennis is a veteran architect in the .NET space with a special interest in writing clean code, Domain Driven Design, Event Sourcing and everything agile. He specializes in designing enterprise solutions based on the .NET technologies as well as providing coaching on all aspects of designing, building and maintaining enterprise systems. He is the author of www.fluentassertions.com, a very popular .NET assertion framework, www.liquidprojections.net, a set of libraries for building Event Sourcing architectures and he has been maintaining coding guidelines for C# on www.csharpcodingguidelines.com since 2001. He also keeps a blog on his everlasting quest for better solutions at www.continuousimprover.com. You can reach him on twitter through @ddoomen.
- Dennis's GitHub profile
- Dennis's blog: www.continuousimprover.com
- Follow Dennis on Twitter: https://twitter.com/ddoomen
- Slides of the presentation Trials and tribulations of a successful open-source project
Barry Luijbregts 0:17
Welcome to another episode of developer weekly. This week I'm talking with Dennis Dolman about managing a successful open source project. Dennis is a veteran architect in the dotnet space with a special interest in writing clean code, domain driven design, event sourcing and everything agile. He specializes in designing enterprise solutions based on the dotnet technologies, as well as providing coaching on all aspects of designing, building and maintaining enterprise systems is the author of fluent assertions.com a very popular dotnet assertion framework, liquid projections dotnet a set of libraries for building event sourcing architectures, and he has been maintaining coding guidelines for C sharp on C sharp coding guidelines.com since 2001. He also keeps a blog on his everlasting quest for better solutions at continuous improver.com you can reach him at Twitter through Dennis Doomen. Hey, welcome To the show, Dennis, thank you for your time. Also, how are you doing?
Dennis Doomen 2:03
Great, thank you for asking. Yeah, really great. By the way, my Twitter handle is d Doman doing Yes. Yeah. Yes.
Barry Luijbregts 2:12
I will put all of this in the show notes so that people can check you out and follow you from there.
Dennis Doomen 2:19
If you read up the bio like that, and then it's like, really? Is that me? Am I really doing all this stuff? And then I think like, yeah, I'm actually doing all this stuff. Not as active as I used to be. But still, yeah.
Barry Luijbregts 2:33
You seem pretty busy indeed.
Dennis Doomen 2:35
is the combination of 23 years of software development, and I have a lot of passions. But yeah, to be honest, since this topic is about open source, it's sometimes struggling to find the time to work on all these things at the same time, so it is a lot of things. Yeah,
Barry Luijbregts 2:51
I can imagine. So your your bio says that you are an architect, right? Does that mean that you just draw pictures all day?
Dennis Doomen 3:00
I like to believe in according architect, I don't really believe in architects that just, indeed draw pictures and PowerPoint or dry or something. I really like to be part of the development team. So generally, I spend about 30% of my time on coding. And the rest is, you know, the typical things that architect does. meetings, alignments, code reviews, and the drawing a PowerPoint picture occasionally. I have to say, the last couple of weeks, I've been particularly busy with alignment related works. So most of my coding happens in the evening, unfortunately, but that will change soon again. But Up to now, yeah, I've managed to spend almost half of my time still on production code.
Barry Luijbregts 3:43
That's excellent. Yeah, cuz that's fun, isn't it?
Dennis Doomen 3:46
Oh, yeah. I mean, I just said I spent the last four weeks not doing it. And I really, really miss it. You know, working with team building something that goes into production. I'm a finisher person. So I like to build something put production, see how it runs, optimize it. That is my I'm not the person that starts new things and then moves on. I love to finish things and really make it production ready.
Barry Luijbregts 4:10
Right. That's very good. So today I wanted to talk to you about open source, you have a lot of open source projects. So I want to talk about what you're doing and how you make it successful and aspects of open source. But let's just take a step back for the listener and talk about what open source is. So to you what actually is open source and what's the alternative and why does it exist?
Dennis Doomen 4:38
That's a good question and think about this. Open source is, is software that you can use for free of course, that's the the generic generic definition that most people understand. But it doesn't come for free. I mean, it is free, but it doesn't come for free. If you use open source over for me, it means that that's kind of a policy that I use it myself as much Clients projects is that if you use something like that, you need to make sure that either there's a big group of people behind that. So it's there to last, you know, they and the group is capable of providing support, or the quality of that code needs to be good enough that in case, the author authors that that were behind a project, abandon the product project, that you're capable of taking that code and make it your own, because in the end, it is still something that you are responsible for. And, yeah, so that means that you if you use some open source library, you have to you have to actually make sure it makes sense, you know, which also includes the vulnerabilities the how fast people react to issues, do they accept pull requests, how well is the documentation written, doesn't have proper tests, unit tests that will also help you understand? So I actually just as critical to open source as I am to the code that I'm writing myself or the team is writing. So yeah, so and the conference Or the alternative, of course, is commercial software, which also comes with the pros and cons. Yes, you get good support. Of course you pay for that. But there's also risk that because it's proprietary, and it's closed. And if you find a bug or something like that you kind of left to the gods to fix the buck in time, which is a bit easier with open source software.
Barry Luijbregts 6:22
Right. So, open source software is open as in you can see the source you can contribute to the source and it is generally free, right? And then close software, you need to pay for it. And it's all a black box, basically.
Dennis Doomen 6:36
Barry Luijbregts 6:59
Right because That's obviously the the the nightmare scenario where you rely heavily on an open source project in your production software, and then it gets abandoned.
Dennis Doomen 7:09
Yeah, doesn't get updated. happens. I mean, it's almost inevitable. Sometimes people just abandon the product because it's been replaced by something more mature, or maybe Microsoft has built something similar. It always happens. I know, for instance, a very popular logging library called lib blog, which was beautiful because it didn't add the requirement or didn't add a dependency to your project, just a couple of source files. And which would make your code independent of the specific logging library has been abandoned because Microsoft now has created their own abstraction in HPF in dotnet core, right, there's good reasons for that. And that means you need to you need to move away from that. Yeah, sometimes it's not entirely clear what the future is a I've been a very active user of an hibernate for years. The dotnet open Object relational mapper. For a while it looked like it was kind of dead in the water. And now it's getting traction again. But of course, we have Microsoft Entity Framework, which is supposed to be competitor. Yeah, of course, the one from Microsoft is supported by Microsoft, it's part of the built that framework. And that is a trade off that you're going to take. It has less features, you know, versus an open source thing. He said, with more and more projects, I noticed proxy kits, which is something that colleague from the dotnet community, they mean he created, which is a beautiful little proxy that you can use in your dotnet application without the deployment footprint, which serves a real purpose. But since Microsoft is not building something inside the dotnet framework, he decided to abandon it or to stop developing. This is normal. This will happen eventually.
Barry Luijbregts 8:49
Yeah, absolutely. I can imagine plus people get busy and just, you know, start doing other things with their lives.
Dennis Doomen 8:55
Of course, they get children, they shift focus, they move to a different platform, and No, that happens all the time. Yeah. But I'm still here. I'm still here. I don't have to go away.
Barry Luijbregts 9:07
Yeah. And we can rely on you to just keep pulling these great open source projects forwards.
Dennis Doomen 9:12
Well, the good thing is I'm not pulling it down myself alone. I mean, there's more people involved. That is also crucial, of course. Yeah.
Barry Luijbregts 9:19
All right. Let's talk a bit about that. So let's let's first start with your open source contributions. You have a lot, you have fluid assertions, you have liquid projections and C sharp coding line guidelines. Why did you start those?
Dennis Doomen 9:34
Yeah, and they also have, I think, fluid caching, and caching and I have beacon which is a built light tool.
Barry Luijbregts 9:45
Yes. Oh, God, you're so busy. I actually saw your your GitHub profile. And you can see the activity charter on your GitHub profile. And you just put me to shame man, because it's all green.
Dennis Doomen 9:56
Now, it's not that bad. No, no, maybe it looks like that. Because I don't not every evening, I have the energy to work on that. I'm always struggling between writing on my, my next blog post. Mostly fluid assertions. I have done a bit of development recently I do mostly do the code reviews, and handle the discussions from people that want to contribute or have questions that don't align with the philosophy of the library. That is my big, it's almost like I'm the architect again, also for this library. But I have a good good friend Jonas, Leah Europe, who is in Denmark, who is very active right now. I even can't keep up with all the things he's doing sometimes. Yeah.
Barry Luijbregts 10:36
And this is on fluent assertions. Yes. Just search. Yes. And and what is that? Exactly? Can you expand a bit on what what it is and why it is there.
Dennis Doomen 10:44
It's a small library to make your the assertions and unit tests a bit more readable. I mean, if you're a fan of fluid API's, then you will love it. If you hate fluid API's, because those people exist as Well, you'll hate it. And it's really optimized to make the error messages that when you're, I don't know, the result of your test does not match what was expected that you get really clear messages. This is one of the unique selling points,
Barry Luijbregts 11:15
right? Because normally when I do unit tests and an assertion fails, it's it's sometimes difficult to find out why that actually is exactly
Dennis Doomen 11:23
so it will include the actual variable that you're asserting on. So it tries to read the stack trace. And you can usually also add, like a because to it to emphasize like, what is it? Why does this thing have to be true? Is that a false? Because what I hate is that expected it, what does it do is a expect the true found false? What does that say? I want to know like, I mean, you can still do that if you do something like my variable should be true. And it isn't true, it will say, expected my variable to be true, but it's false, which is a slight improvement with the least you know, my Variable if my variable has a more functional name, it will help you. But you can also add a message to it like because and then you can describe some functional expectation there. On my one, my unit test to be crystal clear, I want to have a clear range act and assert part. And I treat my unit tests in general as documentation. That's why I also love test driven development and fluent assertions really ties well in to that philosophy.
Barry Luijbregts 12:25
Yeah, right. I just I can't wrap my mind around test driven development as in I do understand what it is, I just have such a hard time actually doing it. You know,
Dennis Doomen 12:36
it's all about, you know, treating your code as or treating your test as a kind of specifications. And I literally call my test projects dot specs instead of dot test. Because Yeah, I when I when I tried to design a class, and usually I've already thought about the scope of that class and the responsibility of the class in the bigger picture, and then I just thought to spin up scenarios. Usually I even create a test class. And then at the top of my class, like all the functional scenarios that I think the class should adhere to, and then start implement those tests. And while I do that dummy effect that I'm trying to define the expected behavior triggers thoughts about, wait a second, what if this happens, what if that happens, and immediately when I do that, I write it to do it at the top of the page, so that I don't forget to call for that scenario, and then I start to implement it. I'm not that dogmatic that it's really like, you don't write a single line of production code until there's a test. That's what TDD actually tells you. I'm a bit more practical than that. But I definitely use my test as a way to drive the behavior of my class. And after that, my tests are not just a safety net, they also documentation. This also applies by the way to flow decision if you go to the tests. The goal of those is to also because quite often if I get a question on the internet about some behavior of an API fluency I generally don't go to the implementation, I go to the tests to see how it is whatthis petition what this specific API will look like. I refer people to that specific test case, which is the promise of TDD. And I generally believe in that.
Barry Luijbregts 14:15
Yeah, I think it's a good, good way to work. So just to step back for people that don't know what test driven development is, it is when you first create your test and then write the code to make that test work basically. Correct. Yes. So all right, does that. So that's fluent assertions. And that's a very specific use case, really, you know, to help with unit tests, very niche thing, but still, it has 50 million downloads, right? That's a lot. Oh, how did you do that? 50
Dennis Doomen 14:42
I didn't do anything. I mean, yeah, what did I do? I think I felt myself like, why is it successful and it is a bit of a mystery for me as well. If I had to move Things that I think have been, you know, have been cultivated to that is probably because it's, first of all, it's a library. You know, it's not a framework, it's not something that if you buy into it that you're stuck forever. I know that people have switched over from n unit to fluent assertions just by using a regular expression. So it means that if you if you start to use it, it's not like you're stuck until the end of time. That's a big difference already.
Barry Luijbregts 15:25
Add an add on to your project. Yeah, so much. Exactly.
Dennis Doomen 15:28
Yeah. This is for me is also like, I love to build libraries, not frameworks, because I know, I also love to use libraries, not frameworks, because frameworks, yeah, they use you. And you know, you have to derive from base classes, which makes it very hard to change later on. And it's only used in test code. I mean, nobody's using a couple of people are but generally people use flute assertions in their test code, which means it's not as production critical. You know, performance is not that production critical. Yes, what I mentioned Before uses, I've been using TDD from the start. So even if somebody reports a bug, the first thing I do is I create a test case to verify that there's a bug exists. And if so I'll fix it after. So basically, the test will fail, then I fix the bug, and then I make sure that test is green. And White, is it successful documentation. I've been pretty adamant about documentation since day one. Support I would say is pretty good. I see that there's a lot of activity on StackOverflow. Most of the questions I don't even have to answer myself. There's a quite big community. Of course, that didn't happen from the start. In the beginning, I had to spend a lot of time on this. It's quite extensible. So if you want to you can you can build all kinds of extra extensions to the framework, build your own extensions or your your own assertions have documented that. And yeah, and it will make your test more readable than it doesn't have a catchy name. I don't know. I like flew in the I mean, all my open source libraries have something fluidity in the name. I don't know. Yeah. Or liquid? Yes. Yeah. But it's all the same. I actually look for that. I have fluid caching fluent assertions, liquid projections. Yeah. What's in a name? And yeah,
Barry Luijbregts 17:13
very good. Very good job. So you're saying documentation is a big part of it? Yeah. Because when I started using something, and the documentation isn't there or isn't good, then I tend to just go away and look for something else that I that's easier to use. Because I'm looking for ease of use. Of course, I want to use this right now. I want to be able to implement it right now. And if I run into any trouble, it should be right there. So did you create the documentation yourself at first? Yeah.
Dennis Doomen 17:41
Yeah, I did. I had the various versions of that in the past. It wasn't code blocks, of course. But since since it, I think, three, four years I've been using GitHub Pages with a Jekyll template behind that. I've had some help from people like Somebody helped me set a cloud fare and somebody else created the logo for me. I use them minimal mistakes, which is kind of a general template for that. So over time I started to I didn't look like that from the start. I mean, if I look in the past, I found a very ugly codeplex page a long time ago, it's still getting somewhere. Right? Yeah. But yeah, there's so much stuff available for free to set it up with the documentation. Yeah. And of course, people contribute to me what I do these days since the documentation is part of the same repository. If somebody creates a pull request, I actually we actually asked them to also add a, like a small addition to the documentation and add a row to the release notes, because they're all part of the same repository, which helps, of course, to streamline this whole process. Right, yeah, this is the maturity that happened over the years, you know, trying to find the best way to deal with documentation, and how to keep it up to date. And, of course, there's some ad side note as well, that pays for all the DNS Sorry, all the domain names.
Most of the stuff is free these days very easy to set it up.
Barry Luijbregts 19:06
So you have documentation, everything is on GitHub. Do you have other plumbing setup for building and testing things?
Dennis Doomen 19:14
Yes, of course. In the past, I used a simple batch script. And that's funny because I also use my open source project to try new things over time. I did once in a presentation about the evolution but I remember that in 2009, about a year after we started making an open source, we use a simple batch file, you know, just to which calls M is built, and that's it. And then I think somewhere in I don't know 2014 15. We moved to SATA, which is a PowerShell built based build script, because I really strongly believe in build local as you build remotes, so I treat my build server just as a, as a trigger, you know, it's too triggered to build to run the build script, collect some results. And that's it. But I want to be able to run everything locally as I do it remotely. Because I want to be able to make sure that my nougat package that comes out of that is correct has the right dependencies and I want to be able to debug that if something goes wrong. Then I think I moved removed to cake, which was a built framework using C sharp, but that didn't really like it wasn't really C sharp, was kind of their own language. And since last year, we switched to nuke, which is also a C sharp based build system, but it's very mature, very nice to work with, allows me even to the book, put breakpoints in my build script. And I use App fair as my build engine which is free. So that's nice.
Barry Luijbregts 20:43
Yeah. That is nice. Yes, because some of this stuff does cost money, right? You need a domain name correct. You have all sorts of other small costs. And of course your time as well, that costs money.
Dennis Doomen 21:00
Well, the time is just private time. That's what it is. It's just my personal investment in that.
Barry Luijbregts 21:07
And do you get time from your employer to work on this?
Dennis Doomen 21:11
No, yeah, I can. I just don't have enough time period. I am officially have a day a week to work on all kinds of stuff, coaching presentations. But I'm so busy with my clients, I can't really find time. I know in the past that I fixed some bugs, you know that we run into a project and use that to fix it. But generally, I'm too busy. So I don't have that much time. I mostly do it in the evening, on the weekends.
Barry Luijbregts 21:34
Dennis Doomen 21:36
So and I don't get paid. So that's the thing.
Barry Luijbregts 21:38
Yeah. You don't get paid that that's the thing. Yeah. So what about the rest of the costs? How do you how do you cover those? Do you have sponsorship or,
Dennis Doomen 21:46
and not really, what what I'm very happy with the fact that JetBrains is really supporting the dotnet community. I get free licenses for almost everything and also everybody who contributes As an active contributor to the project gets a gets a resharper, a writer or whatever you want to use, which is awesome. And I've always done that. This is not the reason, by the way, and why I'm such a proponent of the IDE writer. But it just happens to be like that before when I was still using Visual Studio. I benefited from a free resharper license. I also use semantic merge, which is awesome C sharp merge tool, which gets free licenses for but that's about it. I fee is already free. GitHub is free. So in general, it's just time.
Barry Luijbregts 22:32
Yeah, right. Yeah. So that's, that's actually a very great incentive for the community that they could get free licenses for IDs and other tools.
Dennis Doomen 22:41
And there's a lot of tools that a lot of companies that do that I don't use that many different tools but in generally I think gets cracking which is my I think I also have a free license by the way gets cracking is my most my popular. My favorite gets a user interface. tried many of them. I think I have a free license for that as well. actually add a banner to the for the searchers landing page.
Barry Luijbregts 23:03
Right. And what about the dotnet foundation? That's a foundation that helps open source projects. Right? Yeah. Are you a part of that too? Do you want to be?
Dennis Doomen 23:13
I'm not sure. I'm not part of that. I have contacted once and had to fill a little information I still haven't figured out what it adds to me what will I gain from it? Right. I have to talk a little bit with because I know that found the the, the board member the lead board member I know I know. I know her so I need to check a little bit like what what do I gain from that? I haven't really spent a lot of time on the data fortunately.
Barry Luijbregts 23:39
Right? Because I what I think the one of the things that they do is provide coaching as well as to how to build and create your, your community. And I think you already have a very good community actually
Dennis Doomen 23:53
That's my point. Yeah, it evolved over time. So I don't need anything there. I don't need legal support. If I happen, then I can use my employer for that. No, no need for it right now. But in general, if you need to do your own marketing a little bit, I mean, yeah, I've done a lot of presentations over the last 10 years, not about fluids assertions, but also about mostly about architecture, but also about test driven development. And of course, I will use flow decisions now. And I might not even mentioned that it's a, you know, little plug of the library. That's how I do it. And everything that I designed came because I needed something I was missing something and I talked about that a blog about that. I do sometimes report we actually I spent a while on StackOverflow. It's probably a couple of years ago, where I was checking all the unit testing related questions and try to answer them and sometimes use that as a opportunity to plug flow decisions a little bit. I don't remember exactly how active I had been so long ago already. Yes, 12 years.
Barry Luijbregts 24:59
That's a long time. Yeah, but then you did do a lot of marketing, also indirectly by doing your presentations, of course, because people see you, and then they check you out. And then they get to live their
Dennis Doomen 25:10
True. True. Yeah. And I've also been very open about the design philosophy. And fluent assertions itself is also you can see it as a project, you learn new things from it. So when I started using nuke as an example, for my build tool, I write a blog post about it. When I was thinking about all the backwards compatibility issues that we're facing, I use that also to write about that or talk about that. There's a little it also creates a lot of inspiration for me to experiment and talk about topics related to that and use that as opportunities to, to also like coach clients, for instance, because they're also running the same problems, releasing branching strategies, all that stuff. It's
Barry Luijbregts 25:49
like a real project.
Dennis Doomen 25:50
It is. It is absolutely a big one. And yeah, it's quite popular.
Barry Luijbregts 25:59
Absolutely. So lots of people have downloaded this millions. And so also people that use it in older applications, I imagine Yeah, as in applications that now run in production, and they just forgot about or will never update again. So how do you deal with supporting older frameworks? For instance, I see on one of your pages that you still support dotnet 4.5, right runs on dotnet 4.5, which is relatively old. How do you decide that you want to still support that?
Dennis Doomen 26:33
It is a matter of costs, as in if it's relatively easy to support it without making my development effort more complicated. I'll keep it in. Especially with the recent cross compilation cross compilation process that that has, it has been fairly easy to support multiple different frameworks. It's just a matter of putting a target frameworks property in your CSS. support. And that is enough. And of course, some things won't compile. So you have to play around a little bit with if def statements.
Unknown Speaker 27:09
So it's not that bad.
Dennis Doomen 27:13
But yeah, every major release, which happens every couple of years, we tend to drop things. I mean, latest official version right now is five point 10. When was five introduced, I think have it somewhere written down. Version five was introduced in 2018. Beginning and deed which included all that four, five, that standard 1416 and two Oh, which was the version use cross compilation, before that it was a bit more painful to use portable class libraries, maybe some of the listeners remember that. And then all kinds of fish share projects, which was a concept officially introduced. But if I go really back, it was quite hard to remember that in the beginning. We had to do link files.
Barry Luijbregts 27:58
So good luck, remember Yeah,
Dennis Doomen 28:00
he basically we had we had, like, I think, multiple projects for every targets framework yet a separate project and they use linked files to refer to each other. Which was annoying, because if you started to rename files or split files, yes, they didn't compile. Yeah, it got a lot better with the shared products. They were introduced, I think in 2014. But now, with cross compilation, it comes for free almost. But to be fair in dotnet, in the fluid decision six, which we're working on right now, we're probably not we're probably we have already dropped all the oldest frameworks. Right,
Barry Luijbregts 28:35
right. Yeah, we've come a long way in sharing code across multiple projects. Absolutely. And now it's way more easy with dotnet standards.
Dennis Doomen 28:46
Oh, it's so easy. Although it's not 100% foolproof solution. I've run a couple of times in something that is supposed to work. It's supposed to compile and it actually compiles I would write Microsoft nougat package. But then at runtime, it may actually throw an exception like platform not supported exception, which is a bit annoying. So it's not, it is kind of a leaky abstraction here and now. Yes, generally and that that has cost us a lot of time trying to figure out how that works. Like somebody says, like, hey, why can't you just support someone version bla bla bla, just by talking to these though that status version, then you do. And then you have to use a certain Microsoft extension library for certain target frameworks. And that can become a bit unwieldy sometimes.
Barry Luijbregts 29:29
Dennis Doomen 29:30
Which still means you have to test every target framework. So we create this project, obviously, using a shared project. But we do actually run the tests for every Docker platform to make sure that everything works as expected. Oh,
Barry Luijbregts 29:42
my goodness, what a lot of work.
Dennis Doomen 29:44
It is. But yeah, to be fair, we didn't write this in one year's 12 year endeavor. Lo things change over time, and there's a lot of help. I mean, especially last six months, I've seen an influx of pull requests, so quite incredible. The community has been very active reading
Barry Luijbregts 30:01
Yeah, so do you have many active contributors?
Dennis Doomen 30:05
I have, I think I would say like about 10 people that are generally quite active, they come back. Some of them are also incredibly critical. They they propose huge refactoring or huge changes, which feels like they might be too risky. But yeah, they also, you know, trigger large discussions will select sometimes, discussions that I like, I can't even do this in between work, I just have to spend time with understand what they mean. But there's about 10 regular contributor, and there's one person that is extremely active. That's Jonas from Denmark,
Barry Luijbregts 30:39
who helps me like
Dennis Doomen 30:40
who spends almost every day on the project right now, which is awesome because it really allows us to move faster these days.
Barry Luijbregts 30:49
Alright, so these contributors are they mostly very experienced developers are they also juniors,
Dennis Doomen 30:56
I see different things. I see people that still struggle to get I see People that are very experienced and I are thinking about the fundamental behavior of the library. One of the unique selling points of fluent decision is a method called, should be equivalent to which is used to do deep object graph comparisons. And it has certain behavior in place, how it deals with collections. And I've had discussions about like people saying, you know, we should change this, and we should change that. And they're completely redesigning it come with proposals, which is almost like you won't expect that from an open source project. You know, the same way async support, how to deal with making sure that you don't create that locks in your unit test. And there have been people participating in that. Also, I don't know if you know, Claire, the Vault Key. Yes, the leader of the data foundation that you just mentioned, and she has been very involved, especially like five for four or five years, helping me make the framework, support multiple libraries deal with all The PCL complexities, especially when the time when Microsoft was redesigning the framework, we had something called dotnet. Five, which was a moniker a couple of years ago, which is weird, because now we get dotnet. Five as well. Yeah, yeah. And she was really adamant. I met her a couple of times in New York, we spent a lot of time explaining all these complexities. That's how the hell did I also notice frustrations used by a couple of Microsoft open source dotnet, SDK libraries, which will also, which is a good thing.
Barry Luijbregts 32:30
Wow, that's a very good thing. Yeah. So if people want to jump into fluid assertions and want to help out and contribute to something, what kind of issues do you have? Are they all very complex? Or do you maybe also have like jumping issues? Yes, people that are starting out in open
Dennis Doomen 32:48
source. Yeah, this is something we have, there's a couple of issues a lot of them actually, we use a label called help wanted to emphasize that these are things which are relatively constrained In terms of scope and complexity, so it's quite easy to jump on boards. And we have a slack account, which specific channels for developing the library instead of using it. In general, we're very open very easygoing doesn't mean that we say yes to everything, by the way, because yeah, as you can imagine a big library like this with a lot of users, you have a lot of responsibility, making sure you don't break things. Not just source control, compatibility, even binary compatibility. So sometimes we actually trying to think of writing down some design guidelines. Yeah, it's incredible. It's almost like a real project. Yeah, we need I mean, people need to understand what kind of behavior is expected. You know, if somebody passes a nail into into a B methods, what kind of behavior do we expect to be consistent? You know, sometimes you also get like, hey, I want to add this not be alternative. And then we need to start thinking about okay, but if you do this with this method, then you Probably also need to do it for the other ones, otherwise it becomes inconsistent. And in the past, we didn't really care too much about it. But now,
yeah, we sometimes ask them, like, Are you willing to, you know, take it a bit further. If not, then sometimes means we have to do more work. But quite often people are quite quite, quite open.
So yeah, wait.
Yeah, yeah, it is. Alright. It goes. It's also another very complicated project.
Barry Luijbregts 34:26
Right. Yeah. And, and it is a library, another framework?
Dennis Doomen 34:31
Yeah. Which makes it a lot easier to develop new features. Yeah.
Barry Luijbregts 34:36
So I would definitely encourage listeners, if they want to jump into open source, or just find another open source project to contribute to just go to fluent assertions.com. And go to the GitHub page, pick something out, work on it, and then put in your pull requests, and maybe it gets in there. Yeah. Dennis, thank you so much for your time today. Thank you for spending it with me also and I hope you're continuing with your great work and finding the time to do so.
Dennis Doomen 35:07
I will and it was an honor was fun to talk about my favorite open source project.
Barry Luijbregts 35:13
Alright, you can find Dennis on twitter at D Dolman and add all this other websites that will be included in the show notes. Alright, bye bye.