← Back
IAmTimCorey July 2, 2026 11m

316. I Dislike Spec Driven Development - Here Is Why

Read full transcript 11 segments
  1. I think that spec-driven development is I think that spec-driven development is terrible. terrible. terrible. I don't want any part of it. I don't want any part of it. I don't want any part of it. But this isn't about bashing a way of But this isn't about bashing a way of But this isn't about bashing a way of doing software development. I think it's doing software development. I think it's doing software development. I think it's important to understand why I disagree important to understand why I disagree important to understand why I disagree with spec-driven development since with spec-driven development since with spec-driven development since development with AI is going more development with AI is going more development with AI is going more towards spec-driven development. towards spec-driven development. towards spec-driven development. So let's talk about it in today's So let's talk about it in today's So let's talk about it in today's episode of Dev Questions. >> Software development is more than just >> Software development is more than just writing code. So let's talk about the writing code. So let's talk about the writing code. So let's talk about the rest of it. Specifically, let's talk rest of it. Specifically, let's talk rest of it. Specifically, let's talk about spec-driven development. Now, about spec-driven development. Now, about spec-driven development. Now, we're going to start off with what is we're going to start off with what is we're going to start off with what is spec-driven development? Well, it's spec-driven development? Well, it's spec-driven development? Well, it's writing a detailed specification. That's writing a detailed specification. That's writing a detailed specification. That's the spec. About what the system should the spec. About what the system should the spec. About what the system should do before you [clears throat] implement do before you [clears throat] implement do before you [clears throat] implement it. So you're going to build an it. So you're going to build an it. So you're going to build an application and you say, "Here is application and you say, "Here is application and you say, "Here is exactly how it should work." exactly how it should work." exactly how it should work." The spec becomes the source of truth. The spec becomes the source of truth. The spec becomes the source of truth. This is what the app does.

  2. This is what the app does. This is what the app does. Now that spec can include API contracts, Now that spec can include API contracts, Now that spec can include API contracts, business rules, data models, the business rules, data models, the business rules, data models, the behavior of the app, the you know, the behavior of the app, the you know, the behavior of the app, the you know, the outcomes the app should have, et cetera. outcomes the app should have, et cetera. outcomes the app should have, et cetera. So that's what the spec-driven So that's what the spec-driven So that's what the spec-driven development is. development is. development is. And it turns a good idea into a And it turns a good idea into a And it turns a good idea into a management exercise. management exercise. management exercise. And that's the problem. And that's the problem. And that's the problem. So now this is currently gaining So now this is currently gaining So now this is currently gaining popularity because of AI. We think about popularity because of AI. We think about popularity because of AI. We think about it. it. it. One of the first things that happened One of the first things that happened One of the first things that happened when we got LLMs is we started asking when we got LLMs is we started asking when we got LLMs is we started asking the LLM to do something. And it was at the LLM to do something. And it was at the LLM to do something. And it was at first, you know, hilariously wrong and first, you know, hilariously wrong and first, you know, hilariously wrong and it started getting better and better it started getting better and better it started getting better and better until it's, you know, it's pretty good. until it's, you know, it's pretty good. until it's, you know, it's pretty good. And one of the things you'll see is that And one of the things you'll see is that And one of the things you'll see is that whenever you get a bad output from AI, whenever you get a bad output from AI, whenever you get a bad output from AI, people will tell you, "Well, you're people will tell you, "Well, you're people will tell you, "Well, you're holding it wrong." Right? You You're holding it wrong." Right? You You're holding it wrong." Right? You You're prompting it wrong. prompting it wrong. prompting it wrong. Um you need to have a better prompt. And Um you need to have a better prompt. And Um you need to have a better prompt. And And so there's whole schools of thought And so there's whole schools of thought And so there's whole schools of thought around how do you craft the perfect around how do you craft the perfect around how do you craft the perfect prompt? And there's even tools out there prompt? And there's even tools out there prompt? And there's even tools out there to aid in that prompt. You know, where to aid in that prompt. You know, where to aid in that prompt. You know, where you can have a tool that says, "Okay, you can have a tool that says, "Okay, you can have a tool that says, "Okay, here's how to write good C#.net 10 code.

  3. here's how to write good C#.net 10 code. here's how to write good C#.net 10 code. And here's how to write, you know, good And here's how to write, you know, good And here's how to write, you know, good code for our business. And here's our code for our business. And here's our code for our business. And here's our business rules." And all this stuff. And business rules." And all this stuff. And business rules." And all this stuff. And then you create this really detailed then you create this really detailed then you create this really detailed prompt. prompt. prompt. And sometimes that works and sometimes And sometimes that works and sometimes And sometimes that works and sometimes you still don't get a good enough you still don't get a good enough you still don't get a good enough result. And now we we have things like result. And now we we have things like result. And now we we have things like loops where we're letting an AI just loops where we're letting an AI just loops where we're letting an AI just do its work in the background and figure do its work in the background and figure do its work in the background and figure out what to do next. And so we're out what to do next. And so we're out what to do next. And so we're starting to give it, you know, detailed starting to give it, you know, detailed starting to give it, you know, detailed specification and say, "Okay, here's the specification and say, "Okay, here's the specification and say, "Okay, here's the specification. Let the loop just, you specification. Let the loop just, you specification. Let the loop just, you know, iterate over that and figure out know, iterate over that and figure out know, iterate over that and figure out how to design it and then pull off how to design it and then pull off how to design it and then pull off pieces and build that piece and test pieces and build that piece and test pieces and build that piece and test that piece and and so on." But the thing that piece and and so on." But the thing that piece and and so on." But the thing is, is, is, the more specific we get, the better the the more specific we get, the better the the more specific we get, the better the output should be at least. output should be at least. output should be at least. So, the English language really isn't So, the English language really isn't So, the English language really isn't precise. precise. precise. So, So, So, we need to be more precise and and that we need to be more precise and and that we need to be more precise and and that takes, you know, restating the the takes, you know, restating the the takes, you know, restating the the solution sometimes and solution sometimes and solution sometimes and means sometimes using precise language, means sometimes using precise language, means sometimes using precise language, etc. in order to get the right etc. in order to get the right etc. in order to get the right conclusion for us. All right? So, conclusion for us. All right? So, conclusion for us. All right? So, that's where we start to kind of spin that's where we start to kind of spin that's where we start to kind of spin out um a spec. That's where we start to out um a spec. That's where we start to out um a spec. That's where we start to say, "This is the specification say, "This is the specification say, "This is the specification for my app." And the more precise we can for my app." And the more precise we can for my app." And the more precise we can get, the more easily an AI can look at get, the more easily an AI can look at get, the more easily an AI can look at that and say, that and say, that and say, "You want, you know, "You want, you know, "You want, you know, a calculator that can add 2 + 2 and get a calculator that can add 2 + 2 and get a calculator that can add 2 + 2 and get 4. Let's check to see if the the current 4. Let's check to see if the the current 4. Let's check to see if the the current thing I built can do that." You know,

  4. thing I built can do that." You know, thing I built can do that." You know, when you start having more and more of when you start having more and more of when you start having more and more of these things that tell it exactly how it these things that tell it exactly how it these things that tell it exactly how it should work, hopefully the the um should work, hopefully the the um should work, hopefully the the um the more, you know, the more, you know, the more, you know, specific you can get the more specific you can get the more specific you can get the more um um um impressive the output can be. impressive the output can be. impressive the output can be. So, So, So, let's take this thought process let's take this thought process let's take this thought process to its logical conclusion. All right, so to its logical conclusion. All right, so to its logical conclusion. All right, so let's let's think about spectrum let's let's think about spectrum let's let's think about spectrum development, think about, you know, how development, think about, you know, how development, think about, you know, how do we get the most precise do we get the most precise do we get the most precise most rigid, making sure that yes, we most rigid, making sure that yes, we most rigid, making sure that yes, we have a non-deterministic AI, but we want have a non-deterministic AI, but we want have a non-deterministic AI, but we want almost lock it into determinism, right? almost lock it into determinism, right? almost lock it into determinism, right? We want to say, this is exactly how I We want to say, this is exactly how I We want to say, this is exactly how I want it to work. How do we do that want it to work. How do we do that want it to work. How do we do that precise enough so that precise enough so that precise enough so that we always get the right thing out. So, we always get the right thing out. So, we always get the right thing out. So, that the thing we have in our brains that the thing we have in our brains that the thing we have in our brains actually gets built by the AI. Because actually gets built by the AI. Because actually gets built by the AI. Because if we can do that, then what we can do if we can do that, then what we can do if we can do that, then what we can do is we could actually have the AI build is we could actually have the AI build is we could actually have the AI build applications, because it can give us applications, because it can give us applications, because it can give us exactly what we're looking for.

  5. exactly what we're looking for. exactly what we're looking for. So, let's let's kind of design this this So, let's let's kind of design this this So, let's let's kind of design this this system at the end conclusion, right? system at the end conclusion, right? system at the end conclusion, right? Let's the logical conclusion of this Let's the logical conclusion of this Let's the logical conclusion of this spectrum development. So, spectrum development. So, spectrum development. So, we're going to need precise structures we're going to need precise structures we're going to need precise structures and exact symbols to make our specs less and exact symbols to make our specs less and exact symbols to make our specs less ambiguous. You know, English is very ambiguous. You know, English is very ambiguous. You know, English is very imprecise. So, let's use specific words imprecise. So, let's use specific words imprecise. So, let's use specific words and and make sure that we do things in a and and make sure that we do things in a and and make sure that we do things in a certain way and have some symbols in certain way and have some symbols in certain way and have some symbols in there so we can say, okay, if you think there so we can say, okay, if you think there so we can say, okay, if you think about um anytime you've seen people talk about um anytime you've seen people talk about um anytime you've seen people talk about about about um like the cloud and Azure or anything um like the cloud and Azure or anything um like the cloud and Azure or anything else, they have these symbols like the else, they have these symbols like the else, they have these symbols like the database symbol. It's a it's a certain database symbol. It's a it's a certain database symbol. It's a it's a certain symbol. We have a server symbol and a symbol. We have a server symbol and a symbol. We have a server symbol and a web server symbol and, you know, all web server symbol and, you know, all web server symbol and, you know, all these different symbols that make it these different symbols that make it these different symbols that make it very clear what we're thinking. Well, we very clear what we're thinking. Well, we very clear what we're thinking. Well, we can have these symbols and we can make can have these symbols and we can make can have these symbols and we can make sure that we have specific uh words that sure that we have specific uh words that sure that we have specific uh words that we use for certain things. That way we use for certain things. That way we use for certain things. That way we're very precise and it's not we're very precise and it's not we're very precise and it's not um ambiguous what um ambiguous what um ambiguous what we're looking for. we're looking for. we're looking for. And then, you know, if if we got to that And then, you know, if if we got to that And then, you know, if if we got to that level where we got this precise level where we got this precise level where we got this precise structures and exact symbols that make structures and exact symbols that make structures and exact symbols that make our spec, you know, unambiguous very our spec, you know, unambiguous very our spec, you know, unambiguous very clear.

  6. clear. clear. Well, then we could do is actually Well, then we could do is actually Well, then we could do is actually have a a I take that that have a a I take that that have a a I take that that that spec and have an automated system that spec and have an automated system that spec and have an automated system that takes the spec and turns it into that takes the spec and turns it into that takes the spec and turns it into code directly. Like it could be really code directly. Like it could be really code directly. Like it could be really clear. It almost be like one-to-one clear. It almost be like one-to-one clear. It almost be like one-to-one where it it takes our spec and turns it where it it takes our spec and turns it where it it takes our spec and turns it into code. into code. into code. Which what do we end up with? Which what do we end up with? Which what do we end up with? We end up with a programming language. We end up with a programming language. We end up with a programming language. Right? Right? Right? That's exactly what a programming That's exactly what a programming That's exactly what a programming language is. language is. language is. Because we don't write things in ones Because we don't write things in ones Because we don't write things in ones and zeros. and zeros. and zeros. Which is what, you know, the eventual Which is what, you know, the eventual Which is what, you know, the eventual outcome is going to be for our code. outcome is going to be for our code. outcome is going to be for our code. What we do is we write in C# where we What we do is we write in C# where we What we do is we write in C# where we say things like if and for and use say things like if and for and use say things like if and for and use English words that represent an idea and English words that represent an idea and English words that represent an idea and they're precise. they're precise. they're precise. So that when I say for, you know, I So that when I say for, you know, I So that when I say for, you know, I equals zero, I is less than 10, I plus equals zero, I is less than 10, I plus equals zero, I is less than 10, I plus plus, then what I'm doing is saying plus, then what I'm doing is saying plus, then what I'm doing is saying specifically specifically specifically I want a variable called I.

  7. I want a variable called I. I want a variable called I. I want it to be initialized at the with I want it to be initialized at the with I want it to be initialized at the with zero in it. I want to loop over this zero in it. I want to loop over this zero in it. I want to loop over this loop until we get to, you know, not once loop until we get to, you know, not once loop until we get to, you know, not once we hit 10, we're done. we hit 10, we're done. we hit 10, we're done. And I want to increment I by one every And I want to increment I by one every And I want to increment I by one every time. We're being very very specific. time. We're being very very specific. time. We're being very very specific. Which is what a specification is. How Which is what a specification is. How Which is what a specification is. How specific you want to get. Now, this is specific you want to get. Now, this is specific you want to get. Now, this is the the crazy end solution of spec. the the crazy end solution of spec. the the crazy end solution of spec. But that's really where we're headed, But that's really where we're headed, But that's really where we're headed, right? And you know, if we had an right? And you know, if we had an right? And you know, if we had an automated way for the AI to take that automated way for the AI to take that automated way for the AI to take that spec and turn it into code directly, spec and turn it into code directly, spec and turn it into code directly, well, that's just what C# is or other well, that's just what C# is or other well, that's just what C# is or other languages. Where we're creating the languages. Where we're creating the languages. Where we're creating the spec, spec, spec, which is code, and then it takes that which is code, and then it takes that which is code, and then it takes that spec and it turns it into a compiled spec and it turns it into a compiled spec and it turns it into a compiled code that can then be executed. code that can then be executed. code that can then be executed. And it's so specific that can't be And it's so specific that can't be And it's so specific that can't be interpreted a different way. interpreted a different way. interpreted a different way. It's very specific. It's not not as It's very specific. It's not not as It's very specific. It's not not as English where there could be a variance English where there could be a variance English where there could be a variance in how we're thinking about things.

  8. in how we're thinking about things. in how we're thinking about things. You know, my my favorite You know, my my favorite You know, my my favorite or least favorite word in the English or least favorite word in the English or least favorite word in the English language probably is is bi-weekly. language probably is is bi-weekly. language probably is is bi-weekly. What does that mean? Does it mean every What does that mean? Does it mean every What does that mean? Does it mean every 2 weeks or twice a week? 2 weeks or twice a week? 2 weeks or twice a week? The answer is yes. The answer is yes. The answer is yes. That's frustrating me that it's not That's frustrating me that it's not That's frustrating me that it's not specific enough. specific enough. specific enough. But if you're specific enough, you'd say But if you're specific enough, you'd say But if you're specific enough, you'd say twice a week. twice a week. twice a week. You know, You know, You know, that's more specific. That's what code that's more specific. That's what code that's more specific. That's what code is is a very specific way of doing is is a very specific way of doing is is a very specific way of doing things. things. things. So, the logic and conclusion for So, the logic and conclusion for So, the logic and conclusion for spectrum and development is just to spectrum and development is just to spectrum and development is just to write code. write code. write code. So, it's easy to come up with a way to So, it's easy to come up with a way to So, it's easy to come up with a way to solve a problem. And that's what, you solve a problem. And that's what, you solve a problem. And that's what, you know, we first start off, we had this know, we first start off, we had this know, we first start off, we had this idea of we want to be more precise in idea of we want to be more precise in idea of we want to be more precise in how we how we how we specify what the app should do. Because specify what the app should do. Because specify what the app should do. Because when your manager comes to you and says, when your manager comes to you and says, when your manager comes to you and says, "I want you to build a calculator." "I want you to build a calculator." "I want you to build a calculator." That's not precise enough. That's That's not precise enough. That's That's not precise enough. That's nowhere near precise enough. And really nowhere near precise enough. And really nowhere near precise enough. And really management almost never gives you management almost never gives you management almost never gives you anywhere close to enough of a anywhere close to enough of a anywhere close to enough of a specification for what the app should specification for what the app should specification for what the app should do.

  9. do. do. So, the conclusion is let's make a So, the conclusion is let's make a So, the conclusion is let's make a structure for making it more precise. structure for making it more precise. structure for making it more precise. And that's a good thing. And that's a good thing. And that's a good thing. And so, you start, you know, asking the And so, you start, you know, asking the And so, you start, you know, asking the right questions and start building out, right questions and start building out, right questions and start building out, you know, how do you want the data to you know, how do you want the data to you know, how do you want the data to look? And how do you want this to look look? And how do you want this to look look? And how do you want this to look in the front end? And and what problem in the front end? And and what problem in the front end? And and what problem should it solve? And how do we know when should it solve? And how do we know when should it solve? And how do we know when we're done? And all of these are good we're done? And all of these are good we're done? And all of these are good things. things. things. But if you take things too far, But if you take things too far, But if you take things too far, what happens is what happens is what happens is the solution starts drifting in area the solution starts drifting in area the solution starts drifting in area where there's already a solution. where there's already a solution. where there's already a solution. So, too often in software development, So, too often in software development, So, too often in software development, we keep adding one more feature to we keep adding one more feature to we keep adding one more feature to something until it's bloated and messy. something until it's bloated and messy. something until it's bloated and messy. Like, if you look at really like Like, if you look at really like Like, if you look at really like Microsoft Word. Um, that's a great Microsoft Word. Um, that's a great Microsoft Word. Um, that's a great product, but at the same time, it's also product, but at the same time, it's also product, but at the same time, it's also kind of bloated. There's a whole bunch kind of bloated. There's a whole bunch kind of bloated. There's a whole bunch of stuff in there that's like of stuff in there that's like of stuff in there that's like most people don't ever use this and most people don't ever use this and most people don't ever use this and it's, you know, hard to figure out. it's, you know, hard to figure out. it's, you know, hard to figure out. There's a lot of features that you never There's a lot of features that you never There's a lot of features that you never know about or Visual Studio. There's so know about or Visual Studio. There's so know about or Visual Studio. There's so many features people don't even know many features people don't even know many features people don't even know about. about. about. Where Where Where those are all good things in themselves, those are all good things in themselves, those are all good things in themselves, but but but in the grand picture of things, it makes in the grand picture of things, it makes in the grand picture of things, it makes things very, very difficult to use.

  10. things very, very difficult to use. things very, very difficult to use. So, So, So, we tend to allow good management ideas we tend to allow good management ideas we tend to allow good management ideas to turn into an overbearing bureaucracy. to turn into an overbearing bureaucracy. to turn into an overbearing bureaucracy. Um, Um, Um, I may have just had a whole bunch of I may have just had a whole bunch of I may have just had a whole bunch of people, you know, say yes, yes, yes to people, you know, say yes, yes, yes to people, you know, say yes, yes, yes to that sentence. Um, I'll say it again. that sentence. Um, I'll say it again. that sentence. Um, I'll say it again. Um, we tend to allow good management Um, we tend to allow good management Um, we tend to allow good management ideas to turn into an overbearing ideas to turn into an overbearing ideas to turn into an overbearing bureaucracy. This is very common. It'll bureaucracy. This is very common. It'll bureaucracy. This is very common. It'll probably come up in a future dev probably come up in a future dev probably come up in a future dev question video. Um, question video. Um, question video. Um, a lot of the things we do in software a lot of the things we do in software a lot of the things we do in software development start off as good ideas that development start off as good ideas that development start off as good ideas that turn into turn into turn into a whole bunch of ceremony, a whole bunch a whole bunch of ceremony, a whole bunch a whole bunch of ceremony, a whole bunch of management fluff, um, and it takes of management fluff, um, and it takes of management fluff, um, and it takes away from the away from the away from the the task of actually doing the job. the task of actually doing the job. the task of actually doing the job. Uh, but it started from a good idea. Uh, but it started from a good idea. Uh, but it started from a good idea. It's just it got overburdened. It's just it got overburdened. It's just it got overburdened. In this case, the idea of writing a In this case, the idea of writing a In this case, the idea of writing a good, clear specification for what the good, clear specification for what the good, clear specification for what the app should do is a great thing. app should do is a great thing. app should do is a great thing. >> [snorts] >> [snorts] >> [snorts] >> But, spec-driven development takes that >> But, spec-driven development takes that >> But, spec-driven development takes that concept and turns it into a managerial concept and turns it into a managerial concept and turns it into a managerial mess. mess. mess. And that's why I don't like spec-driven And that's why I don't like spec-driven And that's why I don't like spec-driven development.

  11. development. development. Thanks for listening and as always, I am Thanks for listening and as always, I am Thanks for listening and as always, I am Tim Corey. Tim Corey. Tim Corey. >> [music]

Summary

The main theme is a critique of spec-driven development, particularly in the context of AI development. The discussion touches on how AI prompting has evolved from simple instructions to detailed specifications, drawing parallels to spec-driven development. The practical takeaway is that while detailed specifications can be useful, the emphasis on them can turn creative endeavors into management exercises, potentially hindering innovation.

View original episode ↗