Navigating BADD vs. FaDD: Strategic Refactoring in Software Development
In this episode of "How Many CTOs Does It Take?" podcast, hosts Scott Porad and Brad Hefta-Gaub dive deep into the engineering crossroads between Better Architecture Driven Development (BADD) and Feature Driven Development (FaDD).
They unpack the eternal question faced by every CTO and engineering leader: Should we refactor now for a better tomorrow, or build features today and clean up as we go?
Drawing from decades of leadership experience, Scott and Brad share stories of modernization projects that went right—and wrong. They explore how teams can avoid "second system syndrome," how to build alignment around what better architecture actually means, and why cultural discipline matters more than technical purity.
Along the way, they reveal:
-
Why "refactor everything first" often fails—and how to prevent half-finished modernizations.
-
The "While You're At It" risk: scope creep disguised as progress.
-
How executive challenges can sharpen, not derail, technical strategy.
-
The hybrid middle ground—"Bad with Fad"—that blends architectural improvement with feature momentum.
-
Why the fastest way out of a technical hole is to stop digging deeper.
Listen in for a thoughtful, funny, and practical debate on what it really takes to evolve complex systems—without breaking the business.
- 00:00 Introduction and Podcast Setup
- 00:44 Introducing the Topic: Bad vs. Fad Strategy
- 01:10 Exploring the Bad Strategy
- 02:31 Defining Bad and Fad Strategies
- 03:46 Debating the Pros and Cons
- 06:15 Personal Experiences with Strategies
- 08:09 Implementing Better Architecture
- 16:01 Team Agreements and Practices
- 18:44 Principles of Software Engineering
- 19:01 Aligning on Better Architecture
- 19:37 Challenges in Modernization
- 22:12 Risks of Bad and Fad
- 27:31 Hybrid Approach: Bad with Fad
- 33:29 Cultural Shift for Continuous Improvement
- 34:53 Conclusion and Reflections
Resources:
- How Many CTOs Pod: https://howmanyctospod.com
- Scott Porad: https://www.linkedin.com/in/scottporad/
- Brad Hefta-Gaub: https://www.linkedin.com/in/bradheftagaub/
#TechPodcast #EngineeringPodcast #DevTalks #PodcastForDevs #HowManyCtos #Podcast #Ctos #CtoPodcast #Technology #Engineering #SoftwareDevelopment #TechLeadership #EngineeringLeadership #SoftwareArchitecture #Refactoring #TechnicalDebt #LegacyModernization #AgileDevelopment #FeatureDrivenDevelopment #BetterArchitectureDrivenDevelopment
Scott: A risk of bad is the four most expensive words in the human language,
while you're at it.
Hey, Brad,
how are you doing?
Brad: I'm doing great. How are you doing, Scott?
Scott: Good.
Do you want to record a podcast?
Brad: Yeah,
let's do it.
Scott: What should we call it?
Brad: How many CTOs does it take?
Scott: That's right. This is the How Many CTOs Does It Take podcast.
My name is Scott Porad,
and this is my trusty co-host.
Brad: Brad Hefta-Gaub.
Scott: Brad,
I've got a question for you today that
Brad: Yes, tell me.
Scott: has nothing to do with AI.
Brad: Okay,
good.
Scott: It might have something to do with AI possibly, but I don't think it does.
Brad: All right,
Scott: I'm
Brad: I'm listening.
Scott: sure AI will come up.
I want to know what you think of the bad strategy versus the fad strategy.
Brad: I'm going to have to learn more about the both of those strategies before I can answer.
Scott: That's right.
Let me tell you.
Okay,
so there is...
A part of the system at the company I work at, the company wants to refactor. Well,
it doesn't want to refactor at all. It wants some new functionality in that system.
And in order to get it there,
really the code needs to be refactored.
Okay.
It's a tangled mess as it is now because it's been hacked on for a lot of years and they want to add a lot of complexity basically to keep it really simple.
Well,
imagine if it's a one-to-one relationship now and they want it to be a many-to-many.
It's just, it's all tangled and they're just going to make it more tangled.
And so they're on board with, you know, they want to do this and they want us to invest the time to refactor it. We've been able to make that case,
no problem.
And a lot of this is actually we don't use the language refactor, we use the language modernize. So that's our issue.
But let's set that aside.
Okay.
So of course there's, you can't go down this pathway without starting the conversation,
should we start it over from scratch?
Brad: That good system?
Scott: And of course we entertain that idea for a week or so,
and then we're like, this is nuts.
We're not going to write it over from scratch. We need to refactor it. Okay.
Brad: Right.
Scott: So now there's two possible ways you can,
well, there may be many possible ways you can refactor this, but there are two that I am currently debating.
Brad: Sure.
Scott: Let me tell you about the bad strategy and the fad strategy.
Brad: Okay.
Scott: They're acronyms.
Brad: Okay.
Scott: Bad is B-A-D-D,
and it stands for Better Architecture Driven Development.
Brad: Okay.
Scott: And fad is also an acronym,
but it's not a very good acronym because it doesn't have all the right letters, but for having a pithy choice,
it fit.
And fad is feature-driven development.
There's no A in it.
Brad: Now it's FDD fad.
Scott: It is FDD,
but I threw that.
It's really,
okay, well, let's talk about these things.
The fad is,
I think, what we commonly do,
which is we say,
okay,
we want this system to work in this new way,
so we're going to refactor it.
As we add these capabilities to the system,
we are going to refactor along the way so that we deliver the thing that we want to deliver.
The bad strategy says, no,
no, no.
Refactor that thing and just make it work good the way it is,
and then after it's been refactored, add your new capabilities on top of it.
Brad: Okay.
Scott: Now, I want to know what you think. Are you a bad guy or a fad guy?
And I know your answer,
which is it depends.
So upon what does it depend?
Brad: I Or don't know.
Scott: should we just explore the pros and cons Let's of bad and explore fat?
Brad: the pros and cons because I'm not sure.
Scott: Let me give one more piece of context.
Brad: Yeah, sure.
Scott: I have always been a fad guy.
Brad: I've never felt like I've been asked this question before,
so
Scott: Yeah.
Brad: I was taking a moment to check in with myself to sort of like,
wait,
what do I think about?
Like, I definitely couldn't just like shoot from the hip on this one.
I
Scott: Okay,
Brad: had to check in.
Scott: let me give you some more context.
So I've always been a fad guy.
If you're going to refactor, you refactor in a direction and the direction is toward the capabilities that you want.
But I was challenged on that in the last couple of weeks by the funniest of people,
by the CEO and the chief product officer
Brad: Interesting.
Scott: of the company I
Brad: Yeah,
Scott: work
Brad: yeah, yeah,
Scott: at.
Brad: right.
Right.
Scott: I wasn't quite challenged. They didn't intentionally challenge me.
They just said, well, why are you doing it that way? Why aren't you going to modernize it first and then build it?
the new stuff on top second that seems like it would be easier and i did all i explained all the reasons why you don't do that right because this gives us actually need to take a step further back i've been pounding the table like hey if you want us to refactor this thing we need some product requirements we need to know
And not just like product requirements for this little tweak you want us to make, but like long term, where do you want to go with this new
Brad: Right
Scott: set of capabilities you want us to have here so we can start building in that direction. They've been saying, why do you want to know that? Aren't you just going to you're just modernizing it. Right. Then after you're done modernizing it, then we'll add the new capabilities on.
And then I explain,
well,
no,
no,
we need to do this in a direction. If I give the engineers a blank check,
they're just going to fix a bunch of stuff and we're not going to get anywhere.
And, you know, I
Brad: Well,
Scott: mean, like the
Brad: like yeah,
Scott: engineers would love to do it that way, but that's not the best way for the business.
But then I thought to myself,
I mean, these two individuals are not dumb.
They're executives at a pretty big company.
Brad: I totally yeah
Scott: should reflect upon that for a second. Is there something I am missing?
Why am I a fad guy and not a bad guy?
And so I've got some further thoughts on that. I can tell you, I can lay more out, but it seems like you got some thoughts.
Brad: yeah so I've had time to check in with myself um
Scott: Great. Let's hear it.
Brad: I feel like the very first reaction that I had well actually when you said I've always been a fad guy that like a little thing went off in my brain going yeah I think I've always been a fad guy too so then I was like okay what why why is that
i mean bad the the bad better architecture driven development like that feels like second system that's like screaming second system to me and it's funny i actually have this memory oh my god this is so long ago this is 20 years ago at real networks more than 20 years ago because i've been gone for more than 20 years but i remember
There was a point where essentially one of the dev teams kind of was like, we're going to rewrite everything.
And they were kind of like this little,
you know, kind of pirate group,
you know, they were kind of like they had their their their their leader, their VP level leader was like, screw everybody else, we can do it our own way.
And.
They basically effectively made a better architecture argument.
Like stuff has changed since this code was written.
There's better ways to do this. It's become this big monolith.
Why don't we start over and build the small thing?
And they got a demo working of the top veneer of the features that mattered.
enough just enough to kind of like keep the momentum going and then they just they got stuck in the churn of trying to build all the new features so it was like classic second system effect well
Scott: Yeah, that's second system. I don't think that's what bad is. Bad is not second system.
But here's
Brad: okay
Scott: what I envision bad being.
Brad: tell me
Scott: Okay,
you've got a monolith.
you're going to decompose this into well let's say let's not even decompose it you've got a monolith with a bunch of spaghetti code we're just going to go in there and like we got these methods that are 2,000 lines long and that are recursive and that are all messy and we're just going to refactor this code it's we don't want it to do anything differently than it does today we just want it to be easier to work with
We've got a monolith, a bunch of code and a giant repo with millions of lines of code. We're going to decompose this into, let's just say, half a dozen different macro services and they're going to talk to each other through some communication mechanism.
And so I will have a smaller footprint to finish with.
So we'll just have a better architecture.
We're going to document our APIs and
Brad: yeah
Scott: we're going to have right APIs.
Brad: but this but this is the but this is yeah but hold on a second so like
When I hear someone say,
let's do a better architecture,
I hear that. And even when I hear you like it'd be one thing if it's like.
like i mean i i'm i'm dealing with this with one of the one of the teams that i'm working with where we've got just a file that's like 3 000 lines long and it's like oh my god like who let this file get so big well let's start peeling pieces out of it and you end up changing like of course you're not trying to change the behavior but but when you like are like hey this file has become monolithic
itself is too big let's make let's pull out the helper classes let's pull out you know a bunch of these functions and make them tiny little helper classes instead right like maybe i i guess are you saying that's that's not second system but that's but that's better architecture is
Scott: That'd
Brad: that i
Scott: be an example of refactoring in order to make the code better.
Don't get too hung up on the word architecture.
I mean, I was just, you know, I had to come up with some pithy names for these things,
Brad: see
Scott: right?
Right.
But,
you know,
like you're basically saying to the team, look,
we want to make this code right now. You're saying it takes a long time to build things because the code is a ball of mud.
Right.
Brad: Yeah,
Scott: It's
Brad: right.
Scott: your spaghetti code.
Fine.
Brad: You just go in
Scott: We're
Brad: and unmod
Scott: going to spend a bunch of time and making it.
What's that?
Brad: unmod it
Scott: Yeah,
we're going to unmud it.
That's what we're going to do.
We're going to make the messy things unmessy. We're going to make the spaghetti untangled and we're going to make it a lot easier.
And then after we've done that for a while,
we'll define what maybe what good looks like there.
But after we've done that,
then we'll go.
Now it should be easier to work with, right? Then we'll go add in the stuff that the business wants.
Brad: Yeah.
Man,
I don't know. I'm feeling.
I'm feeling uneasy about this.
You sort of said something a few minutes ago that I think is maybe the articulation of what I'm feeling uneasy about.
You said something like, if I don't give the developers a direction,
they're just going to go do stuff that
Scott: Yeah.
Brad: is not necessarily,
it just maybe makes them feel better.
Scott: Yeah.
Like, well, let's go back to what are we trying to accomplish?
Brad: Yeah.
I mean, you said something earlier about what the business goal was.
It's like essentially pivoting from like a one-to-one relationship to a many-to-many relationship.
Scott: That's not really what it is. That's just an illustration of like, imagine you had some complex thing and then that's what they wanted to do, right?
You'd be like, oh my God, we're going to just make this a really tangled ball of mud.
No,
it's what's practically happening is the business is saying we want this capability.
engineering is saying okay it's going to take you this long to get that business is saying that's going to take us too long how could you get it faster the engineers are saying well if this system wasn't so crappy we could get we could build it for you faster like if we weren't having to deal with this ball of mud
Brad: Yeah.
Scott: and and the and the business is saying cool fix the ball fix him up great
Brad: development.
Scott: yep
Brad: Yeah.
Scott: they're saying great fix them we're happy to we're happy to have you fix the ball of mud because you're going to have if it isn't now it's going to be the next thing we want you're going to have to fix it so great fix the ball of mud and then we've arrived at this question of like well how do we fix the ball of mud and the first question you ask is well should we start from scratch and you entertain that for a little bit until you realize that's a fool's errand and then you get to the next thing
thing which i've always taken the fad approach which is like okay we're going to define what we want the product to be like the software to be like and then as we build towards that we'll refactor along the way to make it less money and i was i used the word challenged i mean i'm the one who took the challenge i don't think they meant to challenge me they were just asking like
Brad: So why
Scott: we
Brad: are you doing
Scott: thought
Brad: it that way?
Scott: Well, they didn't even say why they were just like I assumed you were going to do it this way Why are you doing it? Yeah, I assumed you were going to do it this other way like
Brad: modernize
Scott: just to come it in
Brad: then add features well
Scott: right
Brad: i want to try to like i i think this is a super interesting question and i feel like
I feel like it's worth me challenging why am I uneasy about this?
Like, what am I uneasy about?
And I think maybe,
like,
let's go down this better architecture driven design approach for a second. Let's go down that. Let's let's
Scott: Let's
Brad: try to explore
Scott: talk about pros
Brad: what.
Scott: and cons.
Brad: Well,
no,
before we talk about the pros and cons,
let's make sure we're clear on what that would look like.
I'm feeling I'm kind of feeling a little my kinesthetic learning brain is kicking.
kicking into full gear here and i'm like what would this look like and feel like what would this mean like how
Scott: Here's
Brad: would what would
Scott: what I think
Brad: we yeah
Scott: it would look like.
Brad: yeah tell me
Scott: It would, I mean, I don't have the definitive answer,
but I think these are some things that it would look like.
It would have,
at the architecture layer,
it would take the monolith and break it into,
let's just say, half a dozen major chunks.
meaningful domains and those chunks would communicate via messages with each other at the code layer it would look like let's just call it
fixing a lot of the unbest practices but the worst practices right the get getting rid of the you know taking the 3 000 line files and fixing them those kinds of things that the code you know this is a system that has a lot of it's written in ruby and ruby sort of it uses a ruby on rails and so it has this active record spawns these events you know on save and on update and on these things and people have tapped into those
into those and it makes navigating the code very complex and so maybe you straighten some of that stuff up so that people who are trying to reason about how the system works it might not be taking advantage of all the ruby and ruby on rails magic but it would be for a large team of developers it would be easier to reason about you would write documentation or have ai write documentation for you so that people understood how the things work you know you do those kinds of things you maybe would refactor
refactor some of your databases like your database well you certainly as you broke at the architectural level as you broke your system into domains you'd separate out your data but even within a given domain when you're refactoring code you might say look the way these tables are constructed
isn't is inefficient or it doesn't make sense anymore i think ultimately so what are you trying to do like conceptually what you're trying to do is make it faster for engineers to develop
So strategically, what you're saying is if I can create smaller components and within those components, they can follow more of the best practices,
you know, all the things from test automation on down,
then it'll be easier and faster for engineers to get things
Brad: Right.
Scott: done.
That's
Brad: Okay.
Scott: the idea.
Brad: Okay,
cool.
So I,
that's, I'm, that sounds like a really good answer.
What pops into my mind is, for example, I was working with this, you know.
my the team i spend almost all my time with is a team that we recently were like god we've got these 3 000 line files we should figure this out we should basically like modularize this stuff and so as a team we wrote up like a working agreement to use your language about code modularization and we're like guiding principles you know single responsibility principle low coupling high cohesion maintainability test right so we like wrote up
wrote up a working agreement there and i could totally imagine a world where maybe you already have those like coding standards or guide you know kind of architecture like like because to me right like this this is like this is like totally you know giving uh the the conversation that we had with ted neward about like um look there are no such things as best practices there's just practices that as a team you've agreed to you
Right.
Scott: Sure.
Brad: And so the first step is like, OK,
do we have working agreements on all of our what this code, what what good architecture looks like, but what better architecture looks like?
And then I guess I could totally imagine a world where like you basically get a whole bunch of like we're all aligned on these.
what better architecture looks like and then we essentially go on a module by module basis component by component basis file by file basis and we you know we somehow like score it and say yep this one is not meeting our definition of better architecture ted you get to go re-implement this file to have single responsibility principle
And
Scott: Sure.
Brad: Ted gets to own, you know, whatever, whatever scale task that is for that file or,
Scott: Yeah,
Brad: or, or, you know, work through it.
Is that kind of what, what
Scott: it could be
Brad: looked just like like.
Scott: that.
Or you could take it from the perspective of pain points, you could ask your team, well, what makes it hard?
And they might say,
well, the fact that we have files that have 10 different concepts in them makes it really confusing to figure out how stuff works.
So maybe
So you can take it from that perspective,
like there's a lot of ways you could get in like Ted said you just agree on what you want to agree on whatever the best practice is that we're going to single responsibility or no files bigger than a thousand lines or whatever it is right.
Brad: Right.
Scott: Tabs, not spaces,
you know, spaces,
Brad: Yeah,
totally.
Well,
Scott: not tabs.
Brad: I'm also a big believer that anything that can be enforced with lint and prettier.
We should just enforce
Scott: Sure.
Brad: with lint and prettier.
Scott: Well,
I was just joking about the tabs and spaces thing. But yeah, I think that's exactly the approach you would take.
And it seems like, you know,
what are the pros?
It's really like you can determine if it was done correctly,
meaning does the system work the same way it worked before?
You're not.
you're not trying to do two things at once you're just trying to you know there's some of the interesting things about software or some of our principles of software engineering like you know only try to do one thing at a time don't make a commit that does two things make commit that does one thing so it's easy well fundamentally with fad we're trying to do two things at a time with
Brad: Yeah,
Scott: bad we're trying to do one thing at a time right that's those are pros
Brad: I would argue that.
That there's a step that both these approaches require,
which is your first step,
which is alignment on what the better architecture is.
So maybe,
Scott: Yes.
Brad: you know what I mean, like if you really are going to do fad correctly,
then you do have to agree on the better architecture before you even start building new features.
Because you
Scott: Absolutely.
Brad: said you were going to build the new features with the better architecture.
So that's
Scott: Well, so you have to agree on the architecture on both sides.
But on one side, you don't have to agree on the product requirements.
Brad: fair.
Scott: You just need to make sure you don't break it.
Brad: and and and were you partly inspired by this because I think this way you told the story was you're like yeah okay let's go down this road by the way we need to know what the what your vision and product requirements are and
Scott: Yeah, I've been
Brad: they were
Scott: pushing
Brad: like
Scott: on
Brad: well
Scott: the product requirements.
Brad: wait why do you need that why do you need that don't you want to like modernize it
Scott: Yeah,
that's exactly right.
I've been saying we can't get started until we write the requirements.
And they've been like, well, why?
organizing it first i was like well yeah we are modernizing but we need to know like what we're working toward and they're like well don't you modernize first and then we add on the stuff we want and i explained oh no that's not why you do it because you know if we do it this other way we get the business value faster because maybe you get some incremental gains along the way and we get the scope right so that we're not building stuff that doesn't matter and um
Brad: But
Scott: you
Brad: then there are, yeah,
Scott: know
Brad: so I agree.
I obviously agree with all that stuff, and that's why knowing
Scott: Yeah
Brad: the direction you're going.
You know, because there's like there's always six ways to do something,
all of which are not wrong, but
Scott: Right.
Brad: one of them is going to, you know, some of those will improve your chances of doing the future thing and others will make it harder to do the future thing.
Scott: Yeah.
And I made the argument like, you know, hey, it's like you're asking me to, hey, you want to add two bedroom, you got this old rundown house and I want to update the whole house and add on two bedrooms and you're asking me to update the whole house.
And then once that's all done, have
Brad: But
Scott: the construction
Brad: add
Scott: crew
Brad: the
Scott: come back and add the two bedrooms and nobody would do that,
right?
So here's a few of the thoughts.
Brad: But they also but, you know, I guess if we're using our house renovation analogy,
it wouldn't be wrong to say, but wait, you just told me there was knob and tube wiring all over the existing infrastructure and.
You know, you're like, that's not modern. Let's put true new modern electrical in.
You could certainly do that to the part that's standing,
even though we haven't done the design on the new addition.
Scott: Yeah, you could.
unless you thought well i used a let's actually not use an addition because that's not what we're talking about here by the way as an addition we're talking about remodeling the layout of the house we're
Brad: Yeah, we're going from
Scott: remodeling
Brad: we're
Scott: the kitchen going this
Brad: from to
Scott: is actually open we
Brad: open floor plan
Scott: work well actually let's do this way we want to totally update this kitchen make it modern new appliances you know the best in the best in refrigeration that you can possibly have and then after it's done we're going to get rid of all that
that and we're going to come in and put in a new kitchen with like an island and a better cutting board and all sorts of stuff right that's kind of what it is okay
Brad: Yeah, that would be nice.
Scott: so here there's just two other thoughts that come across my head a risk of bad is the four most expensive words in the human language while you're at it yep
And so one risk of fad is that your business
Brad: Or
Scott: doesn't
Brad: what, is it,
Scott: have the discipline,
Brad: it's, wait,
Scott: I'm sorry, bad,
Brad: wait, wait.
Scott: a
Brad: Yeah, okay.
Scott: risk of bad is that your company doesn't have the discipline to actually do it, right?
Brad: Yeah, so you end up fatting.
Scott: You end up fatting, but you end up fatting without good requirements because your engineers have got the patient open and they're like, oh, and now you want me to stick in the new refrigerator?
Okay,
well,
I guess I'll just hack this in here.
That's one risk.
Another risk is, so you do it. You're at the end of the modernization.
The house,
the kitchen,
it's all sweet.
And the business is like,
what did I get for that?
Well, now we can build stuff faster.
Okay,
cool.
Now I want you to build this new thing.
Okay, well, that's going to take eight months.
Well,
I thought it was going to be a lot faster than that.
Well, before it was going to be.
18 months now it's 28 months they're like yeah but I wanted it like in two or three months right
Brad: Yeah, yeah, totally.
Scott: so there's there's
Brad: I think
Scott: a risk
Brad: that's I think that's your biggest risk.
Like you might have oversold how much easier this is.
Some stuff
Scott: I
Brad: is
Scott: haven't
Brad: hard to
Scott: sold
Brad: do.
Scott: it at all I don't I don't know I literally couldn't tell you how much faster it's going to go because
Brad: No, no, no, I just mean,
Scott: don't know what you want me to build
Brad: yeah,
that's yes,
yes,
yes, yes.
I think that like.
Yeah, man.
I
Scott: Okay,
Brad: mean,
Scott: wait, here's another wrinkle.
Brad: okay, tell me.
Scott: Is it possible that we,
and I said like almost every person I've talked to about this has said fad. Every engineering leader has said fad.
Is
Brad: That's
Scott: it possible?
Brad: where I felt the pull to.
Scott: It's totally, it's totally where I go to totally was okay.
But is it because of this? I have never been able to successfully sell.
bad to the business stakeholders and
Brad: Yeah, you're
Scott: then the occasions that i have like it's been a little disappointing but i've never they never buy into that because they're like well what am i going to get for my money and you're like you're going to get faster stuff how much faster i don't really know they're like no i'm not going to do that so in order to actually do modernizations in my career i've had to learn the technique of bad which is okay you want this thing we're going to add a tax to this thing which is doing the modernization work and you can't
You can't remodel the kitchen without doing the knob and tube wiring.
So we've got a tech.
And so we've learned how to do fad because it was actually the only way that we could do the modernization because
Brad: Modernization.
Scott: we couldn't ever quantify or express the value of the modernization.
And I now find myself in a unique situation.
Brad: Your bluff has been called.
Scott: It's not even a bluff.
It's just like I'm not having to sell it. They're actually saying,
why aren't you taking it?
And I was so thrown for a loop. I was like, wait a second, why aren't I taking it?
Brad: Right.
Why aren't
Scott: So
Brad: you taking
Scott: I wonder
Brad: it?
Scott: if it's just like I'm scarred. I got like, you know, wounded puppy or abused puppy syndrome.
Brad: Right.
Right.
Right.
We're just trying to give you some wet food.
I don't know what you're so skittish about.
Scott: And so here's another puzzle piece.
as i said every engineering leader i've talked to including ones inside my own company they instantly go to fad they were like well that's crazy because they've all had the same experience that i've had in their careers which
Brad: Right.
Scott: is like oh bad is terrible every time we've ever tried to do bad every time we propose bad they shut us down and even we do it
They get impatient and cut it off partway through,
so we actually never get the value from it.
So
Brad: that
Scott: that we've
Brad: that's
Scott: missed learning
Brad: like that
Scott: to do fast.
Brad: right there is a real that's a real concern that right
Scott: Yeah,
Brad: there is
Scott: it is real concern.
Brad: because you get halfway halfway done with the bad and you've got nothing and then they get then they get skittish and and stop it like that's that's like i think that's a real legit concern
Scott: As a matter of fact, I have that in two places in our system right now.
before I started at this company they went about upgrading from some front-end framework to another front-end framework of course only finished two-thirds of it and so now the front-end developers are frustrated they got to deal with both not only do they have to deal with the bad one they deal with the bad one and the new one right that's the worst of both worlds and
Brad: Right.
Scott: then we have a project where we were
rebuilding refactoring a key part of the system and wanting to extract it out of the monolith and their idea was we'll build it inside the monolith first and then extract it out well they finished about 80 of it inside the monolith and then stopped so they got now they have this particular subsystem there's two of them running both inside the monolith side by side and so they first they got to finish it and then they got extra and so
every you know on the first case which was purely bad um they just didn't get finished the second case was actually fad and it didn't get finished and in this case you got business stakeholders saying like what those guys worked on that for like three years you're telling me it's not done hundreds
Brad: Yeah, 100% agree with everything you just said. I've seen that happen hundreds of times. It's like, of course gonna happen.
Scott: of
Brad: It's of course gonna happen.
Scott: course
Brad: So the question then is,
So as we were talking about this earlier,
I was imagining,
well,
maybe what you do is you.
You do these working,
you agree,
you come to agreement within the team about what good architecture is, what better architecture is.
You stack rank the, and I love your point,
like ask them what's taking them, you know, ask them what's hard,
ask them what makes it hard.
You stack rank the stuff that's going to make the biggest difference to the developers'
productivity and velocity,
right?
Like that's what this is all about.
This is all about can we make it more high velocity developers,
right? Because you're not, because I'm assuming that you're not dealing with the...
the rickety system that has these you know hard to you know constantly falling over bugs right but but but even if you had that it wouldn't matter you still do an analysis where you're like what's the thing that as a team we genuinely believe that if we make progress against these goals we will have higher velocity
Scott: Yeah, one
Brad: And then you rank those things like which ones do we to the best of our professional ability believe are going to make the biggest difference in velocity.
And then.
You you bite size those and you you know, what's the saying?
How do you eat an elephant?
One bite at a time.
Scott: bite at the time. Yeah.
Brad: And so you you've set a set of you've you've created a punch list.
or like a meta punch list that
Scott: Hmm.
Brad: is that is to the best of your professional opinion the thing that's going to increase velocity the fastest and you start working through that punch list and each point along the way you make sure you've you've you've hit a checkpoint that you've made a difference and then before you move to the next bite right and then at any point along the way
You're able to stop.
You're able to stop working on it and move on to back to features.
Scott: Yeah,
I think what you're saying is if you go down a bad route,
you really need to be incremental so that you can stop.
You need to swarm around things and get them finished, not have many things in flight that are partially finished.
Brad: And then.
as you're doing that features can also slot in so long
Scott: Mm hmm.
Brad: as the features are done following the better architecture agreements and
Scott: Yes.
Don't
Brad: so
Scott: make it worse.
Stop digging the hole deeper.
Brad: yeah and so i sort of was like that's how i would that's how i think i would approach it and i was like maybe that's something like
Bad wafad.
It's like, it's
Scott: It's a version
Brad: bad with fad.
Scott: of hybrid.
It's
Brad: It's
Scott: a version of hybrid.
Brad: It's bad, not fad, not
Scott: The
Brad: bad.
Scott: hybrid I've had in my mind is slightly different,
which is there are parts of the system where you might want to do bad. So like that front end framework.
thing i was just talking about that was just bad right that was just like we used i don't even know what the frameworks really we used angular and now we want to use react like that's just i mean i don't know if that's a trade-up or not but like the it might just be a lateral move so yeah
Brad: don't get the listeners fighting with each other it's
Scott: i don't want to obviously not not
Brad: answers
Scott: trying to start
Brad: obvious no it's spelt is obviously the right answer i mean come on
Scott: right so exactly of course so i'm not trying to get in a fight here i'm just trying to say like
That's just bad, right?
Brad: Better
Scott: We just architecture. want to better architecture.
Hey,
we've got two mobile apps.
One of those mobile apps talks to our backend via GraphQL and the other talks to the backend via REST.
You know what? We're going to make them just both talk the same way.
I don't care which one, but why do we maintain two interfaces for this is silly.
Brad: Yep.
Scott: Setting aside that you might want a BFF for each app separately,
the point is.
it just adds complexity to the whole thing i now have to know two things and think about it differently etc um taking that piece of that component that i just mentioned a few minutes ago that's 80 done just finish it and extract it any extractions are just bad certain extractions are just bad just like just take this chunk extract it take this there's no there's no but there's some pieces like when we were talking about the one-to-one versus the one-to-many piece earlier
That might be a fad where we say this piece,
actually, we do want new functionality here.
And so we're going to do fad on this one.
And let's be intentional about that.
Let's not do fad everywhere.
Let's do fad where we think it's high leverage or high value.
Brad: Yeah, and it's so I feel like there's two pieces of this hybrid strategy that we're kind of coalescing on.
One of them is never just.
open up the entire system and put everything on you know just never never take the whole thing apart you're always going to be on the bad you're always being incremental you're thinking about it you're being intentional about always having stop points and break points and then that way if you have to stop your improvement your architecture improvement mid investment you're never left with hanging
hanging components and
Scott: Mm-hmm.
Brad: then part two if you've clearly articulated your better architecture agreements then it's there's nothing wrong with slotting in an intentional feature uh
Scott: Or
Brad: that is
Scott: an intentional fad.
Brad: all new features definitionally should
Scott: All
Brad: be yeah
Scott: new features should be fad. Yes.
Brad: You're going to do all new features as compliant with the new agreed upon better architecture.
Scott: Well,
that's a very interesting thing. I was talking to one person today,
a woman on our team who's one of our leaders,
and we were talking about that piece,
which is she was we were discussing this topic and she was saying how she felt like this is all great.
But there's this piece of our culture that needs to change,
which is, as you summarize it with this, everything is fat.
She sort of said, look,
we got to get to a situation where people don't make things worse,
right? Right now, there's this, in the name of going fast,
getting stuff done,
people dig the hole deeper. And if I've said it once, I've said it a thousand times,
the fastest way to get out of a hole is stop digging.
But we still dig.
And so this is what she was saying,
which was, Scott,
this sounds fantastic.
Like, I love that we're going to do this stuff, whether it's fad or bad,
I don't really care.
But it doesn't matter if we don't actually get a culture of, to use your language,
that we're always fad, that everything we touch, we try and make it better,
a little bit at least.
Brad: Yeah.
Well.
There you go.
I guess we landed on it. We actually made the case for how to do bad and fad at the same time, so long as you follow these rules.
Scott: And it's called HAD.
Brad: It's called HAD.
We had the discussion and we landed on HAD.
Scott: I think there's one other thing to take from this, which is, this is a lesson I've learned from it.
Our non-technical stakeholders can sometimes at least.
open up our minds to things that maybe we didn't think about or
Brad: Yeah.
Scott: at least or cause us to think is a strongly held belief I have why do I have that strongly held belief is it true is it just due to the scars of previous situations and you
know be open-minded it's been an enjoyable thought process for me
Brad: Yeah,
totally.
That sounds good. It sounds awesome.
Scott: Now I just got to get, you know, every other technical leader I've talked to on this topic to change their mind.
Brad: Oh,
man. Well,
I am so happy that you brought this topic.
This is it's got me thinking it's a pretty cool concept.
Scott: Yeah,
the last thing I'll say is I, you know, I talked to about, say two weeks ago, I was talking to the head of product about it.
Maybe earlier this week I was talking to our CEO kind of having the same conversation and I did just stop for a minute and I was like, huh,
they're smart people and they're asking me something and why,
what,
you know, they caused me to be reflective and that was, I'm glad that I caught myself and did that and I hope I continue to do that.
Brad: Love it, man.
Scott: All right. Well, is that it for today?
Brad: That's it for today.
sounds like we hit some we landed we landed someplace real we should you know what when you land stop
Scott: Land.
Brad: moving land
Scott: Yeah.
Brad: mad
Scott: So I've got a new framework.
It's called Shad.
It's called smash that subscribe button.
Rad rate and review and tell all your friends about us.
All
Brad: All
Scott: right.
Brad: right.
Scott: Talk to you soon,
Brad.
Brad: This episode of How Many CTOs Does It Take podcast was edited by Saffron Epigow.
Our theme song was AI Generated by Brad.
Please follow us on all the social media platforms at at HowManyCTOsPod.
You can find us on YouTube,
LinkedIn,
Instagram,
Facebook,
Threads, X,
TikTok,
and Patreon, or at our website at HowManyCTOsPod.com. And remember to rate, review, and subscribe on the podcast platform of your choice.
Thanks for listening.