Do you hate legacy or do you love it? Do you accept it or do you want to stamp it out? This time I talk to Nico Krijnen (Lumunis) about the opportunities we have in our legacy codebases to understand our business better, the strategic use of new technologies to make important product improvements, the importance of collaboration and visualisation to create a shared vision of software architecture and our product no matter what state the codebase or architecture.
We discuss the meaning of legacy, what it is and when it appears, how to fix it, how to avoid it and how to prosper as a business while replacing it. We also talk about what you can do in your pipelines to avoid legacy automatically, the importance of visualisation, context mapping in DDD and C4 diagrams.
In a fascinating and wide-ranging discussion, we talk about what it takes to make great software in the age of microservices.
NOTES
The DDD NL meetup:
https://www.meetup.com/domain-driven-design-nederland/
Nico's workshops at DDD Europe:
Full-day workshop on June 6:
https://dddeurope.academy/applied-eventstorming/
2h hands-on at the main conference:
https://2023.dddeurope.com/program/playing-with-domain-models-in-code/
Automating architecture validation for Java and .NET:
https://archunitnet.readthedocs.io/en/latest/
With an example of using it for a layered or onion architecture from one of Nico's workshops:
Nico's speaker profile & linkedin:
https://sessionize.com/nico-krijnen/
https://www.linkedin.com/in/nicokrijnen/
And an overview of some of the courses Nico gives through Luminis:
https://www.luminis.eu/expert/nico-krijnen/
QUOTES
[01:41] "it seems that in our industry, only seniors and architects, et cetera, are getting in touch with domain-driven design at some point and I think that's a waste" [NK]
[02:10] "so one of the things I really wanted to do is trying to lower that learning curve [for DDD]" [NK]
[04:03] "you need to have ways to create sort of a shared mental model of the stuff you're working on" [NK]
[05:02] "We had a chat the other night about, how we feel about Legacy. I said, I love it and you said, I hate it. How does the legacy fit into to your daily work?" [RB]
[06:20] "legacy can have a lot of bit different meanings, but typically it means something that's not, at least how I see it, is it's a code base or a product that's not easy to work with anymore." [NK]
[06:38] " I like to go fast. I like to, to build stuff and, and be excited about those things and not feel dragged down by, a big stone that you're dragging along." [NK]
[06:47] "that's why I hate it [..] but to be honest, all our industry is full of it" [NK]
[07:03] "a lot of teams do not have the discipline to then go fast, but also go quality" [NK]
[07:45] "So typically when you meet a legacy system, first of all, what, what are the smells of its legacy? And secondly, what would you start to think about doing to improve that situation?" [RB]
[08:59] "we got someone in and they started working fully automated regression test, so deploys to production could be done, [in] half an hour. So that's different from a week, right? " [NK]
[11:16] "Cause it's a system that's making money, right? This legacy system is the place where, where you, where your business runs on." [NK]
[11:55] "So, I still hate working with legacy, right?I refuse to accept it. I think that's more than mindset, right? So I refuse to accept it as legacy." [NK]
[12:50] "You can transform that into a modulith like, which is, uh, what you call it nowadays." [NK]
[14:09] "So that's also why I think why I'm talking at conferences and spreading this knowledge because I think it's important to help the industry to realize this and also to find ways to get [legacy] under control" [NK]
[14:23] "We're building more and more software and, if we're not doing it the right way, we're just building, a lot more legacy. And I don't want to be there!" [NK]
[15:06] "I think the ease with which organizations now adopt Kubernetes and under underestimate the complexity, [is] quite scary, to be honest." [NK]
[16:46] "I think in a lot of cases people underestimate the value of just sticking with the stuff that you know and can handle" [NK]
[17:34] "Because I think a big portion of legacy is that people don't understand how the system works or what it's supposed to do, or at least do, or pieces of it." [NK]
[17:49] "I think that's where domain driven design, again, has a good role to play, is that it helps you to understand a domain. It helps you to understand the problem space." [NK]
[18:24] "it's good to use some experimental technology to do something that nobody else has ever done because it's gonna put you in a space where nobody is and where you can solve problems that nobody else can solve." [NK]
[19:56] "I would try to take the Frankenstein out of it, not accept that it's a lost cause." [NK]
[21:00] "[Legacy] is usually the point where people don't understand how a system works anymore" [NK]
[22:25] "In the workshop you encounter something that's called an Arc Unit, which allows you in your pipeline check or you compile time or test time, check that the architecture that you have in mind is not violated" [NK]
[24:08] " I think is always super important to have at least one visual in your, in your project" [NK]
[24:53] "try to write the minimal amount that you can, right, that you need, but that you are sure that you can keep up to date over time" [NK]
[27:43] "the real value of that kind of high level diagram is not so much having an up-to date version of it. Is it It is drawing it together with the people working on it." [NK]
[29:11] "giving context , about a system, what I think is really useful to draw a context map like from DDD, which essentially is like the high level context overview of, a system, but then more focused on the communication patterns between systems and especially also between teams" [NK]
[30:24] "a high level C4 diagram and a context map" [NK]
[31:05] "The temptation is always for everybody to prove their worth on any project" [RB]
[31:50] "we don't want to get the impression [of domain driven design] that it means you start to do a lot of design upfront." [NK]
Hello and welcome to Loving Legacy.
Richard Bown:I'm your host, Richard Bown, and this time I'm joined by Nico Krijnen.
Richard Bown:Is that right?
Richard Bown:I said it right.
Nico Krijnen:Yeah, that's totally right.
Richard Bown:Thank you.
Richard Bown:Um, good to meet you.
Richard Bown:Good, good to meet you again.
Richard Bown:Maybe you could introduce yourself to everybody and, um,
Richard Bown:then we can discuss our topic.
Nico Krijnen:Yeah, that's fine.
Nico Krijnen:Um, so I'm Nico and I've been working in the software industry for a while.
Nico Krijnen:I've been doing a lot of product development, let's say development as
Nico Krijnen:part of a product for quite some years.
Nico Krijnen:Had a nice experience of going from absolutely, uh, nothing to
Nico Krijnen:a good working product with a lot of, , people using it worldwide.
Nico Krijnen:That was really cool.
Nico Krijnen:Journey.
Nico Krijnen:Also being in somewhat bigger companies in, uh, what they
Nico Krijnen:call the servant leadership role.
Nico Krijnen:But I really also have a deep technical understanding.
Richard Bown:Your background, is development though, would you say?
Richard Bown:on the,
Nico Krijnen:uh, developer.
Nico Krijnen:. So my view is always very broad cuz I want a complete successful
Nico Krijnen:software solution on the whole.
Nico Krijnen:So, um, I need to know a lot, a lot of stuff on a lot of different topics.
Nico Krijnen:Uh, but the field's just too huge.
Nico Krijnen:You can't know everything.
Nico Krijnen:So, uh, but still I'm surprised sometimes how much I know on specific stuff anyway.
Richard Bown:Okay.
Richard Bown:And you work for company called Luminis, is that right?
Nico Krijnen:Yeah.
Nico Krijnen:It's, uh, consultancy in, uh, Holland called Luminis.
Nico Krijnen:And then Luminus as a whole is a bit bigger, so you also have a lot
Nico Krijnen:of other colleagues who are pretty much all of them very smart people.
Nico Krijnen:So, uh, there's a lot of people around you that you can, uh, lean
Nico Krijnen:on and I think that's really nice.
Nico Krijnen:Uh, combination.
Richard Bown:and we met first, uh, end of last year, I
Richard Bown:think November, December time.
Richard Bown:There was a domain-driven design, uh, workshop.
Richard Bown:So you, you organized the meetups as well, you, for DDD nl.
Nico Krijnen:Yeah.
Nico Krijnen:I knew about the meter for a while and I was always interested in DDD, because
Nico Krijnen:I think there's a lot of value in it.
Nico Krijnen:, it's somehow it seems that in our industry, only seniors and
Nico Krijnen:architects, et cetera, our level are, are getting in touch with, uh,
Nico Krijnen:domain-driven design at some point.
Nico Krijnen:And I think that's a waste because there's a lot of value in there that also, uh,
Nico Krijnen:juniors, et cetera, could benefit from.
Nico Krijnen:They just didn't encounter the problems yet that, uh, that you need DDD to solve.
Nico Krijnen:That is useful for pretty much everything you do.
Nico Krijnen:so one of the things I really wanted to do is trying to lower that learning curve.
Nico Krijnen:. The workshops really to help people experience firsthand what kind of
Nico Krijnen:things you can do to take small steps.
Nico Krijnen:Making that big change and to force yourself into a mindset, into a way
Nico Krijnen:of working that helps you do that.
Richard Bown:No, I love, I loved it.
Richard Bown:I really enjoyed the workshop.
Richard Bown:I went along again this week and again, I really appreciated the effort that was put
Richard Bown:in there because it was, as you said, and you, he mentioned something that you just.
Richard Bown:Said as well, like about how a lot of the time, the terminology or
Richard Bown:the, yeah, don't mention dDD I think is, was part of its closing words.
Richard Bown:Yeah.
Richard Bown:Because it does tend to put people off because there seems
Richard Bown:to be this kind of idea that the learning curve is quite steep.
Richard Bown:So we might come across it as a software engineer day to
Richard Bown:day and overcome it somehow.
Richard Bown:But when you see it written down, you go, oh yeah, maybe that's a
Richard Bown:big problem that I'll come into.
Richard Bown:Where can I fit this, fit this into my way of working?
Nico Krijnen:Yeah.
Nico Krijnen:Whereas probably you already, you've already experienced this a bunch of time.
Nico Krijnen:But yeah, if you don't know all the terminology, then you don't recognize it.
Nico Krijnen:And then some of the ways stuff is described stays very abstract.
Nico Krijnen:So then I make it very concrete by just letting people experience it in code.
Richard Bown:So yeah, you mentioned visualization there as well.
Richard Bown:We, through event storming and we talked about the other night
Richard Bown:things about example mapping.
Richard Bown:Um, and we did some domain modeling or pieces, pieces of these,
Richard Bown:um, These are aren't activities that you do by yourselves.
Richard Bown:They're really all about collaboration, aren't they?
Nico Krijnen:Yeah.
Nico Krijnen:Because, uh, in the end, software is getting more and
Nico Krijnen:more complex these days, right.
Nico Krijnen:And the time.
Nico Krijnen:That, and I'm sure you, you were in that time as well, right?
Nico Krijnen:Where we could just write pieces of software all by,
Nico Krijnen:yourself, and it would be fine.
Nico Krijnen:That time is long gone.
Nico Krijnen:Right now we're building, uh, distributed systems with, uh, multiple people, with
Nico Krijnen:multiple teams working on pieces where the cognitive load of all the technology that
Nico Krijnen:we talked earlier, earlier about, right?
Nico Krijnen:It's too much for one person or even one team to handle.
Nico Krijnen:Uh, so you need a lot of collaboration to get stuff done, and it also
Nico Krijnen:means that you need to have ways to create sort of a shared mental
Nico Krijnen:model of the stuff you're working on.
Nico Krijnen:Um, not just on technology, uh, but also with like domain experts, people who know
Nico Krijnen:how uh, the problem that you're solving could be solved or what the problems
Nico Krijnen:are that you may wanna, uh, solve or how something works in that domain.
Nico Krijnen:Getting all the knowledge together, is a big challenge, because in the end,
Nico Krijnen:right, a lot of engineers talk a different language than people who work in a certain
Nico Krijnen:domain . So, DDD provides a lot of good ways to write the concept of a ubiquitous
Nico Krijnen:language, of bringing that together.
Nico Krijnen:And, uh, event storming is one of the, I think, very approachable ways to do that.
Nico Krijnen:But there's many, many more collaborative ways of doing that.
Nico Krijnen:I think it's really good to, uh, to put more and more focus on that and
Nico Krijnen:just create more and more tools to allow us to do that, uh, in a good way.
Richard Bown:No, absolutely.
Richard Bown:Um, okay, so this podcast is about Legacy and about Loving Legacy, and
Richard Bown:we had a chat the other night about.
Nico Krijnen:Yeah.
Richard Bown:we feel about Legacy.
Richard Bown:Because you asked me, you said to me, so yeah, what's the name of it?
Richard Bown:Oh, legacy and I, I said, cause I love it.
Richard Bown:And you said, oh, I hate it.
Richard Bown:That was your response.
Richard Bown:So yeah.
Richard Bown:So how do you see that?
Richard Bown:So what's the, yeah.
Richard Bown:How does the legacy fit into to your daily work?
Nico Krijnen:I mean, the best times I've had writing software was always
Nico Krijnen:when you're just write, when you're thinking of new stuff, when you're
Nico Krijnen:writing new stuff, , somehow that feels the most productive and especially when
Nico Krijnen:doing it with, A team of people, right?
Nico Krijnen:With different skill sets.
Nico Krijnen:So you combine these skill sets and you create, you get this sort of
Nico Krijnen:magic where you can create stuff that you could never do yourself.
Nico Krijnen:So I think that's, that's, uh, really nice to be in such a situation.
Nico Krijnen:And when you get into a situation where there's a system with a lot of
Nico Krijnen:history and started it somewhere, and then, obviously still, uh,
Nico Krijnen:being involved in it, uh, later on.
Nico Krijnen:Um, but a lot of people joined that project throughout the
Nico Krijnen:time, and obviously it's not.
Nico Krijnen:At the start, it's your baby, sort of, right?
Nico Krijnen:And uh, and you have total control over everything.
Nico Krijnen:And you can put your vision, your ideas in there, and then a bunch of , years later,
Nico Krijnen:your vision changes, your ideas change.
Nico Krijnen:So you have to bring that along.
Nico Krijnen:You have to be very disciplined and very structured to make sure that it
Nico Krijnen:stays in a, sort of, in a good shape, but at some point, , if you don't
Nico Krijnen:do that, it becomes legacy, right?
Nico Krijnen:And, uh, legacy can have a lot of bit different meanings, but typically it means
Nico Krijnen:something that's not, at least how I see it, is it's a code base or a product
Nico Krijnen:that's not easy to work with anymore.
Nico Krijnen:You don't like being in it, you don't, uh, feel like it's, uh, you are getting
Nico Krijnen:stuff done at, at the pace that you would like to get stuff done, right?
Nico Krijnen:I like to go fast.
Nico Krijnen:I like to, to build stuff and, and be excited about those things and
Nico Krijnen:not feel dragged down by, a big stone that you're dragging along.
Nico Krijnen:So, , that's why I hate it, right?
Nico Krijnen:, And that's really why I don't want to be in the situation.
Nico Krijnen:But to be honest, all our industry is full of it, right?
Nico Krijnen:Because there's so many places where we are trying to go faster and faster
Nico Krijnen:and agile and faster, faster, and I think the big problem is that a lot of
Nico Krijnen:teams do not have the discipline to then go fast, but also go quality, right?
Nico Krijnen:And you have to have.
Nico Krijnen:Both of those because the moment you let slip of quality and that control and
Nico Krijnen:architecture and all those kind of things, , you end up in legacy very quickly.
Nico Krijnen:So even if your, your idea is, ah, let's just rewrite because this, this stone
Nico Krijnen:is so heavy, we can't lift it anymore.
Nico Krijnen:Let's just, uh, start from scratch.
Nico Krijnen:It sounds very appealing, but in a lot of cases, If you don't do
Nico Krijnen:something about your mindset and the way you're doing that, you're just
Nico Krijnen:gonna end up with another stone and you're dragging around two stones.
Richard Bown:Okay, so a couple of things there.
Richard Bown:First of all, you said the quality is, is important.
Richard Bown:So I was gonna ask about your approach.
Richard Bown:So typically when you meet a legacy system, first of all, what, what
Richard Bown:are the smells of its legacy?
Richard Bown:And secondly, what would you start to think about doing
Richard Bown:to improve that situation?
Nico Krijnen:Yeah, it depends very much on the situation, but, let's say last
Nico Krijnen:year I was in a a place where, uh, a clear smell that I've picked up, right?
Nico Krijnen:Because I just jump in the project and I, I look around and to be
Nico Krijnen:honest, I wasn't there to fix the legacy but I smell things right.
Nico Krijnen:And then, uh, one of the things I smell, it's okay.
Nico Krijnen:This, this team is using a branching strategy that's way too complicated
Nico Krijnen:for what they're trying to do.
Nico Krijnen:There were two developers and they were having working on
Nico Krijnen:three releases at the same time.
Nico Krijnen:That's just, totally crazy.
Nico Krijnen:Uh, and it was a, there was also a lot of meetings and stuff around it, right.
Nico Krijnen:To organize what goes into which release and then never to re branch and re
Nico Krijnen:well, lots of, lots of wasted work.
Nico Krijnen:So then I go in and I say, okay guys, let's not do this.
Nico Krijnen:Let's change the way we do that, do things.
Nico Krijnen:Let's just move gradually Right.
Nico Krijnen:Towards a more trunk based way of working.
Nico Krijnen:Cuz it's just.
Nico Krijnen:Two developers there, even if we're gonna add more later, let's try and get there.
Nico Krijnen:But we need stuff to make that happen.
Nico Krijnen:So one of the things they really needed is to get, there was sort of a
Nico Krijnen:manual testing cycle that took a week.
Nico Krijnen:Uh, so, uh, we got someone in and they started working on a, uh, test automation
Nico Krijnen:suite, which took a half a year Right.
Nico Krijnen:To get that in place.
Nico Krijnen:But at that point they had a, uh, let's say fully automated regression
Nico Krijnen:test, so deploys to production could be done, let's say after that ran,
Nico Krijnen:which was, uh, Well, half an hour.
Nico Krijnen:So that's different from a week, right?
Nico Krijnen:So you, you, you change the ball game completely.
Nico Krijnen:at that point you get to into a very different, flow of working and
Nico Krijnen:things start to go fast again, right?
Nico Krijnen:So it's the way you work.
Nico Krijnen:So it's a branch strategy, but it was also, the way the pipelines were set up,
Nico Krijnen:it was also the way the testing was done.
Nico Krijnen:Cuz there was good unit testing, right?
Nico Krijnen:But this.
Nico Krijnen:It wasn't enough to give confidence that the thing is actually gonna work.
Nico Krijnen:Cause they were having issues with stuff going or breaking every time.
Nico Krijnen:. Also because of the complexity of the branch strategy, not knowing what
Nico Krijnen:you're actually putting into production
Nico Krijnen:so there's just one example, right?
Nico Krijnen:But there's just so many, many others.
Nico Krijnen:I mean, I remember that, um, in another early project we
Nico Krijnen:had to replace Elasticsearch.
Nico Krijnen:And we were, still using a very old version of that.
Nico Krijnen:Uh, just, uh, didn't get, uh, get around to upgrading it because
Nico Krijnen:somehow it wasn't important as all the features we're building, right?
Nico Krijnen:Because we couldn't upgrade our spring libraries anymore because the spring
Nico Krijnen:data library we use for less search couldn't be upgraded cause it couldn't
Nico Krijnen:talk to the old version anymore.
Nico Krijnen:So you sort of get this cascade of things that are holding you back.
Nico Krijnen:We couldn't upgrade the Java version because of that.
Nico Krijnen:There's just so many things stacking on top of each other.
Nico Krijnen:So we just knew, okay, this, we have to tackle that thing, but
Nico Krijnen:it was gonna be a big change.
Nico Krijnen:Right.
Nico Krijnen:It's not an easy upgrade.
Nico Krijnen:But we just did it.
Nico Krijnen:We all, again, took half a year to do that, but we kept the whole
Nico Krijnen:system working all the time.
Nico Krijnen:We had zero downtime deployments all throughout.
Nico Krijnen:We did deployments twice a week pretty much.
Nico Krijnen:, so we did that whole migration, but in such a way that we could essentially
Nico Krijnen:get the whole new variant up and running and, and ready and test it, et cetera
Nico Krijnen:before we do the actual migration of our production, uh, environment.
Nico Krijnen:Uh, and it also meant that, because a big problem with these kind of
Nico Krijnen:big changes is that while you're working on the big change, which
Nico Krijnen:is gonna take half a year, right?
Nico Krijnen:Somewhere halfway, there's gonna be a super high priority business thing that
Nico Krijnen:comes by and it means you have to go back and work on the, the actual features.
Nico Krijnen:Cause it's a system that's making money, right?
Nico Krijnen:This legacy system is the place where, where you, where your business runs on.
Nico Krijnen:So.
Nico Krijnen:You have to, to do stuff on it.
Nico Krijnen:Right?
Nico Krijnen:Keep it relevant to your customers.
Nico Krijnen:To be honest.
Nico Krijnen:We did the migration within, uh, the complete migration we did in 10 minutes.
Nico Krijnen:But we just prepared the whole thing in such a way that we could do that.
Nico Krijnen:And that works.
Richard Bown:Wow.
Richard Bown:Okay.
Richard Bown:Well, the, the two examples you gave a lot of your work is actually handling.
Richard Bown:Legacy in some way, in some form.
Richard Bown:Either improving it, um, or improving a process around it, or having to
Richard Bown:build something which, which has got a legacy component already.
Richard Bown:So not like that in that last example.
Nico Krijnen:Yeah.
Nico Krijnen:So, and I still hate, hate working with legacy, right?
Nico Krijnen:But, refuse, uh, I refuse to accept it.
Nico Krijnen:I think that's more than mindset, right?
Nico Krijnen:So I, I refuse to accept it as legacy.
Nico Krijnen:, if it's there and sometimes the decision is to, uh, to rewrite it, right?
Nico Krijnen:If you can do that, , and.
Nico Krijnen:The trade works well for you, then that's the way, uh and that's also
Nico Krijnen:the way I do it in some cases, right?
Nico Krijnen:But in a lot of cases, you just have to, uh, to make the legacy not legacy anymore.
Nico Krijnen:Um, and that means bringing in discipline, bringing in ways of working,
Nico Krijnen:that you do stuff in small steps.
Nico Krijnen:And even on a, on a big people call it a monolith, right?
Nico Krijnen:You can transform that into a modulith like, which is, uh,
Nico Krijnen:what you call it nowadays.
Nico Krijnen:in a lot of cases just creating a good modular system.
Nico Krijnen:That is, even that is just one deployable unit or maybe two or three, right?
Nico Krijnen:If you need some scalability in some places, um, is way faster
Nico Krijnen:than all these other things.
Nico Krijnen:And then creating all small microservices
Richard Bown:something I was gonna say.
Richard Bown:Yeah, I completely agree with you as well.
Richard Bown:I think that's absolutely spot on.
Richard Bown:You've gotta pick your horse for your course, essentially.
Richard Bown:Um, however, there's a couple of things there.
Richard Bown:Um, first of all, it is kind of inevitable these days that people
Richard Bown:wanna build on the Kubernetes.
Richard Bown:They wanna have stuff's CV based development essentially.
Richard Bown:So a lot of the time where companies make a decision because it's gonna be,
Richard Bown:it has to be the latest technology to attract people to that particular way.
Richard Bown:Secondly, the around the way of working.
Richard Bown:So you mentioned in order to create or get rid of legacy or control legacy, you
Richard Bown:have to be very structured in the way you work, but also you need to be structured
Richard Bown:in the way you work anyway, essentially.
Richard Bown:So it's kind of, it's not creating, legacy is being structured
Richard Bown:as well as fixing legacy.
Richard Bown:So it's the same approaches essentially just from different balls
Richard Bown:of mud or scales of ball of mud.
Nico Krijnen:So I think if you work on something new, you, you
Nico Krijnen:should also always, do it in that way, uh, as well, probably, right?
Nico Krijnen:Because, uh, otherwise you're gonna end up with, with a legacy, which
Nico Krijnen:you don't want to be, want it to be.
Nico Krijnen:But still in our industry, I mean, how many places do you see that
Nico Krijnen:do not have some legacy system?
Nico Krijnen:I think as an industry we're, we're still definitely not in control here yet.
Nico Krijnen:Um, and there's a lot of.
Nico Krijnen:Knowledge right.
Nico Krijnen:On how to do these things better, but somehow we are not managing to apply it.
Nico Krijnen:So that's also why I think why I'm talking at conferences and spreading
Nico Krijnen:this knowledge because I think it's important to help the industry to
Nico Krijnen:realize this and also to find ways to get it under control, right?
Nico Krijnen:And help people get it under control, , because, um, , we're
Nico Krijnen:building more and more software.
Nico Krijnen:And, if we're not doing it the right way, we're just building, a lot more legacy.
Nico Krijnen:And I don't want to be there.
Nico Krijnen:I don't want to work on more legacy, right?
Nico Krijnen:At the same time, there's all these nice shiny little toys out there.
Nico Krijnen:And we're still engineers.
Nico Krijnen:We like playing with, with toys, at least I do.
Nico Krijnen:Um, and, uh, the latest and greatest stuff is always better than the old stuff.
Nico Krijnen:and in a lot of cases these new toys, uh, Are created to solve a problem, right?
Nico Krijnen:Kubernetes is there to solve a certain problem as well.
Nico Krijnen:Uh, I just don't think it's, it's there to solve every problem.
Nico Krijnen:I mean I've, I've worked with it and there's definitely a lot of
Nico Krijnen:value in, in the way stuff is there.
Nico Krijnen:Um, it's also way too complicated for a lot of environments, I think.
Nico Krijnen:Right?
Nico Krijnen:I think the ease with which, organizations now adopt Kubernetes
Nico Krijnen:and under underestimated complexity, I think that's quite scary, to be honest.
Nico Krijnen:Um, especially if you see how cloud vendors are actually taking a lot
Nico Krijnen:of complexity away from you and how you're trying to get it again.
Nico Krijnen:Right.
Nico Krijnen:Uh, on the other hand, you, you sort of are in control of, of a lot of.
Nico Krijnen:Areas, at least it may feel like that.
Nico Krijnen:Uh, so that's, um, I always like to be in that situation as well.
Nico Krijnen:Right?
Nico Krijnen:I mean, I remember that, um, when we built that, that product that I was
Nico Krijnen:talking about long ago when we started on that, uh, one of the big things that
Nico Krijnen:I really liked, Or the, the good choices I think we made is that we actually
Nico Krijnen:took everything under our own control.
Nico Krijnen:We didn't depend on third party vendors or anything to, uh, to help us.
Nico Krijnen:We made sort of a buy versus build decision at early on, and the, the first
Nico Krijnen:time we did, okay, we'll just buy part of it and built another piece, and later
Nico Krijnen:on, yeah, that vendor was just, you know, the whole industry in that area wasn't
Nico Krijnen:moving at the pace that we needed, so, We changed the decision and we said,
Nico Krijnen:okay, we're just gonna build everything.
Nico Krijnen:Uh, so we control everything and control the evolution that we need.
Nico Krijnen:Um, and that really, uh, played out very well for us at that point.
Nico Krijnen:Right.
Nico Krijnen:But as a, it needs to be a conscious decision.
Nico Krijnen:And I think in a lot of cases now, people are making decision based on
Nico Krijnen:whatever is shiny or whatever vendors you're talking about or, or whatever
Nico Krijnen:consultants are talking about.
Richard Bown:Oh, I think it was always been like that, hasn't it?
Nico Krijnen:Yeah, it is.
Nico Krijnen:Right.
Nico Krijnen:But, uh, that's not the, that's not the way it should be, right?
Nico Krijnen:Uh, you, you should make, uh, trade offs based on what you really need.
Nico Krijnen:But yeah, that's really hard always.
Nico Krijnen:I think in a lot of cases People underestimate the value of
Nico Krijnen:just sticking with the stuff that you know and can handle.
Nico Krijnen:Uh, and that means less shiny, less toys, but stuff that you can move
Nico Krijnen:fast with and that is, I think, usually quite underestimated.
Richard Bown:I'm, I'm suddenly thinking.
Richard Bown:This is, you are almost describing legacy, but it's kind of optimized,
Richard Bown:so it's like a, you've gone through the process of improving your system.
Richard Bown:Everyone understands how it all works.
Richard Bown:Once you've got an optimized legacy system, essentially that's the
Richard Bown:sweet spot in some ways because you could, everyone's familiar with it.
Richard Bown:They know what the tools are like, they know how to extend it, and,
Richard Bown:and it's also simple to deploy and it's easy to, to get releases out.
Nico Krijnen:Yeah, but that's not how people experience legacy, right?
Nico Krijnen:So I think if you take the word legacy out, but say a well organized, structured
Nico Krijnen:system that people know and understand.
Nico Krijnen:That's not legacy, right?
Nico Krijnen:Because I think a big portion of legacy is that people don't understand how the
Nico Krijnen:system works or what it's supposed to do, or at least do, or pieces of it.
Nico Krijnen:There are, very good reasons for it.
Nico Krijnen:Using new technology on certain stuff.
Nico Krijnen:you really need to understand the, the field, and I think that's where
Nico Krijnen:domain driven design, again, has a good role to play, is that it
Nico Krijnen:helps you to understand a domain.
Nico Krijnen:It helps you to understand the problem space.
Nico Krijnen:And once you understand that, that really helps you to, um, to make better decisions
Nico Krijnen:about the stuff that you're gonna do.
Nico Krijnen:And maybe.
Nico Krijnen:Right.
Nico Krijnen:And I think also combining product thinking with domain-driven design
Nico Krijnen:is really powerful space that's being explored by the community at the moment.
Nico Krijnen:I think that is even more powerful because then you're also starting
Nico Krijnen:to, uh, think a lot about, okay, what's important for our users?
Nico Krijnen:Even makes the decision more targeted and then maybe there are cases which, cause
Nico Krijnen:I experienced them, where it's good to use some experimental technology to do
Nico Krijnen:something that nobody else has ever done because it's gonna put you in a space
Nico Krijnen:where nobody is and where you can solve problems that nobody else can solve.
Nico Krijnen:And obviously that's a, from a business point of view, a very good place to be.
Nico Krijnen:So, If technology helps you there then maybe that's the the
Nico Krijnen:thing you have to do, right?
Nico Krijnen:But then you have to be conscious that it's gonna be a trade off, right?
Nico Krijnen:It means you have learning curves.
Richard Bown:Or you make it an experiment, you just say it's a mark.
Richard Bown:It's almost a marketing experiment.
Richard Bown:You throw it away.
Richard Bown:So if it doesn't work, fine, we, we, we move on fast.
Nico Krijnen:A lot of problems in those cases, right?
Nico Krijnen:Is that you, people don't throw it away, right?
Nico Krijnen:It's, uh, it's a marketing experience, uh, but then it's somewhat successful
Nico Krijnen:and just lingers on and becomes another legacy stone that you have to carry along.
Richard Bown:Yeah, that, that links onto to a nice point, um,
Richard Bown:around exactly that exactly.
Richard Bown:Attempts to fix legacy.
Richard Bown:You must have seen this as well, where people have kind of come in and
Richard Bown:say, oh, this is a, like a monolith.
Richard Bown:We need to split it up.
Richard Bown:And suddenly you end up with a monolith plus a couple of microservices,
Richard Bown:plus some other pieces in an attempt to do the right thing, but not.
Richard Bown:Carrying it through.
Richard Bown:I've seen that.
Richard Bown:I'm sure you have too.
Nico Krijnen:Yep.
Richard Bown:It's in that, at that point, you're kind of
Richard Bown:screwed both ways, aren't you?
Richard Bown:Because you kind of, you can get, you can get a system into a point where
Richard Bown:you can't really go anywhere with it.
Richard Bown:You and that point, you have to just throw it away or just leave it, you know,
Richard Bown:because it becomes a bit of everything.
Richard Bown:It's a Frankenstein.
Nico Krijnen:Yep.
Richard Bown:yeah.
Richard Bown:How would you approach that?
Nico Krijnen:Well, I, again, I would try to take the Frankenstein out of
Nico Krijnen:it, not accept that it's a lost cause.
Nico Krijnen:And sometimes it is, right.
Nico Krijnen:You just have to throw it away.
Nico Krijnen:But to be honest, I think in a lot of case, people don't realize that you
Nico Krijnen:can still make it work, But you have to then probably make sure that you
Nico Krijnen:start, rewriting the parts that really nobody understands anymore, get the
Nico Krijnen:team like the, and the domain experts together and have them solve that
Nico Krijnen:piece together so everybody understands that part of the software anymore.
Nico Krijnen:And then you probably don't need the old part anymore and you can turn
Nico Krijnen:it off and you only have to pick out pieces of that legacy part and,
Nico Krijnen:uh, and chop away at it bit by bit.
Richard Bown:Just go back into that for one minute because, uh, you defined
Richard Bown:a legacy system is something which.
Richard Bown:Is not supportable anymore.
Richard Bown:Is that right?
Nico Krijnen:No, it's a, there's a bunch of definitions, right?
Nico Krijnen:I think Michael Feathers has a nice, nice one where he says, yes, a legacy system
Nico Krijnen:is just a system that doesn't have tests.
Nico Krijnen:Um, that I think in a lot of cases that's the case.
Nico Krijnen:Yeah.
Nico Krijnen:A lot of peop systems without tests, uh, become legacy, but
Nico Krijnen:it's not necessarily the case.
Nico Krijnen:What I've seen so far, it is usually the point where people don't
Nico Krijnen:understand how a system works anymore.
Nico Krijnen:Uh, and it can have a lot of reasons, right?
Nico Krijnen:Can be because there are no tests.
Nico Krijnen:Cause then, uh, or because the tests that are there are really poorly written,
Nico Krijnen:in some cases, it's because the people with the knowledge about the system
Nico Krijnen:left or, some new people joined that have a very different idea about what it
Nico Krijnen:should be, start changing it and then.
Nico Krijnen:Only do the change halfway you could say.
Nico Krijnen:So you get sort of two systems or two different ways of working in, in one.
Nico Krijnen:That's also what, what we talked about earlier.
Nico Krijnen:System nowadays are very complex, right?
Nico Krijnen:Distributed systems where multiple people are always working.
Nico Krijnen:Uh, this is not just one person working on it.
Nico Krijnen:This consistency is very powerful to have in a system, but it's also
Nico Krijnen:really hard to maintain, right?
Nico Krijnen:So you have to be very disciplined.
Nico Krijnen:Um, And, um, I've been in the situation.
Nico Krijnen:Why did the system that I once built, uh, over the years, it, it wasn't
Nico Krijnen:the system that I built anymore.
Nico Krijnen:Also, it didn't follow the principles that we set out at the start.
Nico Krijnen:I mean, we wrote all the documentation about, uh, architecture principles
Nico Krijnen:and those kind of things that we wanted to follow, but new people
Nico Krijnen:join and at some point there's multiple teams working on it.
Nico Krijnen:And, uh, There's is no way you, you can completely control that,
Nico Krijnen:especially if you try to do it like two things as documentation.
Nico Krijnen:Cuz yeah.
Nico Krijnen:Whoever finds and reads these things anyway.
Nico Krijnen:So I think one of the things that I'm also trying with these workshops is automate
Nico Krijnen:a ways to enforce these things, right?
Nico Krijnen:So, , in the workshop you encounter something that's called, uh, arc Unit,
Nico Krijnen:which allows you in your pipeline check or you compile time or test
Nico Krijnen:time, check that, uh, the architecture that you have in mind is not violated.
Nico Krijnen:Uh, so these kind of things really help to also help juniors that
Nico Krijnen:started on a, on a project or even other, uh, other coders that have
Nico Krijnen:a different idea to, to understand why these things are there, right?
Nico Krijnen:Because there is something that will prevent them from, uh, building that
Nico Krijnen:version of the code if they, if they don't follow the, the intention.
Nico Krijnen:So again, it comes, it comes down to discipline again.
Nico Krijnen:Um, and that's, that's hard.
Nico Krijnen:And also not a comfortable place to be, right?
Nico Krijnen:Because, uh, discipline takes effort.
Nico Krijnen:Uh, just doing your thing is a lot easier.
Richard Bown:Exactly, and then people move on as well.
Richard Bown:That's the thing.
Richard Bown:If there's a, there's a churn, continuous churn of developers, which can happen
Richard Bown:a lot of times, a lot of places.
Richard Bown:Then there's disruption, and then disruption means things slow down.
Richard Bown:Of course, when CH teams change and then pressure comes on to deliver and suddenly
Richard Bown:ADRs, what ADRs, you know, so it's.
Richard Bown:Yeah, it's that social element of coding, which is so important.
Richard Bown:But not just the, not just the collaboration, but also the way
Richard Bown:that we pass on information.
Richard Bown:In fact, something you said about writing documentation or reading documentation.
Richard Bown:I mean, that's the thing that, that I always do.
Richard Bown:I always try and find documentation as soon as I start a job.
Richard Bown:I'm trying to learn myself from the code how, how, what the architecture is, and.
Richard Bown:How, how many places do I turn up and I say, well, where's, where's a picture
Richard Bown:of the arch of, of an architecture view?
Richard Bown:And no one can show me anything that's even up to date or
Richard Bown:relevant updated in last year.
Richard Bown:That's surely gotta be the starting point for anyone coming into the system.
Richard Bown:But, uh, everyone learns differently.
Richard Bown:That's, that's fine.
Nico Krijnen:Yeah, so we talked about visual, uh, stuff earlier, right?
Nico Krijnen:stuff visual, I think is always super important to have at least one visual
Nico Krijnen:in your, in your project, right?
Nico Krijnen:That you represent your architecture and, um, right, the high level
Nico Krijnen:overview of what the system is supposed to be, how it's supposed to work,
Nico Krijnen:just the high level mental model.
Nico Krijnen:So everybody is, Able to talk about it, uh, and understand
Nico Krijnen:it in, in a similar way.
Nico Krijnen:if you have something like that and you make sure that you constantly
Nico Krijnen:use it in the discussions that you have, you're gonna keep it up to date.
Nico Krijnen:Because when you're having a discussion about it, you're
Nico Krijnen:changing something, you're, you know, you have to change it, right?
Nico Krijnen:So, uh, and the trick there is I think, to.
Nico Krijnen:And at Luminus we have our Luminus way of working, uh, which sort of a document that
Nico Krijnen:we try to help everyone here with to sort of have some principles and guidelines
Nico Krijnen:to follow on how you do these things.
Nico Krijnen:And we have a sectional documentation there, which says try to write the
Nico Krijnen:minimal amount that you can, right, that you need, but that you are sure
Nico Krijnen:that you can keep up to date over time.
Nico Krijnen:Cuz uh, in a lot of cases I see people producing just tons
Nico Krijnen:and tons of documentation.
Nico Krijnen:But yeah, there's no way you're gonna keep that up to date.
Nico Krijnen:So, Um, another approach I really like is taking, uh, like visualizations
Nico Krijnen:out of the actual reality, which is the, the code, right?
Nico Krijnen:Um, so nowadays there's more and more tooling that allows you to do that.
Nico Krijnen:That's way more useful than having, something that you
Nico Krijnen:have to maintain manually.
Richard Bown:Well, indeed.
Richard Bown:Yeah.
Richard Bown:I think that's, that's important as well.
Richard Bown:I was gonna ask, have you used C4 diagrams at all?
Nico Krijnen:Yeah.
Nico Krijnen:Yeah.
Nico Krijnen:I'm, I'm, to be honest, I'm a big fan of, uh, of c4.
Nico Krijnen:I really, uh, um, like that concept, um,
Richard Bown:Do you find that, um, that people look at you funny though
Richard Bown:because you're like, when I, cause I'm basically C4 makes complete sense to
Richard Bown:me as well and the context, the, the top level box is the most important
Richard Bown:part of any, anything for me there.
Richard Bown:Um, I think it's the most warm part of anything.
Richard Bown:I, I will just stick with the context for you to be honest.
Richard Bown:I really want to go into components or anything even, but,
Nico Krijnen:Don't agree.
Nico Krijnen:Totally
Nico Krijnen:agree.
Richard Bown:But I get looked at weird now because I kind of got, I draw these
Richard Bown:blobs and I've had people, actors and stuff, and I say, this is our system.
Richard Bown:And people go, well, there's, where's the, where's the architecture?
Richard Bown:Where's the interface here?
Richard Bown:Where's the network?
Richard Bown:Where's the whatever?
Richard Bown:And I'm like, don't forget it.
Richard Bown:Forget about that.
Richard Bown:We don't need to worry about that.
Richard Bown:We need to know the actors.
Richard Bown:We need to have the systems.
Richard Bown:And that's it.
Richard Bown:You know, these blobs.
Richard Bown:Um, and I kind of like, I'm kind of second guessing myself now because I go into
Richard Bown:meetings and I present this and, they kind of like, they've already raised all these
Richard Bown:questions at a detailed level and I'm like, I'll, I'll have a meeting with 'em.
Richard Bown:I'll say, listen, that's not important.
Richard Bown:All we need to understand is the interactions at this level, and
Richard Bown:then we can dig in into the details later or maybe we don't need to.
Richard Bown:That's the point.
Nico Krijnen:Yeah, and I think like C4 does it pretty well, right?
Nico Krijnen:And you have the system level and that, uh, the container level is
Nico Krijnen:usually quite useful still as well.
Nico Krijnen:But the focus there is on giving you the context of where your
Nico Krijnen:system operates in, right?
Nico Krijnen:All the things that are cited.
Nico Krijnen:Um, and I think C4 does it on a, like more technical level
Nico Krijnen:or you still see the actors.
Nico Krijnen:So, uh, it forces you if you do it right to, uh, to put a
Nico Krijnen:lot of details in there, right?
Nico Krijnen:You, you, for every system and for every, every container there, you,
Nico Krijnen:you describe as purpose, right?
Nico Krijnen:You describe its relation to other pieces you describe the kind
Nico Krijnen:of technology that it's using.
Nico Krijnen:So it gives usually a lot of information already.
Nico Krijnen:Um, at least when you come into a project, I think a lot of, I, I see
Nico Krijnen:a lot of my colleagues also, they create these kind of diagrams when
Nico Krijnen:they come into a project just to get an understanding and they enrich it, right?
Nico Krijnen:They give it back to the project to make sure it, it stays there.
Nico Krijnen:Actually had a talk with Simon Brown, last year, uh, at one of the
Nico Krijnen:conferences where we Ran into each other.
Nico Krijnen:And, um, so I was playing with the idea of, of wouldn't it be nice if
Nico Krijnen:we can have to sort of always up to date documentation also on that level.
Nico Krijnen:Right.
Nico Krijnen:And, uh, so I had a discussion with him about that.
Nico Krijnen:And the outcome that we came to is that well actually the real value
Nico Krijnen:of that kind of high level diagram is not so much having an up-to
Nico Krijnen:date version of it It is drawing it together with the people working on it.
Nico Krijnen:Right.
Nico Krijnen:And that act of drawing it.
Nico Krijnen:Yeah.
Nico Krijnen:You sort of bring up the knowledge from the group, right?
Nico Krijnen:You get all the knowledge about how the system works together and
Nico Krijnen:you create a shared mental model.
Nico Krijnen:And, uh, I think a lot of collaborative techniques also
Nico Krijnen:in the domain of design do that.
Nico Krijnen:And a, uh, I think that's, that's the bigger value, just not just the image, but
Nico Krijnen:the mental model that you create together.
Nico Krijnen:Um, so to automate it wouldn't do that justice, right?
Nico Krijnen:Because you wouldn't be able to have that collaboration going.
Nico Krijnen:So, uh, um, yeah, I think, uh, that's also important to realize.
Nico Krijnen:Some diagrams you just have to draw.
Nico Krijnen:Uh, and that's fine.
Nico Krijnen:Uh, you can't automate everything.
Nico Krijnen:There's essentially a lot of value in not automating it.
Richard Bown:Exactly.
Richard Bown:It drives a conversation.
Richard Bown:That's the whole point, I think.
Richard Bown:Yeah.
Richard Bown:Um, so apart from c4, cause C4 has some, is it the Structurized
Richard Bown:tool or the framework as well, which allows you to, um, to model.
Richard Bown:There's some, there's some more kind of, uh, loose, loosely coupled ones, I suppose
Richard Bown:you could say, which allows you to just draw the diagrams without having to set
Richard Bown:up relationships and stuff, which is cool.
Richard Bown:Any other tools that you would recommend as well, or mo or models, um, that you
Nico Krijnen:Les.
Nico Krijnen:Yeah, so I think in this space, like giving context , about a system, what I
Nico Krijnen:think is really useful to draw a context map like from DDD, which essentially is
Nico Krijnen:like the high level context overview of, a system, but then more focused on the
Nico Krijnen:communication patterns between systems and especially also between teams, right?
Nico Krijnen:Cause uh, context maps are a lot about the organizational
Nico Krijnen:structure that you're dealing with.
Nico Krijnen:Um, and then you draw them.
Nico Krijnen:From the point of view from the team, right?
Nico Krijnen:And then looking outward, what are the, the other systems and teams that
Nico Krijnen:we're, uh, that we're dealing with and how, what is our relationship there?
Nico Krijnen:And, uh, just being aware of that.
Nico Krijnen:Being aware of what relationship you have.
Nico Krijnen:Like are you downstream?
Nico Krijnen:Are you upstream?
Nico Krijnen:Uh, are you going separate ways?
Nico Krijnen:Like all these things are important to understand or if,
Nico Krijnen:do we have a shared kernel?
Nico Krijnen:These kind of things are important to understand cuz it gives you.
Nico Krijnen:A mode of operating, uh, on that relationship.
Nico Krijnen:And yeah, being aware of that is really important.
Nico Krijnen:And I think in a lot of case people are not aware of it, right?
Nico Krijnen:So, and that leaves them to maybe communicate or expect things that are
Nico Krijnen:not to be expected of that relationship.
Nico Krijnen:So creating these context maps, uh, is I think, very useful as well.
Nico Krijnen:So I say, yeah, uh, a high level C4 diagram and a context map.
Nico Krijnen:I think those were, would be the, the good ones to get a, a feel for, uh,
Nico Krijnen:how, uh, well, when I, when I would onboard on a, on a team, it would be
Nico Krijnen:lovely if we would have these things.
Nico Krijnen:And then I think the other thing you really need to have is like a
Nico Krijnen:business model canvas for the part of the, uh, the part that you're
Nico Krijnen:working on to understand, okay, what is the business you're trying to do?
Nico Krijnen:Why are we actually building the system?
Nico Krijnen:So these kind of things just to, to give you an understanding on the, the
Nico Krijnen:business domain that you're working in.
Nico Krijnen:Don't see them being shared in a lot of places.
Nico Krijnen:But yeah, I think it would be great if every project would have those.
Richard Bown:Yeah, you'd hope so.
Richard Bown:But yeah, again, I think the, the temptation is always for everybody to
Richard Bown:prove their worth on any project and people who are kind of developer or either
Richard Bown:your developers or your bas or whatever role you play, project managers, everyone
Richard Bown:wants to show that they know stuff.
Richard Bown:So they, they want to break out the tools, they wanna break out
Richard Bown:the low level stuff and get diving on details and show activity.
Richard Bown:Through busy work a lot of the time and this kind of helicopter view, context
Richard Bown:view kind of stuff is, it's rare.
Richard Bown:It's rare to see and it's, it's a shame I think because yeah, all the stuff that
Richard Bown:we've talked about the, yeah, finding legacy, building legacy before even
Richard Bown:you built anything, you know, comes through rushing ahead a lot of the
Richard Bown:time rather than taking a bit of time, stepping back and just saying, okay,
Richard Bown:what are we trying to achieve here?
Richard Bown:And can we agree on that, at least through this collaborative process.
. Nico Krijnen:And then again, we don't want to get the impression cuz that
. Nico Krijnen:that's also an impression that a lot of people have from domain driven design.
. Nico Krijnen:That it means you start to do a lot of design upfront.
. Nico Krijnen:Uh, but actually that's, that's still not what you do.
. Nico Krijnen:You really try to do it it, or you actually do it small.
. Nico Krijnen:You do a bit of thinking there, but then you try to bring it into
. Nico Krijnen:practice and see if it works.
. Nico Krijnen:Because then you'll learn whether it's actually the case.
. Nico Krijnen:So, uh, uh, definitely a bit more thinking up ahead, but not too much
Richard Bown:Awesome.
Richard Bown:Um, brilliant.
Richard Bown:Well, Nico, this has been brilliant.
Richard Bown:I I'll share a few things I think with our listeners.
Richard Bown:Um, you mentioned this thing, the arc uh, plugin, um, in the
Nico Krijnen:our unity.
Richard Bown:arc units.
Richard Bown:Yeah.
Richard Bown:So maybe you could share the link with me for that.
Richard Bown:That'd be
Nico Krijnen:yeah, sure will do.
Richard Bown:it's abl that, that sounds really interesting.
Richard Bown:I want, that's myself.
Richard Bown:I'll share a couple of other links about various things including the,
Richard Bown:the DD meetup and, and DD Europe.
Richard Bown:That'd be great.
Nico Krijnen:Yeah.
Richard Bown:like to say thank you so much for joining me.
Richard Bown:It's been really good fun.
Nico Krijnen:Yeah, same here.
Richard Bown:Thank you so much to Nico for joining me today.
Richard Bown:I hope you enjoyed the episode as much as I did.
Richard Bown:I will include in the show notes, links to Nico's speaking engagements in his
Richard Bown:workshops, and please join me again next time on the next episode of Loving Legacy.