October 15, 2026

Michael Carducci Adopts OpenSpec

Podcast Chapters

Michael Carducci is an old friend and a particularly multi-talented software engineer with magical powers. I'm not kidding—he's actually an outstanding magician. I've seen him perform many times, and he never ceases to amaze me. Today he and I didn't talk about the dark arts, but rather OpenSpec, and some experiences he had resulting from a talk I gave on OpenSpec at UberConf last July. If you're new to the tool, or to spec-driven development, we don't actually describe what it is and how it works until around the 30-minute mark, but you know what? It's a fun conversation. Talking to Michael always is.

Michael admits he'd filed "spec-driven development" in the same rejected file as the functional and technical specs he wrote in the 1990s. Then he sent a colleague to my UberConf talk, the two of them spent a day "pair spec-driven developing," and realized, like so many before him, he should not have dismissed my position out of hand. What sold him was a repeatable process that gave consistent results, and an agent that stopped feeling like a capable new hire he had to catch up from square one every session. Michael eventually connects things to Peter Naur's "Programming as Theory Building": code is a lossy record of the program, and the specs capture the context behind decisions, the tribal knowledge that doesn't fit in comments.

And hey, like I said, it was a fun conversation, because that's the kind of guy Michael is. Give it a listen.

Full Transcript

00:00 Michael Carducci is an old friend and a

00:02 multi-talented software engineer,

00:04 architect, speaker, communicator, writer,

00:07 with magical powers.

00:09 I'm not kidding. He is an outstanding

00:11 magician. I've seen him perform many

00:12 times and he never

00:14 ceases to blow my mind.

00:15 Today he and I didn't talk about the dark

00:17 arts, but rather OpenSpec and some

00:19 experiences he had resulting from a talk

00:22 I gave on OpenSpec at

00:23 a conference last July.

00:26 If you're new to the tool or to

00:27 spec-driven development, we don't

00:28 actually describe what it is and how it

00:30 works until around the 30-minute mark.

00:31 It takes us a little bit, but you know

00:33 what? It's a fun conversation like it

00:34 always is with Michael. Let's listen in.

00:38 Mr. Carducci, it is good to see you.

00:42 Tim, it has been too long. How the heck are you?

00:45 I am doing okay. I really am having a good time.

00:50 It is, I don't mind saying September the 24th as we record this, 2026.

00:55 Last time we saw each other was like two months

00:57 ago plus a little bit. That is, I agree, too long.

01:01 And it's good to see you. I haven't seen

01:03 this, this setup. This background looks great.

01:05 Little spooky red light back there. I feel, I

01:08 feel like I should, I should just pay heed to you.

01:13 Well, we are in the Dev Random TV studio.

01:17 There you go. Link in the show notes to Dev Random.

01:22 Indeed.

01:23 I gave a talk at UberConf in July. That's if, dear listener, if you don't know,

01:29 that has nothing to do with Uber, the ride service.

01:34 That is a talk in the No Fluff Just Stuff family of conferences.

01:38 It takes place in Westminster every summer,

01:39 Westminster, Colorado, not Westminster, London.

01:43 And I gave a talk on OpenSpec, a tool that supports

01:48 spec-driven development in the context of agentic engineering.

01:52 And you were not there, which is okay.

01:55 I was not.

01:56 No, we don't usually go to each other's talks.

01:59 We don't normally have that opportunity because

02:03 at UberConf I was speaking the entire conference.

02:07 So every slot.

02:09 Every slot. Modulo, give or take one, I think.

02:13 Sure, sure. Just for the bleeding in your

02:16 throat to stop. I am not that cool anymore.

02:18 I had opposite end of the spectrum, just that one talk.

02:23 And there was a year, I think it was 2011, where I did, I didn't do every slot.

02:28 I did all six on Wednesday. There's, again, folks, if you don't know the

02:32 conference, there are 90 minute sessions.

02:34 And on the first day of the conference, after the workshops, the first proper day,

02:38 there are six sessions that go from like 830 to 1030 at night.

02:41 It's insane. I did all six of those once. And you're just like, we used to call

02:44 this pulling a Venkat, but it's now pulling a Carducci filling every slot.

02:50 Oh my. I'm about to become whatever part of speech that is.

02:58 My brain is too tired today to figure that out because a verb?

03:03 No, it's still a noun, but I'm already a noun. You know what I mean? Yeah.

03:06 But that's okay. I've always said that I'm... Yeah.

03:09 Like Xerox.

03:11 Yeah, there you go. Xerox is a verb and a noun. But

03:14 I've always said that I'm more of a verb than a noun.

03:16 People ask me, what do you do for a living? And I don't know. I do fun and

03:22 interesting things and occasionally people pay me.

03:26 The only... which is a great way to live your life except

03:28 for the occasionally part. But, you know, we learn to adapt.

03:33 There's, you know, some ups and downs and things like that. But you do get to do

03:39 fun and interesting things and do things like give

03:41 15 talks at a conference, 15 90-minute talks, which...

03:46 Yeah, that's more like type two fun than it is. It is. Type one fun. It is. And

03:52 folks, if you don't know what type two fun

03:53 is, that's fun. That's fun after the fact.

03:56 Like... But not certainly not in the middle. Not during. And I'll usually describe

04:00 difficult outdoor experiences like getting caught in bad weather as type two fun.

04:04 Because it's miserable at the time. And afterward, like 30 minutes

04:08 after you get warm, you have become the most

04:11 awesome human being ever to exist.

04:15 And just listen to my story. I'm going to tell you how awesome I am. It becomes the

04:19 best thing ever. So yeah, yeah, that kind of that kind

04:21 of load at a conference can be that kind of thing. So...

04:26 But you gave this talk. I want to preface this though, because before we get to

04:31 this talk, I want to get to you calling me

04:33 out whether you knew it or not. Because I...

04:38 I've done that thing that a lot of people tend to do. We hear ideas, we hear words,

04:43 and we start to connect those words, these new buzzwords, these new ideas in the

04:47 industry. We connect them to the concepts we're familiar with.

04:51 Yeah, and it's very, very easy to connect all those concepts together. And then

04:55 basically quickly parse it in your mind, build a little mental model, hey, it

04:58 parses, and then it just becomes fact in our head.

05:02 I... I deride that behavior, but I am human and I also do it and I'm trying to get

05:08 better. I had heard this talk of spec driven development. And I...

05:14 let my own assumptions define it independently event everything else. I'd even

05:20 cracked a joke or two at the the expense of spec-driven development

05:24 in the context of

05:25 a larger point that I was trying to make in

05:27 a panel or in a talk or something like that.

05:30 And then you posted on LinkedIn, you said to the people who are making these kinds

05:36 of jokes, first of all, seen. Second of all, you followed it with...

05:41 Get wrecked, whoever you are. No, I don't think I said that, but...

05:44 No, I think you said, do you even lift, bro, was your exact word.

05:49 Okay, that sounds like me. Yeah.

05:52 And... and so I paused and I just sort of accepted that maybe I don't know what I

05:58 think this thing is. Yeah. And that was where it was resting. Now I sent a

06:04 colleague of mine to UberConf and he went to your session.

06:10 And then he taught me what he learned from you and

06:14 that's when everything changed. Okay. So what did you think...

06:17 But I will hand the narrative right now.

06:18 Did you think Tim is back to the 90s and functional specifications and I was

06:24 working for IBM at the time just a few months ago

06:26 you're thinking, wow, IBM has

06:27 really had its impact on him. He used to

06:30 be something and now look, I mean, was it...

06:32 I'm overselling it, but you were thinking of that kind of spec.

06:36 I...

06:38 Yeah, well, yes. And I think really what...

06:43 What I imagined when I heard the term "spec-driven development"

06:47 and I'm not afraid to

06:49 say there are a lot of things in the world that I don't understand or that I'm

06:52 wrong about because what I don't know could fill a warehouse.

06:54 But I had done some AI-assisted coding and I'd been doing some back and forth, but

07:01 I'd never really had a good repeatable, consistently useful approach.

07:08 And I could see the value of sitting down and doing the kinds of things that we

07:13 did. I'm of a certain age that I remember writing functional specifications and

07:19 technical specifications and planning out the

07:21 entire implementation before I even wrote a line of code.

07:24 And that mindset sort of fit both my experience

07:31 of working with AI to produce code,

07:34 but also this label of spec because I had this label of spec in my mind and I

07:43 associated this thing that I started doing back in the 1990s or we'll just say the

07:48 1900s because it might as well be that far away.

07:51 It is the last century and that was just sort of where I landed. So I was certainly

07:58 associating this idea of spec-driven development

08:02 as these kinds of specifications.

08:05 I wasn't really hung up on granularity, but it made intuitive sense to me because I

08:13 figured writing more and more about the implementation

08:17 in a specification that is essentially a giant prompt

08:21 was what people were talking about. Now there is a semantic diffusion

08:26 problem with spec-driven development

08:27 I'm finding out because people call a lot of things spectrum

08:31 spec-driven development and some people are even doing what I was imagining

08:36 and they're calling that spec-driven development all the way to very

08:39 opinionated, very tool driven approaches like OpenSpec.

08:44 Yeah, like the one I was advocating in that talk. And I was kind of set off by some

08:53 YouTube discourse. And that in July is the first time I'd given that talk and I

08:59 thought, you know, what are people saying about this? Maybe I should go check. I

09:04 think it's great. I've been using it. But what's going on in the world? And I saw

09:08 uninformed arguments against it that

09:11 and by the way, Michael, you...

09:14 uh, you called yourself out because you heard a thing, and you

09:18 interpreted it in terms of the mental scaffolding that you had

09:23 You don't have a choice. There are too many individual

09:25 things in the world. You have

09:27 plausibility structures and sort of a skeleton for knowledge and you get a new

09:32 thing in there and you got to put it in the skeleton somewhere until something

09:37 comes along to disrupt that you think, oh, I need to rebuild some frames. There's

09:40 nothing wrong with that. But these were guys who were

09:43 going to the trouble of making a whole YouTube video

09:45 saying, did Agile teach us nothing?

09:47 Why are we writing specs again? I thought, Okay,

09:49 that just sounds nothing like the actual practice here. So

09:54 Oh, wow. Okay, so you weren't calling me out because I made one or two...

10:00 No, I live in jokes that you were talking trash about me. If you said it on a

10:04 panel, usually I go to my happy place

10:05 during the panel, I can't hear any words. And so

10:08 So you put this your team put this practice at work. What...what was the

10:14 thing that it turned out to be that you

10:16 saw what to talk, talk to me about? Oh, okay.

10:21 essentially, like I said, I had I had somebody who was working with me on one of my

10:25 projects. And I said, I said, I'm gonna send you to UberConf, he goes, he comes

10:29 back, he says, I learned about spec-driven development. And I said, Okay, explain

10:34 this to me. So we sat down afterwards and just spent the day.

10:39 Pair, pair programming is not the right word here. But we were pair spec-driven

10:45 developing whatever that is, and just kind of walking

10:49 down and playing with it. And what I discovered is, this is

10:56 an extremely valuable workflow that may not be the optimum workflow, but it is the

11:03 that has two advantages over anything else that I personally done. Number one is I

11:09 started it gave me a very consistent repeatable process that I could follow. And

11:19 two, it gave me consistent, repeatable results. And the side effect is my

11:29 experience with the agent kept getting better. So whereas every time I would sit

11:36 down with Claude, it was like we were having the same conversations, and I was

11:40 giving it the same reminders and oh, no, no, we do these things this way. And yeah,

11:45 I've been going in there and editing things in my CLAUDE.md file.

11:49 And doing other bits and pieces, but it just...

11:53 ...always felt like we were from square one. And, and it was always felt

11:57 like this new person who was a very capable coder had just joined the team and

12:04 you're trying to catch it up on all of the things. Right, right.

12:09 But spec-driven development

12:11 has its own memory of the meta that it maintains.

12:19 Which is enormously valuable. And it does that better than what I was able to do

12:23 with like a CLAUDE.md file or a bunch of markdown files or anything else.

12:28 Because it's part of this more tool-driven, consistent approach.

12:34 And since then, I

12:36 haven't gone anywhere without it. It's like my American Express.

12:41 Nice. Before we go on, I want to say

12:46 to anyone listening who hates spec-driven development

12:48 or OpenSpec or whatever, thinks, you know, if you don't have agent

12:52 loops running, then you're missing the game. There's a lot of ideas. We don't the

12:58 practice of writing software has just radically

13:00 changed. For most of us as of about nine or 10 months ago.

13:04 And it's still radically changing.

13:06 And we don't really know what we're doing. Now, I think I'm getting great results.

13:11 A lot of people are getting fantastic results. But it's kind of a three to five,

13:17 maybe five- to ten-year kind of problem to figure out

13:21 what it is we're doing again.

13:25 It would be like the kinds...the parts of Agile that sort of filtered through

13:29 all the consultancies and processes and all that

13:33 stuff to just become accepted practice in the world.

13:37 That took 10, 15 years. For people to figure out, okay,

13:40 what's test driven development really for?

13:42 An architectural paradigm like microservices, we just sucked at those

13:45 for three to five years. I'm amazed the paradigm even survived the initial

13:50 implementations before people really figured out how to do that. So

13:54 I have a theory two things. If I if I can just drop a little bit in there, we're

13:59 here to riff. I don't I don't think most people have ever figured out

14:02 microservices. I don't think teams have ever really figured out agile. I think the

14:07 interesting thing is, is that we've always had humans in the loop doing what the

14:11 humans always do.

14:13 And, and where I think the entire calculus really changes is now

14:19 we're taking humans out of the loop. And I don't think we can really afford

14:24 to not understand these broader ideas. Yeah, but yeah, no, I've been an

14:32 architecture consultant for 15 years. And, at least, and I've never seen anybody

14:41 like personally, not yeah, we can case study this company on Netflix or somebody

14:46 like that. But personally, I've never seen

14:47 anybody doing microservices well. Actually succeeding with microservices

14:54 they are surviving with whatever they built. Fair enough, fair

14:58 enough. And, and I, I threw a bunch of things in there that are absolute catnip for

15:05 various debates. And I don't I don't mean to, if you're listening, you think I just

15:09 said something deeply foolish. Just, just give me a minute here.

15:13 Let him cook.

15:15 Let me cook. So much has been upended in the way we do

15:20 what we do, the way we create systems out of software that

15:24 we are currently casting about feeling around in the dark trying to figure out

15:28 smart ways to do things. And just like pre-AI there wasn't one methodology

15:33 There wasn't one architecture, there was this robust debate all

15:36 these it's gonna it's gonna stay that way. Okay, so

15:40 we're talking about spec-driven development, particularly OpenSpec here,

15:42 because I think it's interesting, because I like it,

15:44 you have found some some luck with it.

15:47 There are going to be other AI-assisted engineering

15:50 workflows, practices, methodologies, that will just never have anything to do with

15:56 a tool like this. And big tent, lots of room for

16:00 lots of approaches. And you know, I wouldn't mind

16:05 finding somebody who hates OpenSpec in a principled way to,

16:09 but you and I love it. So and it's less about the tool than the process. But

16:14 what I've found, let me let me just talk a little bit about what my experience has

16:19 been. And I have to be clear that this is with pretty hobby-ish projects. My work

16:27 as a developer relations leader. I do a lot of zoom calls and Slack messages and

16:34 occasionally travel places and give talks. But

16:37 I'm managing people. I'm not writing code at work.

16:41 I'm, you know, leading teams that that that write code, but I'm not. And so this is

16:45 hobby stuff. And so you know, take take with a grain of salt. I find you mentioned

16:53 it keeps the agent on track. And I'd like to dig into a little bit about how but I

16:57 thought it keeps me on track is the thing. I am working right now in this month of

17:03 September on something to replace Adobe Lightroom for myself.

17:09 I don't know how broadly useful it'll be. There's a lot of really hard problems in

17:13 there, but just sort of tired of their BS. And I think I could I could do better.

17:20 Now that we've got AI. And I kind of need to be kept on track about what I'm

17:26 working on when it's when it's as easy as prompting a new feature. I don't know

17:33 that that a random walk through the feature space of what a

17:37 Lightroom replacement might be is all that good of an idea.

17:40 And so I started with a conversation with Claude saying what I wanted to do. And,

17:46 you know, I want storage to work like this, I want import to work like this, I want

17:50 to support these formats. I want, you know, face recognition and and semantic

17:57 search of images and, you know, stuff that why do I not have these in Apple photos

18:02 or any of these things? It's it's it's crazy. I would just like these things. And

18:08 we had this this long conversation. And it gave me a markdown file of some

18:16 proposals and explorations. I'm using particular verbs related

18:20 maybe we can get into them.

18:22 And now I'm just sort of walking through that. And implementing there.

18:26 Not just saying, "Oh, hey, that's cool. But let's do this."

18:31 You know, there would be a little bit more of a meandering in my own

18:36 focused-deprived mind through the process, because I can just prompt stuff.

18:42 So I feel he keeps me on track as much as as anything.

18:45 Now, that's really interesting, because my one of one of my observations was it

18:52 allows me to go off track. Oh, tell me, can I can I can I yang your yin for a

18:58 moment? I may know what you mean, but I want to I want to hear.

19:01 So I use OpenSpec in a slightly less hobby ish context, built and maintain a sass,

19:11 which is which is good that there's a responsible professional in the

19:15 conversation here, at least one.

19:16 I have I have customers, I have SLAs, you know, paying customers

19:22 So I have to be somewhat careful.

19:25 Now, where I have been is

19:33 I'm a classically trained software engineer, right?

19:36 Well, I'm not classically trained. But whatever you want that to

19:41 mean, let's let's—I'm old school. How about that? I've been

19:44 around for a long time. I didn't start coding in the 21st century.

19:49 And so I just have a way of working and it's it's sort of a chorus of things,

19:57 right? So there's there's the ideas, the goal, the code, the architecture, the

20:02 design, the value proposition, like I'm trying to weave all these things together

20:07 in the way that I am operating the machine.

20:10 So what comes out is something valuable. And I'm usually thinking about all of

20:15 these things as I go. And usually, when I prompt an agent, it will think about the

20:25 code, none of the other things, it won't

20:27 think about anything else, unless you talk to it.

20:30 So I, I'd been very hands on with the way that I had been prompting agents. It's,

20:35 nope, nope, nope, do this, I go and watch check, etc. So I certainly wasn't, I'm

20:42 not the kind of person that gets comfortable

20:46 with like completely unattended agent loops.

20:49 And I'm not trying to build dark software factories, because I've been outside of

20:54 coding in the rest of the business long enough to realize that

20:58 thar be dragons

21:00 I'm not prepared to slay them. So I've been very

21:04 interactive. And I have continued to be very interactive.

21:08 But when I started using OpenSpec, instead of just

21:11 hey, Fable, let's ideate and

21:13 then build a markdown file that I can hand over to Opus to go and build things. And

21:18 I started following the OpenSpec approach, the open spec, spec explore, we have

21:22 this great conversation, I really feel like I'm stepping into the role of the

21:26 architect again, I can be the architect, I can talk about the architectural

21:30 constraints, what must be true, the constraints that

21:32 we work within, the why behind a lot of these decisions.

21:37 And of course, being a language model, it can just change the context of everything

21:42 else. So it understands, "Oh, okay, yep, I understand we talked about semantic data

21:47 or modular monolith or the rest of it and why and what the constraints are, all of

21:51 those things have been emerging beautifully. And what, what comes out the other end

21:57 is, is the change. And so that's the, that's the this

22:04 didn't feel that different to what I'd already been doing.

22:06 I didn't realize how rigorous that approach had been, because it had baked in as

22:12 many surprises as possible into that specification.

22:17 So now most of what's happening

22:20 moves confidently forward. Well, the agent is always confident.

22:24 I'm confident.

22:25 And that's the harder one. But every now and again, it's

22:30 going and it says, Oh, I just noticed, there's a there's a

22:36 there's a gotcha here. And, you know, and in fact, what had happened was, I was

22:45 just trying to do some some basic stuff at first, I was just bumping some

22:49 dependencies. And that turned into a three day yak shaving extravaganza.

23:00 As it always does.

23:02 Because of, I'm gonna hold my tongue because I have so many unkind things to say

23:08 that Oracle right now. Oh, boy. But it mostly Oracle's fault.

23:13 Hey, we're not we're not sponsored by Oracle here on this

23:15 occasional podcast. So, you know, you say anything you want.

23:20 But it or they just shipped a bunch of buggy drivers and then and then did nothing

23:25 for six months and just turned into a big ordeal. But what my experience was

23:31 because I had this direction. And we had where we're trying to go. And we ran into

23:37 roadblocks. Now, the way I think about it is

23:43 it's like Google Maps or Apple Maps or Tom Tom or whatever turn by turn directions

23:48 that you use. Tom Tom. Okay, bloomer. Yeah.

23:54 I just want to be inclusive. Don't shame me for that. Please go on.

23:59 There are dozens of them

24:01 dozens, dozens, so many. Yeah. But whatever you're using for your turn by turn

24:06 directions GPS navigation. Sometimes you

24:09 will hit a roadblock that isn't in the map that

24:11 wasn't in the plan. Or sometimes you just make a mistake and miss an exit. And what

24:18 does your GPS do? It just recalculates and it gets you back on track. You go around

24:24 the obstacle gets you back on track. So, for me, the value that I observed early on

24:31 was the ability to absorb meandering. So like my

24:37 strategic brain can plan and propose and explore.

24:41 And again, throwing out more OpenSpec terms.

24:44 But once we're applying the change,

24:47 if something comes up, it doesn't end up getting us lost like,

24:53 okay, I, I want to, I want to reflect that and relate to that. It also occurs to

25:01 me, I just want to take a few minutes now that we're in a half hour into this

25:04 conversation. Let me explain what this silly technology is that we're talking

25:08 about. And this is in no way sponsored. I'm

25:11 not even a contributor. I don't know the folks who write it. I'm just a guy who

25:15 discovered this thing and said this thing looks useful. So if it sounds like I'm

25:20 shilling for it. I'm, we're just talking about a technology we like. That's all we're doing.

25:23 So it is fundamentally a command line tool. And a set of skills, very

25:28 particular set of skills. And when you, say, on a Mac, you'll

25:34 brew install openspec

25:36 and you have a new project, you'll, you'll install,

25:41 the skills into the .claude or .agent, or, you know, wherever they go in your

25:45 particular coding harness. And it's got support for

25:48 a couple dozen of those.

25:51 Then there's this workflow, okay?

25:53 So you got those skills, you got that command line tool

25:54 And there's this workflow

25:56 So if you know what you want to do,

25:59 You propose a change.

26:00 And that's the that's the /ospx:propose command. And that can be a sentence

26:06 that can be, you know, paragraphs and bullet points, whatever.

26:11 Your definition is of the thing that you want to get done. And that's called a

26:15 change. So and I'd like I know you know all this just in case the audience doesn't

26:19 So you propose a change.

26:21 And there might be a little back and forth on that proposal

26:24 There might be some things that are unclear. And the agent might say,

26:27 Well, you know, what do you mean about this?

26:28 Or it's not clear what library to use

26:30 for this? Do you want to spike this? There can be productive discussion there,

26:34 right? If you don't quite understand your

26:38 change well enough to jump in there, you can explore.

26:41 Which again, this is like, you know, a feature that's been in most coding harnesses

26:46 all along. But the explore command is intentionally like,

26:50 Hey, man, I don't quite know what I'm doing

26:52 I want to think about this. You know, how is raw image decode

26:57 gonna work in my Lightroom replacement

27:00 There's a lot to talk through. And usually,

27:04 that process, you're interacting with the model and the skill, and whatever

27:09 existing specs and existing code bases are in there.

27:11 Usually, that's iterative. It's asking you questions. And it's freaking

27:14 challenging. It often when I'm exploring, I'm like, Oh, yeah, I didn't think of

27:19 that. That's a really good question. I it's, it's hard work to go through to do

27:24 that architecture work. So if you explore, you explore for a little while, and then

27:30 that becomes a proposal, if you kind of understand things well enough,

27:32 you /ospx:propose

27:33 Now you've got a thing called a change in flight. And a change is

27:38 a proposal, which is like a description of kind of what you're doing, a design

27:44 document, which is just a more detailed implementation, a task list,

27:48 and, not to be forgotten,

27:50 a set of actual specs, WHEN blah, blah, blah, then this SHALL, blah,

27:55 blah, you know, that sort of formal spec language,

27:57 that's all in markdown. And on a per change basis.

28:03 And but it does have shades of BDD that become not like an

28:10 executable spec, per se, but like, you can see it from there.

28:16 You can, you can and I'll get I'll get there. There's the specs don't just go into

28:23 a folder to die and never be heard from again. When,

28:28 you know, development of something complex, new changes,

28:32 are going to interact with old specs and we'll get there. So

28:36 once you got a proposal, and you like it, you read the design document, it makes

28:40 sense, then you apply it and apply goes and writes all the code.

28:46 And typically, some of the tests are whatever automatic verification, the agent can

28:50 do some of them might be manual verification.

28:53 There's a new version of open spec that has a verify step

28:57 a verify command that you can get a different model to go in and check things out.

29:03 Actually, I'll confess I haven't done that yet. But

29:06 when you're done, everything works, then you archive the change, and it is no

29:09 longer an active change. But the design document,

29:13 the proposal, the task list and the specs

29:15 stay in the OpenSpec directory as

29:20 an official part of the repository of this project.

29:24 And this this is coming back around to something you said

29:26 how it keeps the agent on track

29:28 At least you've found that it keeps the agent on track.

29:32 All the modern harnesses and the models contemporary as of

29:37 this recording, do a really good job saying, Okay, what's out there in the code

29:41 base? What am I doing? What do I need to look at? And, you know, maybe if there's a

29:44 little markdown file of whether it's the AGENDS.md or CLAUDE.md or some

29:48 other sort of advice, you know, they'll find those things. But now explicitly,

29:53 there's this long list of specs and

29:56 The specs are merged into the master spec list for the application.

30:02 And this isn't part of the problem with

30:07 writing functional specs in the bad old days was it

30:10 was a focus on the software, the thing you

30:12 were building and not the people who used

30:15 it and what they were doing.

30:17 And it was very easy to just get absorbed

30:20 and off the road off into weird territory and,

30:23 and not thinking about the people who use your thing.

30:26 There's another dimension that's worth mentioning.

30:29 Yes, those specs were about building software.

30:33 And we don't build software, and we have not built software for a very long time.

30:38 Developers change software, software engineering is change cycles

30:42 that are nested

30:43 And that's a very important detail.

30:46 Because when you change software, there's

30:49 important context that doesn't exist in the code.

30:53 It exists in a list of previous decisions and commitments.

30:57 And now, and I'm just seeing this in my, my

31:01 current project, my Lightroom replacement, I have

31:04 this list of, I don't know, 50, 60

31:07 proposals that are the whole vision for the thing,

31:10 explorations and changes, 50 or 60 changes that

31:13 are going to be an initial version of this thing.

31:15 And occasionally it'll say, well, okay, but this

31:18 contradicts a spec that you've got from back here.

31:21 And that'll have to change.

31:22 What do you think about that?

31:24 For me, what I'm most excited about when it comes to OpenSpec, like, and again, I,

31:32 I, I fully admit that there are, like you said,

31:34 there are other approaches.

31:36 Um, none of them are really right.

31:38 None of them are really wrong.

31:39 It's just a different set of trade-offs.

31:41 But for me, I always go back to, I think

31:43 it was Peter Norr, Peter Nauer, Peter Nair.

31:47 I don't know how to pronounce his last name.

31:48 I've only ever read it.

31:49 Do you know who I'm talking about?

31:50 Yes.

31:52 Uh, he wrote a paper back, I think in the eighties

31:55 called, uh, uh, it was like programming as theory building.

31:59 So he has this concept of, uh, what he calls a theory, but, um, essentially there

32:06 is, there is the program and the program is more than the code.

32:13 The code is like a reification of the part

32:17 of the program that happens in the machine.

32:19 But there is, there was something bigger that, that exists outside of the machine

32:24 because the reality is the software that we build exists to deliver value and where

32:30 it delivers value ultimately is outside of the computer.

32:33 The problem is outside.

32:34 The solution is inside.

32:36 And so by definition, just looking at the code, you're only looking at part of the

32:43 program, part of the, part of the solution or part of the problem.

32:48 He says that code is, uh, is lossy.

32:51 And what I found is, is continuing to use OpenSpec, um, as a, as a consistent

33:00 process and even ritual, uh, allows me to expand

33:06 not only the code, but the, the program as theory.

33:10 It's the, it's the theory building part because what it's maintaining in those

33:15 markdown files and the opinionated structure that it adopts is

33:20 basically the kind of learning that happens in a team.

33:25 Like I remember one of my jobs as a coder, I show

33:27 up and they say, Hey, Michael, go do this thing.

33:30 And I'm like, Oh, okay.

33:31 Yeah, we need to do this.

33:32 I know how to do that.

33:33 That, that, that, that, that, that, that,

33:34 that, and all of a sudden, why is production down?

33:37 Oh, you didn't know that there was a load bearing bug in that particular class.

33:43 And nobody ever touches that.

33:45 Like that's no.

33:47 You just like this is stuff that doesn't fit in comments.

33:51 This is the tribal knowledge.

33:53 Yeah.

33:54 And what I really appreciate is it gives you a mechanism for capturing the context

34:03 behind decisions, not just the code that resulted.

34:08 And that is enormously valuable.

34:11 That makes the agent part of the team.

34:15 Instead of the bot that you say, okay, now make code do this.

34:20 Right.

34:22 Excellent point.

34:22 There's a learning loop there.

34:24 There, there is.

34:25 And, and, uh, the reality, again, I, in my

34:29 experience, I see it interacting with previous changes.

34:34 You know, like you got this from this change and you

34:36 decided in, you know, two point, what you call 2.2.

34:39 I'm using that numbering system, which doesn't

34:41 help my anti-functional spec, uh, spiel, but anyway,

34:45 you know, whatever it's got a name it's called Fred back in spec Fred.

34:49 Uh, you, you deferred that and it sounds like you want to get back into it now, you

34:53 know, so it, it's, it's got that history.

34:55 It's a very good point.

34:56 I think of it as guardrails for me, but it's also really a lot of state, a lot of

35:00 knowledge, uh, about the project that the

35:03 agent has access to the harness has access to.

35:06 And, and we have conversations and, and some of these things basically become

35:12 integrated architectural decision records.

35:16 Given this context and, and this, this problem and this decision criteria, we

35:22 evaluated these options and landed on that one.

35:25 These are here, all the tradeoffs of all the different options.

35:28 And here's why this set of tradeoff matters most for this project.

35:32 Like that is now context that the next turn with the next bot that's going in there

35:38 isn't going to just blindly undo it because it's inconvenient.

35:42 Right.

35:43 Or it's just an inconsequential thing not to be considered.

35:47 Uh, and you know, we're focused on our current prompt and our current task.

35:51 Excellent.

35:51 Or it becomes a decision that no longer holds that is now being surfaced and a

35:57 human is making that distinction rather than a stochastic, um, chatbot.

36:05 But for me, that operational learning

36:06 is one of the most valuable pieces.

36:10 Um, and it, I noticed it at first in a very small

36:14 way because I'm on Windows for better, for worse.

36:20 Um, and I know that puts me in the minority because your first instinct was to send

36:27 the link to this podcast, um, studio online to my phone.

36:33 I, I in fact texted it to you.

36:35 Yeah.

36:36 Not, not helpful.

36:37 Yeah.

36:37 Uh, I mean, that works for you and you know, Sletten does the same thing and a

36:41 bunch of, you know, but all of my Mac

36:43 friends are like, wait, you're not an Apple device.

36:45 I just did a podcast.

36:45 I didn't put it in the calendar invite.

36:47 Like I said, I was gonna, but you know, still.

36:49 That's alright.

36:50 But then I got it moments later before I had to send you a snotty response, but,

36:54 um, the, uh, you know, I'm on a, I'm on a Windows

36:58 machine, but, uh, to help me, help me deal with that.

37:04 I spent a lot of time in zsh in, in the windows subsystem for Linux.

37:09 And so that's, that's where I try to spend most of my time.

37:12 And, uh, that's where I installed OpenSpec.

37:16 And of course I've got Claude running wherever Claude's

37:19 running and, and it says, I can't find OpenSpec the first time.

37:25 And then I said, Oh, it's in WSL.

37:27 Oh, okay.

37:29 And then it just shells over to WSL and assumes

37:32 Bash and it's not in Bash because I don't use Bash.

37:35 I haven't got anything configured in Bash.

37:37 And it says, I still can't find it.

37:38 I said, it's in, I'm using zsh.

37:40 Oh, okay.

37:41 Yep.

37:41 There it is.

37:42 And then that was it.

37:43 That was the end of it.

37:44 Every subsequent session knew that.

37:47 Uh, another one was it started spinning up all these different work trees and

37:50 things like that and, uh, putting everything in branches.

37:55 And, you know, that's fine.

37:57 Uh, I'm not, I'm not here to yuck anybody's branch yum.

38:00 But I am, uh, I'm a old school continuous

38:08 delivery, trunk based development kind of human being.

38:11 And I believe if you, if you're doing continuous

38:14 delivery, right, then the branches slow you down.

38:18 But, and also I think, you know, continuous integration is valuable, but,

38:26 in the beginning, it just always started to, uh, do things in branches.

38:30 I said, well, this isn't very helpful.

38:33 I do trunk based development here and it says, Oh, okay.

38:36 Got it.

38:36 And then that goes into your config.yml, which is basically

38:43 another fire we haven't even talked about.

38:45 Right.

38:45 But it's, yeah, things it needs to know, but that

38:51 is the, that is the value of persistent context.

38:53 It knows standard operating procedures.

38:55 It knows, uh, enormous context about past decisions and where we've run into

39:03 similar crossroads and how we evaluated those.

39:07 And not only that I feel like my agent got smarter, but my team got smarter as

39:13 well, because it was flagging inconsistencies that

39:18 we had in our approaches that we didn't know about.

39:23 Um, so that was just another side effect.

39:29 That you, you saw that, uh, help move you forward.

39:34 Yeah.

39:35 My guest today has been Michael Carducci, developer,

39:38 speaker, teacher, software architect, raconteur, magician.

39:45 And friend. And knowledge graph grease monkey.

39:48 Michael, thanks for being a part of the show.

39:52 Tim, it's always a pleasure.

39:53 Good to see you.

About Michael

Michael Carducci spent years learning to see things as they actually are; first as a magician, then as a software architect, now as both simultaneously. And somehow that’s not even the whole story.

He’s the author of Mastering Software Architecture (Apress, 2025) and is currently writing The Semantic Layer (Packt, 2026). He has spent over 25 years following interesting problems; through roles from individual contributor to CTO and back again, across industries and continents.

As a speaker, he applies the same toolkit he uses in close-up magic: attention, misdirection, timing, storytelling, and the instinct to take the long way around when that’s where the truth lives. Audiences at hundreds of conferences across four continents have described his talks as the kind that change how you think about a problem rather than just what you know about it.

He also makes YouTube videos about technology and curiosity with his wife Kate, because some ideas are too important (or too interesting!) to leave only in conference rooms.

Comments

No comments yet. Be the first!