...
Itential Platform Pricing Explore flexible plans and options for your team
Itential logo
Podcast

Stop Vibe Coding, Start Spec-Driven Development

If you’ve been vibe coding and want output you can test, version, and hand to someone else, this is the upgrade. A full walkthrough of all six steps, live and unrehearsed from AutoCon 5.

Speakers:

Headshot of John Capobianco, Head of AI and Developer Relations at Itential, helping organizations adopt AI safely in network automation with deep experience across enterprise, government, and cloud networking.

John Capobianco

Head of AI & Developer Relations
Andy Lapteff host of AONE podcast

Andy Lapteff

Host, Art of Network Engineering

The Structured Way to Build with AI

John Capobianco joined Andy Lapteff in Munich for the Art of Network Engineering podcast to explain why network engineers should be focused on Spec-Driven Development over vibe coding, and then runs a demo of it live. They build a fully functional, browser-based subnetting trainer from scratch using Claude Code and the GitHub Spec Kit. No Python. No JavaScript written by hand. Seventy-seven tests, all green, in about an hour.

Their take: vibe coding works. That’s not the argument against it. The argument is that the output is unconstrained, untested, and hard to hand to someone else. You get something that might run. You don’t always know why, and you can’t always make it better later.

Spec-Driven Development produces code the same way a network change gets produced: start with requirements, build a design, clarify ambiguities before you touch anything in production, then implement against a plan with defined success criteria. The  formalizes that process into six sequential steps: constitution, spec, clarify, plan, tasks, implement. Each one is a Markdown artifact that lives in Git and tells anyone reading it exactly what you built, why you built it that way, and how to improve it.

  • 💡 The output isn’t slop. It’s tested. It’s committed.
    And because the constitution sets guardrails before a single prompt hits the LLM, the code that comes out reflects what you actually asked for instead of what the model felt like building.

What You’ll Learn

  • Why SDD Is What Vibe Coding Grows Up Into
    Structured, Git-tracked, tested by default, and much closer to how network engineers already think about change management.
  • Why Network Engineers Already Know How to Do This
    Gathering requirements, writing an implementation plan, defining success criteria, specifying rollback – network engineers have been doing the SDD workflow for years. They just didn’t call it that.
  • How the Clarify Step Catches What You Didn’t Know You Missed
    After the spec is written, the LLM reviews the constitution and spec and returns up to five questions: gaps in the requirements, architectural choices left open, ambiguities to resolve before a single line of code gets generated.
  • Why SDD Ships Tested Code, Not Just Working Code
    SDD fixes the code on any failing tests automatically. The subnetting game hit 100% engine coverage and 77 passing tests before either host had touched it.
  • How to Mix Models & Keep Token Costs Manageable
    Strategies for mixing spec-driven development and vibe coding save on token costs, so teams can use lighter models for early steps, more capable models only for implement, to keep costs manageable.
+

Andy Lapteff • 00:00

The network engineer’s role is changing as fast as the job market. A1 Labs is how you keep up. Hands-on labs with new technologies built for engineers who can’t afford to fall behind. Show up, suit up, and level up in A1 Labs. Welcome to the Art of Network Engineering podcast. My name is Andy Lapteff, and returning our favorite automation AI LLM guru, John Capabianco. How are you doing, buddy?

John Capobianco • 00:27

Man, it’s so good to be here in Munich with you. I was the 1st smiley face when you got out of your taxi here. My bags have arrived, so I have a fresh set of clothes after four days. Four days without a Cisco, I was wearing my Vibe Ops shirt. It was a cool shirt on a cool shirt, cool shirt, wandering around the streets of Munich explaining to random people what Vibe Ops is. What is the Vibe Ops?

Andy Lapteff • 00:49

Yeah, just for the audience, I get out of my car after a very long trip. I didn’t sleep on blah, blah, blah. And as soon as I get out of the car, I hear your giggle. I look over at John Center having a coffee sitting. I’m like, what a great introduction to getting here. It was, you know, my friend giggling, saying hi, and come on over. So, all right.

Andy Lapteff • 01:06

So, it’s great to have you back. We’re going to do some cool stuff. I have heard of spec-driven development. I can’t say I know what it is. I thought it was applying software development practices to what I’ve been doing, which is like coding in LLMs. Yeah.

John Capobianco • 01:19

Is that kind of like it’s like Vibe Ops matured with some practices around it, right? So, this was introduced to me. Well, it’s been introduced maybe eight months ago from Microsoft and GitHub. And what we’re looking at here is the spec kit, which we’re going to incorporate into cloud code. So, spec-driven development, you may have heard of test-driven development, which kind of came out of the Agile framework and the early DevOps days where you started writing small tests that failed, and then you adjusted as little code as possible to make it pass. This is an approach, and you’re going to see that build high-quality software faster, right? Instead of vibe coding every piece from scratch.

John Capobianco • 01:57

Now, I’m going to be up front. There’s a lot more foreplay here, there’s a lot more patience involved, and it takes about 40, 30 to 40 minutes to get through a project. But what I thought, Andy, was let’s build a network-centric video game, right? And we can decide on what network thing we do, maybe quality of service or maybe subnetting. Let’s do a subnetting video game.

Andy Lapteff • 02:17

My 1st thought was: we’ll work a maintenance window. And if we break anything, like we fall into a pit of lava, you die if you break something in a maintenance window, but we’ll keep it simple.

John Capobianco • 02:28

So, we’re going to scroll down a little bit and take a look at what is spec-driven development. We can keep going. So, this is might be, you know, it might be interesting to read. SDD flips the script on traditional software development. For decades, code has been king where specifications were just scaffolding we built and discarded once the real work of coding began. SDD changes this where the specifications become executable. Now, let’s take a step back.

John Capobianco • 02:51

This is networking. This is the art of network engineering. What do you do for a network change? You gather requirements, right? You come up with maybe an implementation plan, maybe a test plan, maybe a rollback plan, maybe a success criteria plan. It’s very close to what network engineers are already doing in their day-to-day job, right? We might not say specifications, we might call them requirements, but the business comes down with some requirements.

John Capobianco • 03:17

We turn that into an architecture, we turn that into a high-level design, a low-level design. It mirrors that in a way.

Andy Lapteff • 03:23

So, that’s what a spec specs are: this is the thing we need, and this is the plan to get there.

John Capobianco • 03:28

Exactly. So, 1st thing we need to do is install the spec kit, install the specify CLI. So, let’s copy that 1st line of code here, the UV line. So, we’re gonna copy that, yeah, and then paste it in. And if this, hopefully, this doesn’t give us any problems. Oh, hang on, see that XYZ? Just press the up arrow and delete the

Andy Lapteff • 03:50

XYZ.

John Capobianco • 03:51

The XYZ thing. Yeah, yeah. Back to the at sign. Go back one more. Oh, one more. Yeah, try that. And that should grab the latest version.

John Capobianco • 03:59

Okay, cool. So it’s going to install the spec kit. Now, what’s neat, Andy, is you’ve started to get the hang of Git. So this will naturally Git track our specs. So today we’re probably only going to have one specification, but let’s say we wanted to improve it with a 2nd specification. This will actually make a branch and track all of it for you.

Andy Lapteff • 04:18

Question:

John Capobianco • 04:19

Is the specification to make the game? Yes. Is that okay? Yeah, yeah. Okay, so it’s installed. Specify. So you see over here, initialize a project.

Eric Chou • 04:28

Yep.

John Capobianco • 04:29

I would copy the 1st line there. Gotcha. And instead of co-pilot for integration, we’re going to choose clawed. So, we’re going to paste that in and change it from co-pilot to clawed. Good. Yeah. Okay, cool.

John Capobianco • 04:43

So, we’re going to press enter and use the shell. You could choose PowerShell, but let’s just use Bash and see the next steps. So, just see here. So, go into your project folder. We’re already in the project folder. If you click the little double files here, Andy.

Andy Lapteff • 04:58

Are we done with this over here? No, not yet.

John Capobianco • 05:00

Not yet. We’re going to follow that the whole time. So, double-click on the little files. See how we have a my project? And if you expand that, we have the clawed and specify. So, let’s CD into my project here in the terminal. And it’s called my project because we pasted in my project.

John Capobianco • 05:17

So, we’ll just roll with it. All right. So, let’s go back into the get guide. Now, the very 1st thing we’re going to build, if you scroll down, is the constitution. So, establishing project principles. Now, I don’t have a constitution where I live, right? We have a constitutional monarchy, but you have an American constitution.

John Capobianco • 05:35

Honestly, if you’re an American, use this to frame your constitution. These are guardrails, these are security principles, code quality, testing. Now, you know what I like to do, Andy? I like to use Claude Desktop. To write my constitution. So you’re going to copy this line, go into Claude Desktop. Can I go in there?

John Capobianco • 05:53

Yeah, and say, I’m using the SDD to build a video game related to computer networking subnetting or whatever. I know, and there’s a lot of pressure because everyone’s watching SDD to build a video game to for computer networking. Simulate computer networking. I don’t know. Is that bad? Let’s be specific. Let’s say a video game to help people, to help educate people about subnetting.

John Capobianco • 06:17

Don’t worry about the typos. It’ll figure it out. About people about subnetting. About subnetting. I would like you to help me build a constitution. Here is an example of a constitution. And then paste in the example that we just copied.

John Capobianco • 06:32

Yeah, and then send that off. Hit send. Now, this is going to take a couple seconds to generate the constitution. And then we’re actually going to start to build this video game. And while we’re doing this, let’s take a look at the next step. So the next step. You’re going to use/spec kit.specify to describe what you want to build.

John Capobianco • 06:49

Focus on the what and the why, not things like I want it to be in Python or I want it to be in JavaScript or whatever. So we’re just going to take a 2nd here, and we can see that it’s churning here. Let me grab the actual spec kit constitution template, and it’s going to give us a spec kit constitution. Now, Andy, let’s go back to VS Code and let’s collapse the clawed folder. And the specify folder. And what I would do is right-click on my project and say new file and call this constitution.md. This is John’s own personal way of doing it.

John Capobianco • 07:23

I like to keep my constitution and my spec and my plan as artifacts in the Git repo so that other people can see the exact code I used to build the video game. So in Claude Desktop, once we get the answer, yeah, we’re going to give this a little bit of time. This is going to churn for a bit. We’ll put that in the constitution. We’re going to put it in the constitution and then down here, Andy, if you so let’s launch cloud code now down at the bottom in the terminal, just type in cloud code. Why is everything in Markdown? Is that just like a machine-readable machine-readable and human-readable?

John Capobianco • 07:57

Right. Yeah. And it allows for things like tables and bold and things like that.

Andy Lapteff • 08:01

Like for instructions in LLMs, people use Markdown to give it. And you’re not going to believe this.

John Capobianco • 08:07

We’re going to get a bunch of artifacts in Markdown through this process. So let’s just go ahead and set up the Andy. Just this is a fresh install of Claude Code. So press enter. Do you have a key? I have a subscription. Yeah, so do subscription.

John Capobianco • 08:20

Okay, good. There it worked. You’re already logged in. What’s an artifact? You said that it’s going to create artifacts? Yeah, we’re going to get a bunch of different Markdown files and stuff and folders and everything. Okay, so if you press enter to continue, sure, recommended settings.

John Capobianco • 08:32

Yes, I trust this folder. Okay, so now if you do/spec or specify, see how we have all these spec kit, spec kit constitution? Those are the commands we’re going to use. All right, so let’s go see if we got a constitution yet from Claude Desktop. So I would just hit copy. But if you want to kind of check out some of this to get a sense of a lot. Yeah, it’s pretty big, but there’s sort of core principles: correctness before everything else.

John Capobianco • 09:01

And it talks about subnet math, and it talks about RFCs and. Honestly, like you can read it or edit it, but I just hit copy. Wow. Encode quality, testing standards. I guess that’s the magic of LLMs. Like, how did it do all this? Magic.

John Capobianco • 09:14

So we gave it a template of an existing constitution, and based on our idea of a video game for Cedar or for subnetting, this is the constitution. So it went out and researched subnetting and plugged it in. And made it a constitution for our game. So you’re going to hit copy in the top corner there. And let’s paste this into our constitution.md file.

Andy Lapteff • 09:34

Can I just right-click that and paste?

John Capobianco • 09:36

No, just drag this down a little bit so we can see the inside of the file. We’re trying to get into here, right? Yeah. So then paste it in. There we go. That’s what we want. So just paste and save.

John Capobianco • 09:45

What is that? Command S? Yeah. I think. Command level.there . Good. And then let’s go back to the GitHub.

John Capobianco • 09:51

I want to make sure we get the command right. You should be able to do/spec kit.constitution . So don’t grab this whole thing. No, no, scroll up a little bit. Yeah. So even if you just want to type in, finish this, spec kit.constitution. Is it not highlighting that for you?

Andy Lapteff • 10:09

Can I just scroll down and I suppose?

John Capobianco • 10:12

You can try to type it in. So type spec kit-constitution. What is it? Dash Constitution. And you should be able to tab that out, maybe. And now say the Constitution can be found in the constitution.md file.

Andy Lapteff • 10:26

So I’m going to write this out.

John Capobianco • 10:27

Yeah. The constitution can be found in the local constitution.md file. Please build me a constitution for this video game. I know, constitution MD file.

Andy Lapteff • 10:38

And then say, you just got to the limits of my working memory.

John Capobianco • 10:40

And then say, build me a constitution for this video game. So I have a question.

Andy Lapteff • 10:44

Yeah. And then press center. So we had it build us a constitution. Yeah.

John Capobianco • 10:48

And now this is going to implement. See, I’m going to explore the project structure. I’m reading the relevant files. Is this the 2nd constitution that we’re creating or no? So three of the steps in the spec kit, Andy’s constitution, specification, and planning require a prompt with it. So we use Claude Desktop to help generate the prompt that now Claude Code is using to build the Constitution. So we have to be a little patient here.

John Capobianco • 11:15

And through editing, the magic of editing, this might be a lot shorter. But each of these steps is going to take a bit of churn. It’s reading the source constitution file the user mentioned, the existing memory constitution, and the template. So now it’s going to take that markdown file we had and apply a template to it. So it has everything it needs. The repo is already a get repo with an initial commit, no action needed. Let me check the dependent templates for alignment before writing.

John Capobianco • 11:43

And now it’s going to go ahead and write the constitution. And this is super dry and boring. I know it doesn’t seem very exciting, but once we get through these steps, The very last step/slash implement generates the code. So, all we’re doing here is building up. I don’t think this is boring.

Andy Lapteff • 11:58

What happens for me sometimes is I get lost in the steps. Yes. Like, we created a constitution, but we didn’t. We created a prompt for a constitution. Then we put it in our markdown, and then we told it to create a constitution based on the constitution and the markdown.

John Capobianco • 12:11

There’s a lot of recursion there. I know.

Andy Lapteff • 12:13

But I’m just saying it out loud that this isn’t boring. I think this is cool. And kind of where I get lost in coding sometimes. And I guess recursion is the word for it. Like, you know, well, I did a markdown or I did a thing and now I’m doing another thing. So I’m just saying out loud where I get lost in.

John Capobianco • 12:27

I was asking here, do we want to override? I would say yes.

Andy Lapteff • 12:31

I would say yes to that. I would say yes to that.

John Capobianco • 12:33

I don’t know if that’s good. No, that’s good enough. No, no, I would say yes to that.

Andy Lapteff • 12:36

I wish I could make the yeses go away and just make it do whatever it wants.

John Capobianco • 12:39

So constitution ratified version 1.0. Here’s the five core principles. Here’s the dependent templates. Do you want me to run spec kit to commit the constitution now? Yeah, you can say commit it. That would be fine. Can I tab or do I gotta write it?

John Capobianco • 12:53

You could tab that, I think. Yep, commit it. So now that constitution is part of this Git repository, you just say yes to this. Yes, and don’t ask. I say, yep. So now let’s go, while this is churning, let’s generate our spec. So you see how this one here says the specifications: build an application to help me organize my photos.

John Capobianco • 13:13

And it’s going to say blah, blah, blah. So copy that line here. Yeah. And let’s go back to Claude. Yeah, let’s say yes to this thing. Aren’t we already in, Claude Desktop? Okay, next steps when you’re ready.

John Capobianco • 13:24

This is Claude Code. We want to go back to Claude Desktop. And now we’re going to say thank you. Here is an example of a specification. I love that you’re thanking. I always thank. I know.

John Capobianco • 13:36

I can’t help myself.

Andy Lapteff • 13:37

I’ve never thanked. Listen, when they take over the world and the robots come, they’re going to be nice to you.

John Capobianco • 13:43

They’re going to make me part of the governing human council. They’ll keep me in a zoo with the other handful of humans.

Andy Lapteff • 13:48

I’m going to start saying thank you because I would also like to be in this zoo.

John Capobianco • 13:51

So thank you. Next, I need the specification for this video game. Here’s an example spec. And then paste in what I grab. And then you’re going to set that in and press and click the send. Now, again, that’s going to churn a little bit. So I would close the X in the top corner here because we’re all done with the Constitution.

Andy Lapteff • 14:09

So what did we just ask for? We asked.

John Capobianco • 14:11

So if you look at the GitHub steps, the very 1st step is to generate your Constitution, your high-level guardrails. Then, the very next thing is the specify, which is what we’re doing now, is the actual spec. So if you go back into VS Code, I would make a new file called spec.md. In the project? Yep. You and your markdowns. Yep.

John Capobianco • 14:35

Now, if we go back to the process, Andy, after the spec, our next step is a plan. So, a command to provide your tech stack and architectural choices. So, if I want this to be a Python game, if I want it to be based in a web browser game, our different architectural choices. But if you scroll up a little bit, there’s an undocumented step we’re going to do called clarify. So, after we have our spec and our constitution, we can actually ask the LLM, is there anything you need to clarify so far? Like, is everything clear to you? Or do you have any questions to me, the human developer?

John Capobianco • 15:10

That seems pretty amazing. It’s really neat. And it’ll ask you up to five questions like, okay, you didn’t tell me whether or not this should be Python or JavaScript. Which framework would you like to use? That kind of interrogation.

Andy Lapteff • 15:20

I have another question. The software that I’ve been developing in Cloud Code, I haven’t been doing this. Should this be my new way forward for things I built?

John Capobianco • 15:29

So, I mean, me personally, I would say yes.

Andy Lapteff • 15:32

Like, this is more structured than what I’ve been doing. This seems better because I’m following a coding framework.

John Capobianco • 15:38

Well, and just wait until we get to some of the markdown that this is going to generate. It generates user stories, Andy, with functional requirements.

Andy Lapteff • 15:47

And it’s like if there’s a real software development thing, and this following a real software development thing will give us better code, better results, right?

John Capobianco • 15:57

Yeah, and the spec matches your intent always matches the code. We’re very clear.

Andy Lapteff • 16:03

Like, our intent is very clear because of this.

John Capobianco • 16:05

Right. And when we’re done in this exercise, other people who want to know how we built this video game can read the specs and the artifacts that we generate, right? So, let’s say the website you just made, like, you don’t have to start a project as spec-driven, but you could finish it as spec-driven.

Andy Lapteff • 16:21

Well, what I’ve done is I ask. Quad for a spec for something. Right. But that’s it. Then I just say, okay, let’s use it. Or maybe it’s a prompt. I don’t know if it’s a spec or a prompt.

Andy Lapteff • 16:31

Yeah, but you’re pretty close. Yeah, I created spec and it’s markdown, right? Most of the time. This is like the problem. Maybe I think I’d have to look, but I’m like, yes, let’s create a specification. And then I feed that in. And like, okay, let’s build this, but I’m not following this framework.

Andy Lapteff • 16:46

Right. I’m basically just giving whatever spec it created to itself again. Okay. See, all right, let’s go do that. Pretty close. But this is better.

John Capobianco • 16:52

It’s a little more formal. Yeah. Okay. So here we go. I pulled the current spec template. One judgment call I had to make: your prompt doesn’t pin down the core gameplay loop. That’s fine.

John Capobianco • 17:02

So it’s going to make a game that’s a typing tutor like Duolingo, but for subnetting. Duolingo for subnetting sounds pretty kick-ass to me. Sounds really good.

Andy Lapteff • 17:12

Yeah. The fact that we’re going to open source this thing and people are going to steal it and make a million dollars makes me crazy, John. You and William and your open source nonsense.

John Capobianco • 17:22

I’m kidding. No, it sounds really cool. Hey, it’s not my code. It’s our code. I’m a.communist .

Andy Lapteff • 17:28

Once you said Duolingo for subnetting, I’m like, oh my God, we could get rich. Why are we doing this publicly?

John Capobianco • 17:33

Hey, you never know. You never know. You know, we actually, you know what we could do? We could build a service, a professional services layer on top of it. And the code is free, but the professional services cost.

Andy Lapteff • 17:43

And I’m half joking. I had such a hard time learning subnetting. If this were useful and helpful to folks, I know.

John Capobianco • 17:48

So here we go. We have the spec. Review and acceptance checklist, open questions to resolve. And see how it says use clarify?

Andy Lapteff • 17:57

Yeah.

John Capobianco • 17:58

So these are the things that’s going to clarify. So what I would do is copy this, actually, just hit copy in the top corner. Okay. And then we’re going to paste this into the spec file. Spec.md and save it. And then we’re going to do the same thing. So down here, we’re going to do/spec or stop/spec kit-specify .

John Capobianco • 18:19

And you can tab that out and say the specs are in the spec.md file for this video game, let’s say. Okay, enter. And let’s just okay, I’ll start by handling pre-execution hooks, locating the spec source file. Let me read the spec file and the spec template. So, Andy, you see this.specify? If you expand that, all it is is a bunch of templates. See, there’s a constitution template, a spec template, a plan template.

John Capobianco • 18:43

Those are markdown files. Over here, let’s say yes. We’re not in YOLO mode, so we have to answer all this. Yeah, go down and just say yes and don’t ask again. So this is the specification, which is like a requirements for our video game, the specs that we want to guide the game. So we did the constitution 1st . This is high-level guardrails.

John Capobianco • 19:04

This is a little lower down. Yeah, just say yes and don’t ask again. There’s a way to do that where you say dangerously skip permissions or whatever. Maybe we should have done that. Can I do that now or is it too late? Well, it’s not too late. We would have to break out of Claude, though.

John Capobianco • 19:17

Here’s what I want to show you. So if you collapse, specify. This is when it starts to get really exciting, Andy. Notice there’s a new folder called specs. Expand that. Notice how it’s 001 and it’s called subnetting game. And you see how Git has changed us into a new branch called Subnetting Game?

John Capobianco • 19:35

How do I know that? Because of this. So it’s handling all the version and source control for us. So, what did it branch? We were in the main branch of Git, and it actually made a sub-branch. But there was nothing there yet? There was nothing there yet.

John Capobianco • 19:48

No.

Andy Lapteff • 19:48

It branched nothing.

John Capobianco • 19:49

And now it’s right. It branched nothing to track our work inside of this Git branch.

Andy Lapteff • 19:55

I thought you branched like the master, which was the. Yes. So we were in main, but there was nothing there.

John Capobianco • 20:00

Nothing in main. But it’s fine. It’s fine. It doesn’t matter. No. It just wants to track all the work for this very specific spec. Under this very specific branch.

John Capobianco • 20:10

So let’s say we said we wanted to add quality of service to this game. This is version control for the spec. Version control for the spec. Branching code remains. But when we get the code generated, it will be in this branch. Okay. Thank you for bearing with me, my brother.

John Capobianco • 20:25

Check this out. Click on the spec.md, not our spec.md, but this spec.md. Yep. And it’s just a template right now. See how feature name and right? So it’s just a template. Quote’s going to populate that or answer these.

John Capobianco • 20:39

Let me write the spec. So, yes, it’s going to change this whole markdown file to have all of our specifications for the game as soon as it’s done churning here.

Andy Lapteff • 20:51

This episode of the Art of Network Engineering is sponsored by Meter. If you’ve ever been through a major network refresh, you know the grind. New hardware, new contracts, new vendors. Then a few years later, you’re doing it all over again. Meter was built to break that cycle. They deliver internet infrastructure for the enterprise through a fully integrated platform that brings together the hardware, software, deployment, lifecycle management, and support. Instead of managing complicated systems and multiple vendors, Meter gives enterprises a more unified operational model with predictable pricing, managed migration, upgrade credits for existing hardware, and 24-7 support.

Andy Lapteff • 21:31

The result is a networking experience designed to reduce complexity and help IT teams focus less on low-level infrastructure management and more on enabling the business. Thanks to Meter for sponsoring this episode. Go to meter.com forward slash A1 to book a demo now. That’s M-E-T-E-R.com/slash A1. Now back to the show. How long would this have taken? Oh, by hand?

Andy Lapteff • 21:54

Yes.

John Capobianco • 21:55

Huh. Yeah. I mean, insane. We would still be planning the game. Like, we are planning the game right now, but you know, like to actually write a video game, like, I mean, it might take you weeks to months to years, depending on your proficiency as a coder, right?

Andy Lapteff • 22:10

Now, you were a computer software major, right? Yeah. The quality of code that this generates. Is it good?

John Capobianco • 22:18

It’s good. It works. It runs. I feel like we’ve entered enough, introduced the layer of abstraction. Do you really need to read the code as a networker? Like if the game works? Do you know what I mean?

John Capobianco • 22:30

When I pip install a package for Python.

Andy Lapteff • 22:33

Well, there’s a punchdown thing that happens. Like, well, you don’t understand what you’re doing. That’s the thing that I’m playing with in my head. Right. Well, I don’t, but if it works, I mean, I guess there’s security and vulnerabilities, but then there’s a security thing that you can install that for bones, which I’ve been doing.

John Capobianco • 22:47

So, okay, so let’s maximize this screen. Actually, so it’s actually, it has some questions for us. Who is the primary audience here, Andy? Complete beginners, CCNAs, classroom. So, this isn’t that clarification thing. So, the spec passes all quality checks, but there’s three deliberate needs clarification markers. So, let’s say complete beginners.

John Capobianco • 23:07

Let’s make this game for like. Very, very beginners. Oh, do we want IPv6 core and IPv6? Just IPv4? Just for so let’s do the 2nd one. No, let’s do the 3rd one. Core and super netting.

John Capobianco • 23:22

Is that like cider? How does the learner enter answers? Free text, multiple choice, mix by tier. Let’s do three, mix by tier. Review your answers, submit the answers. So if you want to look at, this is the completed spec now. Notice how at the very top, feature specification no longer has square brackets.

John Capobianco • 23:41

Subnetting learning game. So look at, it’s just like software developers do, Andy. User stories, functional requirements, why it’s a priority, right? Now, this, the LLM is going to use as an input later when we say implement to generate the code. Look at this: independent testing, acceptance scenarios, blah, blah, blah, right? I don’t understand testing. Do we test it or?

John Capobianco • 24:06

Because it will test its own code. Yeah, so we don’t have to test any of it. It’s going to test itself. Where does the testing happen? Check it out. So let’s roll this back up again, the divider. And here’s what Claude Code had to say: so here’s your spec file in this branch, and we even gave you a checklist with requirements.

John Capobianco • 24:22

See the checklist folder here? There’s a checklist in here of requirements now. What I did, I adapted your authored spec into the spec kit template format, restructured a flat story into three prioritized independently testable user stories. And here’s what we get: the question, topic, answer, spec kit to commit the spec. You can just tab and let’s commit it. Let’s go ahead and do the clarify step just in case there’s more clarifications needed. Yeah, and say yes and don’t ask.

Andy Lapteff • 24:54

I can’t imagine you wouldn’t clarify. That seems like a pretty good thing, right?

John Capobianco • 24:57

Yeah. So I like to do that right now. So if you do/spec kit clarify, and there’s no prompt here, you just say clarify, enter. And it’s the LLM now is going to evaluate our constitution and our spec to suss out anything that it’s unclear about. If anything, it needs clarity on. This is kind of like your junior, right? So I’ve given you the spec.

John Capobianco • 25:19

Let me, you know, review it and come back to me with questions before you do anything else.

Andy Lapteff • 25:24

This is crazy in the best way possible. Like this is like, I can’t believe what I’m seeing happening. In front of me. And I’m a broken record, but as someone who would never have had access to software development, I know. I would never have got to the point where I could do this.

John Capobianco • 25:43

I know. And I want to give a special shout out. So, if you’re looking for more materials about spec-driven, there’s a few people in the community doing a lot around this. One guy from Cisco, Jason Belk. I don’t know if you’ve ever met Jason. Yeah. He actually had a session at Cisco Live in the catalog about this exact topic.

John Capobianco • 25:59

So it’s starting to, you know, make noise out there. Okay, so what defines mastery to unlock the next tier? So how do we get to the next tier in the game? Streak of correct answers, a cumulative correct total, a past tier quiz checkpoint. I would say streak, right? Wouldn’t that make sense? I think a streak would make the most sense.

John Capobianco • 26:16

But that’s a good question. So it asks us five. It’s going to ask five questions here. Okay, so what defines mastery? Streak of correct answers. And now it’s going to ask us question two of the. Okay, so let me integrate that into the spec now.

John Capobianco • 26:30

And you see how it’s green? Yeah. It’s added that to the specification. And then the red removes. Yeah. Okay. So then when we go to build the game, now the game knows: okay, to move to the next level, they’ve got to get three answers correct or whatever in a row.

John Capobianco • 26:45

So, what’s question two? How does the game teach a concept before testing it? A brief lesson, explanations only, work example, and then practice. I would say just a recommended, right? Number one. Recommended, we can go with that. And honestly, anyone at home, rewind to the start and install the same things that we’ve done and build your own video game, build your own network video game.

John Capobianco • 27:05

Don’t do subnetting. Do routing. Do BGP as a video game. OSPF as a video game. Open source it. Make it a better world for everyone else. Leave something behind for the next generation to learn from.

John Capobianco • 27:19

I would have loved to learn subnetting from a video game. Yeah. I was doing it from flashcards and handwriting, Cedar calculations in workbooks. Okay, so is there a time pressure or is it speed only? I would say measure passively. Let’s not make this a time challenge. I can remember writing out the binary and the same thing.

John Capobianco • 27:41

Remember, they gave you a page of different IP addresses and you had to do each one of them: 1st usable, last usable. Yeah, last hop broadcast. N to the end minus two and all that stuff. Yeah. I almost quit over subnetting. So when I went to my, I went to an IP routing boot camp after I’d passed Switch. So my generation of CCNP was route, switch, t-shoot.

John Capobianco • 28:04

And I passed Switch and the routing instructor, Andy, was like, what are you doing here? And I go, I don’t understand. He goes, well, you’ve passed Switch. That’s the hard one. If you can do the switching and the binary and the subnetting and the spanning tree, routing is just next ops, dude. You’ll be just fine. And he was kind of right.

John Capobianco • 28:21

The routing book was twice as big because you had a whole section on EIGRP, a whole section on OSPF. Anyway, okay, so what’s the next one here? When does it switch from multiple choice to free text? Let’s just go per concept. We can do with the recommended setting. And then we’ll have one last question to clarify and we’ll move on to the next step, which is planning.

Andy Lapteff • 28:39

I had such a hard time with those old MP exams. I found route. Harder than I thought it would because routes intuitive for some reason to me. And I failed that one a couple of times too. I had a hell. I learned a ton studying for those three exams, but man, I, it was painful.

John Capobianco • 28:54

It was tough. I got hung up on CCA Data Center, of all things. I failed the 2nd of two like three times, and I was like getting really desperate, like telling to my wife, I don’t think I’m ever going to pass CCA Data Center. I’ve been studying this thing and writing tests for like a year to get that, right? Okay, so we’re all set. It’s clarified everything. Hit tab and commit the clarifications.

John Capobianco • 29:19

Okay, so now the next step is plan. And let’s go back to our GitHub folder over in the scroll down. And we’re going to do the same thing, except for plan. Now, listen, plan provides your tech stack and the architectural choices. So hit copy there. And we’re going to add a little bit to this. So let’s go to Cloud Desktop.

John Capobianco • 29:41

Oh, and don’t forget to hit yes here on this thing. Cloud desktop. Again, I would say thanks for the spec. Thanks. The next step is planning. Here is an example of a plan. And don’t hit, don’t send it yet.

John Capobianco • 29:54

And then paste in the plan. Press enter now. But this might be what we get. Use vanilla HTML, CSS, and JavaScript as much as possible. Images are not uploaded anywhere. Metadata is stored in SQL. So this is where we actually get into:

John Capobianco • 30:08

I’d like this to be a JavaScript-based game that’s in the web browser. I’d like it to be a Python game that’s at the CLI. We get to choose our framework and our architecture here. And for the interest of time, let’s just go here into VS Code and do/spec kit. And we’re looking for plan this time and then just space and say this should be a this should be a basic HTML CSS JavaScript Game in the browser.

Andy Lapteff • 30:39

I hope I didn’t break it.

John Capobianco • 30:41

No, you didn’t break it. We’re going to be okay. So you see here, now we have a new plan file. Right now, it’s just an empty template, but you can click on that. And now we’re sort of starting to get like this, Andy. We’re working down the funnel to implement where we get code. But right now, it’s going to break it into the technical specs on how to make CSS JavaScript in a web browser.

Andy Lapteff • 31:03

So we created the constitution, which gave us guardrails. And then we created the spec, which is like where the stories and all that stuff came from, right? Yep. And then we clarified to make sure it had clarification.

John Capobianco • 31:16

And it asked some good questions, which I wouldn’t have thought of. Yep. And now we’re breaking it down into plans. This, by the way, Andy, plan is the last step that requires a prompt. So the next two steps, you see how they just say tasks and implement?

Andy Lapteff • 31:31

Yeah.

John Capobianco • 31:31

You don’t need to type any prompts there. So the 1st three constitution spec plan, you feed it a prompt. And look at, check it out. The user resolved, the answer, the text stack, basic HTML, CSS, JavaScript, and the browser. I’ve read the spec and constitution and context. So now, really soon, all of these placeholders in the template will be filled in with the plans the Claude code has come up with. So we see some red, some green.

John Capobianco • 31:59

It’s adding some changes here. No constitution violations. Good. And I hope this doesn’t take too much longer. We’re okay for time. Eric Cho has entered the chat. Eric Cho is here.

John Capobianco • 32:07

Eric, come on over. Eric. Do you guys remember Mr.

Andy Lapteff • 32:09

Rogers where the neighbors would come in? Hi, Eric.

Eric Chou • 32:12

Hey, buddy. I figured I need to step in. Otherwise, John would just keep on talking. So nice to see you.

Andy Lapteff • 32:19

What’s up, man? It’s been a day. See you?

John Capobianco • 32:23

Okay, so implementation plan, subnetting, learning, game, V1, and this is now all filled in the plan. All right, now this is going to break it down: phase one, data model, contracts, quick start. So, those three, see how it says phase one? So, check it out. It’s going to generate the data model and a few other artifacts that implement is going to use to build this video game. So, we have a data model now. You can actually click on the data model.

John Capobianco • 32:50

I’m not sure if it’s finished building it, but this is the data model for this subnet game. So, you remember earlier you’re asking me how long this would take to build by hand. Just the data model might take a few days to model the data. So, now we’ve got contracts, a new folder. And if you expand that, we have an engine MD, which is the subnet engine. And this MD file explains persistence. See, it’s building all the things that the LLM is going to use to actually spit out code at the end of all this.

John Capobianco • 33:19

Question.

Andy Lapteff • 33:20

Yeah. If I just asked like a dum-dum, hey, build me a game and teach me subnetting. Yeah. Does it do all this on the back end and I’m just not seeing it? Like, would it have built all this out, but I wouldn’t be aware of it? Like, how would Claude build a game if I didn’t tell it to do all this?

John Capobianco • 33:38

You would just, so you wouldn’t get any of these artifacts or any of this structure. It would like be vibe coding. Yeah. It’d go, yeah, sure, here you go. Here’s 100 lines of Python, Andy. This would be a subnetting game. Might work, might not.

John Capobianco • 33:49

Might be cool, might not. This is much more constrained. It’s constrained.

Andy Lapteff • 33:54

It’s more polished. It’s more mature. Driven by the requirements. It’s almost like somebody thought it would be smart.

John Capobianco • 34:02

Have you ever been in that tough meeting where you’ve got business folks and network folks and the whole, and you’re just like, listen, do you have requirements? What are your requirements? I can’t just build a network without knowing what the requirements are, right? So this is a really cool way to do things. Okay, so let’s do the commit. And it’s sort of broken down. There’s a bit of a recap on what it did.

John Capobianco • 34:24

So I would just say yes. And then it tells us run spec kit tasks. To generate the tasks from these artifacts and they’re dependency-ordered tasks. Let’s just do yes here again. Okay. Next is to run the tasks, to turn these artifacts into a dependency-ordered tasks.md organized by user story, which is phase one, phase two, phase three. So you can build and validate the MVP 1st .

John Capobianco • 34:53

So just press enter. There’s no prompt required for tasks. Good news, everybody. We’re on the 2nd last step, the penultimate step, before we get to implement. And then once we implement, we’re going to get all kinds of code and a working minimum viable product.

Andy Lapteff • 35:11

I have never used penultimate in a sentence. That was impressive. Does that mean the 2nd to the last step? Second to the last. That’s right. You said penultimate, and I thought of the Madagascar Penguins. At one point, one of them says penultimate, and it’s hilarious.

Andy Lapteff • 35:23

And I don’t even know why.

John Capobianco • 35:24

That might be where I picked it up from.

Andy Lapteff • 35:26

Oh, it’s a very good use of it. I’m now going to use penultimate.

John Capobianco • 35:29

So I used to read comic books, and there was always like. You know, book 11 of 12 is the penultimate chapter in Spider-Man’s story or whatever, right? Now I know. The other thing I want everyone to be aware of is that this is, as you might imagine, a lot heavier token consumption, Andy.

Andy Lapteff • 35:45

You were just reading my mind. I was going to ask you about token economy and token account. You’re probably not going to do this. Probably not. I don’t know if the $20 a month at this current rate would be able to handle this.

John Capobianco • 35:57

I would just be careful with your tokens. Now, you don’t have to use Opus, right? You can connect Claude with Gem of 4 or an open source model, and then the token usage is irrelevant. Okay, so let’s click on the tasks file here just to take a quick peek on what that looks like. Yeah, see, so tests, and it’s going to do the test, the organization, the format, the path conventions. Shared infrastructure, like all this stuff that you don’t need, that we don’t need to think about. All right, check it out.

John Capobianco • 36:28

We’re ready to go. Run implement to execute the tasks. Let’s do the commit. So I just say yes, and then we’re going to run into implement.

Andy Lapteff • 36:36

Do you do anything different in your workflow to be thoughtful about token usage or do you just throw money at it? Because the reason I’m asking, there’s like a caveman thing where you can talk to it, like a caveman, and you get better, but I don’t know if it works. I’m not sure if it’s good.

John Capobianco • 36:49

I do have to be conscious of my token spend. Yeah. You know, I had a $380 Gemini bill out of the blue, and I didn’t know where it went. I didn’t know what I was doing that cost me that much money. It was hard to explain to my family. Token usage, like suddenly I get a bill like, oh, I was using VO3 to make videos, and I didn’t realize they were $8 a video, and I made 30 videos, and suddenly I’ve got a. $300 bill, right?

Andy Lapteff • 37:10

Can you limit it like you did with cloud, like the spending limits? You can put caps and limits and warnings.

John Capobianco • 37:15

Yeah, yeah. I’ve just got that shock value. And I was, it was ignorance. It was a matter of time. You’ve been a 1st adopter. Like, you’ve been a pioneer with a lot of stuff. So that was.

John Capobianco • 37:24

Okay, so let’s, I wouldn’t worry about analyze here. Oh, don’t do it. Let’s just skip analyze for now and go to implement. Let’s just go right to implement. Analyze is kind of like another interactive phase where it will. So is it run spec implement? Yeah, implement.

John Capobianco • 37:39

So let’s minimize this spec folder here, Andy. And you’re not going to believe this. What we’re going to start to get is code now. Code. Now, did you have to know anything other than what we wanted to build to get started here? Nope. Right?

John Capobianco • 37:53

No. Now, check this out. And pretty soon, we’re going to start to get folders like source folders and things like that. Yes, and don’t ask again.

Andy Lapteff • 38:01

Yes, to all the things. YOLO, baby. YOLO. So I pay $100 a month for Macs or whatever it is. I can’t get a bill higher than that. No, you can’t. Right.

Andy Lapteff • 38:11

Whatever you were, you were only like a usage-based thing at the time, usage-based, API-based. Yeah. Right. Which is tricky to figure out. I was looking into that and like, well, maybe I’ll just do this. And you’re trying to figure out the economy, like which way to go. I know.

Andy Lapteff • 38:23

But I guess just having that capped amount monthly, whatever I do, I won’t get it.

John Capobianco • 38:26

And you can kind of mix and match. Like for most of this, you could use Gemma 4 and then the very last implement step, switch to a more capable model. You know, like kind of pick and choose. So it’s asking us: NPM packages aren’t installed. How should I run the test coverage? Should I proceed with implement?

John Capobianco • 38:41

Let’s do one. I would press enter and it’s going to go ahead and install the Node.js kit that it needs for the JavaScript. And that’s fine. That’s why it’s asking you because it wanted to know if it was okay to install a couple things.

Andy Lapteff • 38:53

You know what’s funny with like the cost and tokens? It’ll be like a day or two, I’ll go by that I don’t use the tool. And I’m like, oh, damn. I know. Yeah, you know, I got to use it every day to get my value right. I have no idea. I don’t really look at the usage.

Andy Lapteff • 39:05

I haven’t hit it since I went to Max, but I was hitting it at the tier under.

John Capobianco • 39:09

So, can you scroll up a little bit? It’s telling us something here. We’ve hit a bit of a problem here. I can’t install Node myself, but you can install this. Okay, can you highlight this curl command?

Andy Lapteff • 39:21

Yeah. Do I start with the just after the bang? Yeah.

John Capobianco • 39:25

Right here. Copy that. And then let’s open a new terminal. Just hit plus here, Andy.

Andy Lapteff • 39:31

Does it tell us to put it in a new terminal?

John Capobianco • 39:33

Well, we don’t want to break out of that clawed thing. So now just paste that in and see if that installs node. Things go off the rails, of course, at the very last step, but this is just because node’s not installed in this machine.

Andy Lapteff • 39:43

Right there.

John Capobianco • 39:43

Yeah, and then I would do the same here. Bring this line back. Thanks for your patience, everyone. We’re just spaces, man. It’s just a node install issue. I’ll just press enter. Let’s try that.

John Capobianco • 39:54

Okay, there we go. Awesome. Close your terminal to restart NVM or if use the following. Okay, so go back into the original terminal and scroll all the way to the bottom. Say, can you check for node now? Oh, no. Still no node.

John Capobianco • 40:09

It says enter. Yes, say yes.

Andy Lapteff • 40:10

So it’s doing so much other work for us. Why can’t it install what it needs? It should be able to.

John Capobianco • 40:15

It should be able to. For whatever reason. Press enter there. Okay, see, NVM is installed and working, but no node is downloaded yet. Let me try to finish the node install via N. So press enter, yes. It is trying to work it itself out now.

John Capobianco • 40:28

It’s going to try to install this stuff for us. I appreciate that. I really appreciate that. Especially things like Node packages. I’m not the biggest JavaScript developer. Some of that gets a little bit. It’s going to keep hitting, yes.

John Capobianco • 40:40

Yeah, I would. I can almost smell the tokens burning. Oh, wait, that’s the fire I made. Okay, so now it’s running. Notice what we got up here, Andy? Source files, styles, tests. So, Claude, GitHub, Specify were part of our install.

John Capobianco • 40:55

Specs is part of our spec-driven, but source styles and tests is code. Those are folders that are going to hold code. Once this is done cooking, and I don’t know how long this is going to take, implement is the longest of the phases. Call it 5 min , 6 min . We’ll see. Time for me to use the restroom? Time for you to use the restroom, and we might edit this out and trim it down.

John Capobianco • 41:16

But what’s neat is at the very end of this, we’re going to be able to launch a subnetting video game in a browser. That was the whole point of this outcome. Now, we’ve done this in an hour on the fly. Andy’s literally never done this before. We’re trying, we didn’t prep for this at all. It was like, let’s just do it, man. So, you can do this.

John Capobianco • 41:34

That’s the exciting thing. There is a little foreplay. There is a, you know, you need to devote 45 minutes to an hour of your time, or like, you don’t have to do all these sequentially. Let’s say you do the 1st three steps, then you go have lunch and you come back and you resume the steps after lunch or whatever. There’s a lot of ways to break up the monotony of it. But look at all this stuff we’re getting: testing configs, JSON files, package files, index.html. Styles, source code.

John Capobianco • 42:02

So it just wrote, like it said, it wrote 200 lines of CSS for us. So let’s hit yes here, Andy. And because it installed Node, it’s actually going to test and regression test the code it wrote. So it writes the code, it tests the code, and it gives us a runtime environment to run it in the browser. And you’re looking at two network engineers doing this together. We haven’t launched Python. We haven’t written a single line of code.

John Capobianco • 42:26

Everything has been in Markdown. Markdown is kind of the universal language between humans and LLMs.

Andy Lapteff • 42:32

Thank you for referring to me as a network engineer. The longer I’m in marketing, I don’t know if I lose my network engineer card at some point. So I keep doing this for street cred. You know, I’m trying to do technical things, right?

John Capobianco • 42:43

But it’s funny. Some people have said, like, I’ve turned my back on my networking history and I’m an AI engineer now, right? And it’s like, well, I mean, we all reinvent ourselves, right?

Andy Lapteff • 42:52

So, Scott Roban said it best, it’s all additive. Right. Your networking knowledge is there. Right, right, right, right. Because I like, you know, I’m going to give up on all the networking stuff to learn this coding. Like, no, no, no, no, no, no, it’s all additive. It doesn’t go away.

John Capobianco • 43:05

So we’re in phase two now. Foundational engine test 1st . I’ll write the failing and it does TDD. It’s so neat. I’m going to write failing tests, then fix the code. So SDD actually uses test-driven development. That is neat.

John Capobianco • 43:21

I didn’t realize that. It’s actually writing failed tests and then it’s going to fix the code. See VI test. Yeah, inner. Yes again. Sorry. So we’re actually testing all the code and we’re getting real close here.

John Capobianco • 43:33

We’ve only been cooking for about 3 min . I know it feels like a longer.

Andy Lapteff • 43:36

So the things I’ve built, I don’t think I’ve tested the code. I think if it works, I’m happy.

John Capobianco • 43:40

Right. Or as a vibe coder, you have to say, okay, it looks pretty good. Can you generate a bunch of tests for me now and test the code, right? You can do that through vibe coding. It’s a built-in feature of this. So I’m implementing the engine, and these are tasks 11 through 15. So now, if you expand source here and engine, and just grab a random file, addresses.

John Capobianco • 44:04

So, look at this code we did not have to write. Right. I mean, you’ve lost me on line 12. Right. Like, I’m not a JavaScript programmer. I mean, I could break, I could do this. I can read JavaScript, but the whole point is we did not have to do any of this ourselves.

Andy Lapteff • 44:20

Right, me, bro.

John Capobianco • 44:23

Right? Is this not crazy? Listen, this is all magic to me. And there’s a subnet.js. So it’s actually, and there’s our index, which is awesome, which means we’re getting really close because we got the index.js file. So we’re pretty close here to having a functional MVP of our video game.

Andy Lapteff • 44:41

Eric, do you have an opinion on this stuff? LLMs and using AI to code, and because you’re like hardcore coder guy. I feel bad that you’re sitting here waiting for us. So here, talk into a microphone while we’re vibing.

Eric Chou • 44:53

No, yeah. So I definitely think this is magic to me as well. Like John, I don’t do a lot of JavaScript and I don’t feel like I don’t get stuck now, right, John? I don’t know if you feel the same way, but essentially, you know, whatever it is, if I’m writing a book, writing a chapter, if I’m writing some code, or if I have some ideas to generate some brainstorming, I used to have these writers block or coders block or just procrastination, whatever you want to call it. I just kind of sit behind, and I usually have to just gun through it, right? Like usually, I used to just have to say, sit in front of a blank page for maybe two pomodoros. Or, like, I go get whatever it is, right?

Eric Chou • 45:38

Like, so I have these gaps where I’m not productive, but I know it’s the necessary path toward productivity. But, but nowadays, I don’t, I don’t feel like I get stuck anymore because AI would certainly give you something. It may not be correct, right? It may not be the perfect one, but it will give you something. And from there, you could just say, Oh, you idiot. Like, you know, this feeling is not going to get hurt, but you know, I feel like I don’t get stuck anymore. And that’s the main feeling I’ve had for the last, you know, maybe a year and a half, two years of actively using AI all the time.

Eric Chou • 46:08

So, so yeah, back to you, Mike. So, instead of staring at the blank page,

Andy Lapteff • 46:13

You have something you can iterate on.

John Capobianco • 46:15

I read this quote that said, now after vibe coding, I don’t have four unfinished projects. I’ve got 140 unfinished projects. Right? Okay, so let’s hit okay. I know we’re getting really, really close here. I’ve been trying to keep an eye on it. So you can let’s maximize this, Andy.

John Capobianco • 46:32

We’re all done with the GitHub stuff in the background. And I just want to see. Okay, so let me read the current line numbers. Do you want to scroll up just a little bit? Let’s see what the last bit of text it was saying here is. Let’s go up a little bit more. Subnet test.js.

John Capobianco • 46:45

It’s fixing some things from the tests.

Andy Lapteff • 46:47

How does it know what to test? I guess that’s just stuff that I’d have to go to computer science school for, right?

John Capobianco • 46:52

Like unit testing, regression testing. There’s a couple different things that it’s probably doing for testing.

Andy Lapteff • 46:58

They’re just like testing frameworks that exist and it has to code.

John Capobianco • 47:02

Yeah, it’s using this framework called VI test, which I don’t know much about, but it tends to use VI test quite a bit. So let’s hit proceed. And it can’t test while it’s coding. No, it writes the code and then it regression and then it tests after, right? So let’s press okay. Seven minutes of implement. Like I said, we should be getting close.

John Capobianco • 47:22

It usually takes seven to 10 min of this very last step because it’s doing so much. Yeah. It’s generating all the tests. It’s generating all the code. It’s testing all the code. And it even oh, so the variable length subnet mask wasn’t tested. So it just tested variable length subnet mask.

John Capobianco • 47:36

Kind of cool. So let’s continue. And this is sort of what bothers me a little bit of some of the negative anti-AI stuff. It’s bad code. It’s slop. It’s testing it. It’s testing itself.

John Capobianco • 47:48

It’s writing tests. It’s doing tests. So in the five or six things I’ve created, I haven’t tested any of it. Right. And it was fine, though. Well, it was. But to give you more reassurance, if we wanted to move this to production or if you and I wanted to make the Duolingo for subnetting and make some money on the side, we’d really want to know that the code was tested, right?

Andy Lapteff • 48:06

Now that I see this, I can almost understand the people who know more than I do. Like, this is garbage. But the amount of testing and work that someone, something is doing going through this, I don’t know how you could trash. You can trash me for vibing and not testing anything. Right. I think that’s fair because I don’t know enough yet. But dude, this has been, I mean, it’s testing the hell out of the code.

John Capobianco • 48:30

I know. And it’s actually, it’s still finding little things that it’s fixing. And it says it’s pretty close. It said that there were three outstanding tests that it needed to write. So we’re down to three tests here. And because it’s all in this Git repo, all the tests are available. Right.

John Capobianco • 48:47

So if you don’t trust this thing, you can actually go over all of the code and see what it tested, how it tested it, what the spec was. It’s all here laid bare for everyone who wants to make this game better or try it on their own.

Andy Lapteff • 49:00

You just read my mind. How would we share this? Let’s say this is a useful thing and like, oh, great. I wish I had this like when I was studying. Do you just leave it on the repo and tell people it’s there? Can you publish it to the website?

John Capobianco • 49:11

Yeah, so this little button here. I wouldn’t put it on our website. No, but you’re going to put it on your GitHub.

Andy Lapteff • 49:16

Yeah.

John Capobianco • 49:16

And then, but you got to tell people it’s there. It’s on this GitHub repo. Okay, check this out. It’s on the repo. They’ll have all these files locally. So you can just clone, launch, and play the game. Launch, play.

John Capobianco • 49:25

And you know what we could do, Andy? As a 2nd spec, maybe next time you have some time, I’d like to turn this video game into a web-hosted game on Google Cloud or Amazon Cloud or Azure or whatever.

Andy Lapteff • 49:37

So that you don’t have to clone it as just a moment.

John Capobianco • 49:38

Just move it to the cloud.

Andy Lapteff • 49:39

Well, that’s where I was going with this. We can’t just present a front end to the game. On like our website.

John Capobianco • 49:44

We could. We could. That could be the next thing we Vibecode is great. I know the game works. Now I want to host it on this website. Right. Right.

John Capobianco • 49:51

And let this do it for you. Do you like Google Cloud? Is that your choice? Yeah. Because you can take your Git repo and Google Run will like build your code for you and put it up on the web. I also found it very inexpensive. 7 to 15 cents to host a simple website a day kind of thing.

John Capobianco • 50:09

My bad. It’s not bad.

Andy Lapteff • 50:11

Have you heard of like Fly IO? Like there’s these other services that I think you can deploy things in. Right, right. I have a hard time. There’s a lot of service. Yeah, like which I asked the LLM, like, where should I host this thing? And it’s like, oh, for reasons and Fly IO and it’s a Python data that’s like containerized.

Andy Lapteff • 50:25

So this is, I don’t know. So that’s probably what I’ll do. But I know that people like, I mean, there’s so many clouds you could put it in.

John Capobianco • 50:32

Yeah, I’m just comfortable with the Google, the Google ecosystem. And Google Run was fun. I wanted to try it. I have a chess game hosted up on Google Run. Okay, come on. Let’s finish these tests and let’s give us our game. It’s got to be there.

John Capobianco • 50:45

So Google Run’s the name of the product? Yeah, their cloud product thing. Yeah. Okay, check it out. Engine at 100%. So let’s do yes and don’t ask. But if you scrolled up, I thought it said something about 100% complete.

John Capobianco • 50:58

Engine at 100% coverage. 51 tests. 51 tests are green. Type check clean. Foundation two is complete. Phases one and two are done. I’m going to commit this.

John Capobianco • 51:11

And now we’re on to the last phase. So yes. And again, we included the testing as part of this. We could have skipped all these tests and just jumped right to let me see the game and let me try the game. I didn’t realize it would take this extra couple minutes, but we’re almost there, everyone. All gates are green after formatting. Yes.

John Capobianco • 51:29

Okay. So now it’s going to commit the game. Check it out. So go down. Yes, and commit.

Andy Lapteff • 51:34

Isn’t it funny that we’re apologizing that it took an hour to do like a year’s worth of work?

John Capobianco • 51:38

I know. I know. Right. I know. And that we’ve brought thousands of people who are going to watch this into the new two years before.

Andy Lapteff • 51:46

I’m sorry it took an hour.

John Capobianco • 51:47

I know. I know. I know. So that’s funny. So all the code’s been pushed, and now we’re just waiting for the instructions on how to play the game. Did it make a README? Can we scroll down here on the folders on the side?

John Capobianco • 52:00

Okay, not yet. All right. We may have.

Andy Lapteff • 52:01

How do you know it was pushed?

John Capobianco • 52:02

Is that what this is? Yeah, all the files are gone. So that means they’ve all been pushed up to. Gotcha. I think you maybe need to click that up arrow and that’ll push it up to your GitHub. Yeah, there you go. Yeah, allow Lapper 13 failed to authenticate.

John Capobianco • 52:17

Weird. I got the whole 2FA thing. Is that like a commit to getting this up on GitHub by the end of the session, everyone? So, what is it doing here? It’s accomplishing. All gates green. Now, on to phase three.

John Capobianco • 52:31

So, phase three is the last phase. We’re very close, everyone. Do you want to scroll up a little bit? Let’s just read what it said it’s going to do here. First, I’ll refactor the engines, answer normalization into the shared, and then build generational grading content session and the user interface, the UI. So, okay, if we scroll all the way to the bottom, now it’s the US1 tests written 1st , starting with the generational grading tests. So, a bunch of more testing.

John Capobianco • 52:57

We’re getting really, really close. I’m really excited to see what this video game is going to look like and how it can help people. Okay, engine generation and grading is green. Now let’s do the game layer and the game controller. So we’re really close. I know this is taking 20 minutes instead of 10. I’m good, man.

John Capobianco • 53:17

So honestly, when I’m doing this, I’m like, Ener, go get a coffee. Energy, I’ll tab over to my email. Energy do some doom scrolling or whatever, right? This is not typically how it’s done where you sit and stare at the thing.

Andy Lapteff • 53:29

So I’m thinking of my son, too, when I know that he has less patience than I do at his age. So I’ll probably talk to him and say, hey, what would, you know, do you want to make a game? Yeah. I’ll work on like the spec stuff with him. Like, oh, what do you want to do? What do you think? Blah, blah, blah.

Andy Lapteff • 53:45

And then I can go through this for him. Right. I’ll show him, like, oh, look, a lot of work happened. Right. It was an hour, and I didn’t want you to have to sit here because he doesn’t have that kind of patience right now. Right. But he can see, like, oh, we created something with a tool that did a thing, which is pretty amazing.

Andy Lapteff • 54:02

And if he gets excited, maybe he would want to sit in for 5 min of the process next time. Like, oh, you could do this, buddy, if you’re into this. If you’re not, cool.

John Capobianco • 54:10

Now, the other neat thing that you can do with this, particularly for video games, is tie in the image generation feature like from OpenAI or Gemini or whatever, who can make images, AI images, and tell it to use that tool to generate the assets for the video game. So this video game is going to look pretty plain. Janky, it doesn’t have, but you could use AI to generate the actual assets for the game. So could we have incorporated that into our? Spec. Yeah. So, even or another spec is to say, okay, the base game is great.

John Capobianco • 54:43

Let’s reskin it with OpenAI generated assets or something, right? But like, Quad can’t use its own. I don’t can’t generate images. They’ve really focused on coding, which I think is why they’re doing so well is because they didn’t go as wide, right? Yeah. OpenAI tried to be everything for everyone, and they had Sora and a few other things. I’m still paying for it.

John Capobianco • 55:05

Yeah, it was my 1st . I still have it. I know. I have it too.

Andy Lapteff • 55:08

I think I could probably cancel and still get what I need out of that. Yeah, I sort of bounce like I still use it. I do, too. I do too. But I almost wonder if the free tier would get me by. But I just feel like it was my 1st .

John Capobianco • 55:19

I know.

Andy Lapteff • 55:20

So I feel like, ah, let me, you know, I’m using it. Let me pay it.

John Capobianco • 55:23

It’s kind of like after you get Disney Plus and Amazon Prime that you keep Netflix around, right? Right. Exactly. Why do I have Netflix?

Andy Lapteff • 55:31

I don’t know.

John Capobianco • 55:32

I think my in-laws use it. I’ve always had it. Right, right, right. Okay, now let’s run the full test end-to-end. Wrong test answers submitted. Okay, so it’s still fixing some subnetting.

Andy Lapteff • 55:44

I’m fascinated by the testing aspect. I probably will never understand what’s happening. Because coding is just so out of my wheelhouse. Like, I don’t understand code, let alone what testing is. The more you see it, the more you’re exposed to it, I think it’ll, you know, like, what’s it testing? Is it syntax? Like, again, like, I have questions that can’t be answered simply, right?

Andy Lapteff • 56:06

Right, right. It’s testing a lot of things, Andy. And you don’t know.

John Capobianco • 56:10

All 77 tests are green. Engine 100% overall type and lint. Okay, so I believe the game has been fully tested. Press enter again.

Andy Lapteff • 56:22

But it said all tests were green earlier, like 50-something. So I wonder if it sounds something later.

John Capobianco • 56:26

It’s missed. Generate.js isn’t fully. So it’s looking for some gaps in the test coverage here. Which I’m good with. I know. I’d love to know the game is 100% tested. You know why?

John Capobianco • 56:38

Because that kid who does the subnet game and it tells them the wrong answer, that’s on us. Do you know what I mean? It’s not on the AI. So I love that it’s fully tested. It’s actually testing some answers and testing some scenarios before it just presents as a game that, you know, for education, you’ve got to be right.

Andy Lapteff • 56:57

If you don’t test or if something mrs. , like, is that how bugs get out? Bugs get out.

John Capobianco • 57:02

Memory things crash. Security vulnerabilities. There’s all kinds of stuff that could happen with untested code. Really stringent testing should limit and eliminate those bugs and those gaps. Yeah, exactly.

Andy Lapteff • 57:15

Which is more reliable software.

John Capobianco • 57:16

It’ll break less often, do weird stuff. And also makes this whole approach more adoptable and more like popular because. It’s not like, I don’t know, vibe coding can get it wrong, and it’s not testing. And it’s this is a little more formal, right? And I’ve always thought if it’s good enough for Microsoft, right? Like, if it’s good, if this process is good enough for Microsoft and GitHub, I think it’s good enough for me to make a little subnet video.

Andy Lapteff • 57:43

I was going to ask you why you say that, but it’s because GitHub is they owned.

John Capobianco • 57:47

Yeah, Microsoft’s own get owns GitHub now, but I’m just this testing suite part of Microsoft? Um, more at the Python level or JavaScript level. So, four gaps remaining. You know what we could do, Andy, the next time we get a chance, actually type it in right now. Ask it, am I able just to play the game to test it and see it? Because this testing might go on for another 20 minutes, and I don’t want to keep us all here for that long. I know you’ve had a really long day, and this episode’s building up to a climax, and I want to get there.

John Capobianco • 58:19

And now it should intercept this. I’ll finish the last coverage fixes, then get your game running in a browser. Okay, even if it’s like, okay, I’m getting there. I’m getting there. Don’t rush me, bro. Don’t rush me, bro. Okay, it’s really like going to fix those last couple things.

John Capobianco • 58:35

It didn’t care that I wanted to just play the game. Yeah, press enter one more time. I mean, this isn’t bothering me. You know, it’s funny. Look at the syntax of this command to run. Like, that syntax, just learning how to do that as a testing is like weeks of reading testing books and software. And I understand that and take that, right?

John Capobianco • 58:59

Like, coverage is at 100%. There’s r1 source error to fix too. It’s really obsessed with fixing the test. Like, it really wants to give us a good game here.

Andy Lapteff • 59:09

Hey, let me know if you want me to stop pressing. No, I want you to just press yes.

John Capobianco • 59:13

No, I would be like, yes, yes, yes, yes, yes. So 25 minutes of implement and probably 20 minutes of the three other four, five other phases together. Coming up on probably an hour, right? Is it about an hour we’ve been doing this? Yep. Okay, cool, cool. Engine, it’s 100%.

John Capobianco • 59:29

There’s three linting errors left. Let me fix them. Okay.

Andy Lapteff • 59:34

What’s an engine? Is that what makes the game?

John Capobianco • 59:36

Like the core of the game engine. Yeah, yeah.

Andy Lapteff • 59:38

I don’t know anything about gaming.

John Capobianco • 59:40

I would love to have learned how to write code for video games. You know, when you talk here about like the Unreal Engine and some of these video game studios and stuff.

Andy Lapteff • 59:47

So is that just different languages, different syntax? Were you a gamer? Are you a gamer? Not anymore.

John Capobianco • 59:56

What did you play on? Like my son has an Xbox. He loves it. I’ve got a PS5. I’m waiting for the Wolverine game to come out. That looks pretty good. But you weren’t like a PC gamer, right?

John Capobianco • 01:00:04

Yeah, I used to play World of Warcraft and all that stuff. Yeah. Okay, do the down arrow. Yes. It looks like it wants to launch the game here. Now let me start a local server. So that’s running on my machine, right?

John Capobianco • 01:00:15

Here says what you’ll see. So go to local, click, can you click on that? Actually, open up a new browser and go to localhost 8000 or click on this link here. Drumroll, please. Oh my God, is it going to happen? So you can drag this down. It’s opened up in VS Code as a browser.

John Capobianco • 01:00:30

Subnet trainer, learn IPv force one step at a time. Binary and decimal explains it. Stark practice. Uh-oh. Uh-oh. The two of us being tested. We can stop the recording now.

Andy Lapteff • 01:00:41

1, 8, 16, 32, 64. Oh, my God. I hate math.

John Capobianco • 01:00:47

So the last one, 2, 4, 6, 8.

Andy Lapteff • 01:00:50

Ah, 56.

John Capobianco • 01:00:51

I don’t know. So it would be 64, 32, 32, and 16, and 8 and 1. So it should end in a 9. No? Am I wrong?

Andy Lapteff • 01:01:02

I’m going to say 114.

John Capobianco • 01:01:03

Okay. Correct answer. So it’s telling us not quite, and it explains it all. Next. So now look at a different way. Type the whole number. Okay.

John Capobianco • 01:01:11

We don’t need to show everyone how bad we are at subnetting in our later ages. But is this not cool? We’ve just built a fully functional subnet trainer, free to the community. Anybody can do it. We didn’t write a single line of code. Look at all the artifacts we have. We know it’s fully tested.

John Capobianco • 01:01:30

So let’s go ahead and commit these in here. Click on this.

Andy Lapteff • 01:01:33

What’s cool, John, is I never would have been able to do this.

John Capobianco • 01:01:36

No, me neither. Me neither. I don’t know how I have been able to do this.

Andy Lapteff • 01:01:40

There was a subnet game. It’s on a website somewhere, whatever that subnetting exercises.whatever was that we used to use in CC and A. Yes. And I guess somebody made that without this. Took them forever and it’s there. I’m amazed by this. Like not to minimize, like, oh, okay, it’s over.

Andy Lapteff • 01:01:54

Look, look at this stuff. Like, we just. People could use this to learn subnetting. I know. That’s amazing.

John Capobianco • 01:01:59

I know. And to your earlier point about the hello world, right? It’s not like it’s an exciting message to network engineers or people in general. I’m not trying to minimize learning code. I’m not saying that’s not important, but people have lives. People, some of us are older and we’ve done networking and we’ve been asked to learn programming and take three years of our life to learn a new skill. We can achieve really amazing things now with just our ideas, you know, and our intent.

John Capobianco • 01:02:29

We just explained that we wanted a subnet calculator as a video game, right?

Andy Lapteff • 01:02:33

And I want to clearly state, I don’t think they’re mutually exclusive, meaning, yes, I can do this, but I’m also about to sit in like 16 hours of Python and coding and GitHub stuff in the next couple of days. So it’s not like, oh, one or the other. Right. Now, that being said, I could spend the next three years learning Python and never be able to do this. So it’s both, maybe. Look at all the cool stuff I can do, but I’m a technical person. I’ve struggled with Python and I really want to understand the basics.

Andy Lapteff • 01:03:02

And I don’t. And that’s something I want to do now, or before, like, I had to and didn’t.

John Capobianco • 01:03:06

Right. So it’s both, probably. So let’s just type in a message up here: you know, a working game and then hit commit. We’ll take this offline. Oh, that’s what’s going on. Okay, hit cancel here. All right.

John Capobianco • 01:03:16

So we’ll figure out. So let’s stop the recording. Thank you. But we have to end the show. We got to end our show. We got to end the show. Can’t just die.

John Capobianco • 01:03:24

Let’s just die.

Andy Lapteff • 01:03:26

That’s the Irish goodbye, they call that. I expect more of my Canadian polite friends here that the Irish guys just disappear at a party. So this is awesome. Thank you for walking us through this. At the risk of repeating myself, I am excited to be living through a time that we can do some really amazing things that previously were out of reach for me. I get all the feelings about all the things. So this isn’t us saying, like, this is what you should do and abandon everything else.

Andy Lapteff • 01:03:53

This is just another example of what you can do with this tooling. If you don’t want to, don’t. Right. I think this is amazing. I’m going to work on this with my son. I would like to continue to make cool stuff. And if you want to make cool stuff, this is another way you can do it.

Andy Lapteff • 01:04:08

I love that you showed me the spec-driven development too. I think this is much better than anything I would have vibed. And I am going to default to this. I don’t think an hour, an hour and a half of time to build something that is high quality and rigorously tested is a bad thing. Like, I know. I can give an hour and a half of my life to create better code.

John Capobianco • 01:04:27

And think, and I’m sure you’ve started thinking of internal projects and internal things at your job that this might be able to apply for. There’s so much. And the only other thing I want to mention is that I can’t think of a better starting off point. Like if I was day one in AI, I’ve never done vibe coding. I don’t know what cloud code is. I don’t know what an MCP server is. We didn’t do any MCP servers today.

John Capobianco • 01:04:51

We installed the simple extension for Cloud Code or Copilot or Gemini or whatever. This is universal. We initialized our folder to say you’re a spec folder. And then we ran through the seven steps, right?

Andy Lapteff • 01:05:05

This is so, I feel, I just realized this, and then we’ll end the show. I think the reason I love the LLM stuff, I don’t even know what to call it anymore, AI LLM machine learning, but the reason I love it so much is I feel like there is a teacher with me the whole time explaining things, clarifying. And I don’t get that from a Python textbook. Right. I don’t, I didn’t get that in C at Temple University in Philadelphia. Like it was just, here’s the stuff. Right.

Andy Lapteff • 01:05:31

Learn it. And if you don’t, so I feel like something is holding my hand as I learn. This isn’t me not learning things. This is something going, okay, here, I mean, not necessarily here. This is pretty intense, but I could just go and say, hey, I want to learn Python. Can you help me? Yeah.

Andy Lapteff • 01:05:46

And just talk it out. And there’s three models you can do that with.

John Capobianco • 01:05:49

Like, it’s a teacher at your fingertips. Is that we built a subnet game, e.g. , right? Yeah. You might want to go home and build a learn Python game. Right.

Andy Lapteff • 01:05:57

That’s, well, how do you do that?

John Capobianco • 01:05:59

Right.

Andy Lapteff • 01:05:59

And we’re of an age. This didn’t exist eight months ago. This didn’t exist eight months ago. Eight months ago, let alone when I was 18 or 22 or like trying to learn this.

John Capobianco • 01:06:09

You know, would my story and my next stack overflow and open up a question and someone would close it as a duplicate issue or call me a dummy because I didn’t know that already or shame me, right?

Andy Lapteff • 01:06:20

I am just having an epiphany that when I was in college getting my ass handed to me with calculus and C, I did not have access. I had one college professor that was busy and couldn’t spend endless time with me going at my pace so that I could learn at my pace. Right. This tooling to me is that in a sense. I have a full-time teacher that can walk me through things. So you can learn anything you want. And I love this.

Andy Lapteff • 01:06:48

And I’m very excited. Thank you so much. Hey, no problem. For doing this again with us. I love what you’re doing. I’m sorry people give you a hard time about any of this. I understand why people feel threatened.

Andy Lapteff • 01:06:59

I’m not 100% like, I don’t know what’s coming. And are we all going to be batteries in the matrix? Is there going to be universal stuff? Like, are all the jobs going to go away? I have no idea.

John Capobianco • 01:07:08

You know, history’s been pretty kind to me. I consciously made a career pivot into AI three years ago. Because. Well, because I was because of what it did, how it made me feel, how it made me feel, and the opportunity I think I saw at the time.

Andy Lapteff • 01:07:26

Was there a thing you did that you were like, holy sh, like, whoa.

John Capobianco • 01:07:29

Yeah, that when I sent like show interfaces to an LLM and it just told me these three interfaces are not healthy and I didn’t have to write the Python to do that. That was like your light bulb. Like, wait a minute, something’s happening. Yeah. And what better way to learn than gamify the subject? And we just showed you how to do that, right? So this episode has a lot of layers to it.

John Capobianco • 01:07:50

So take your time and you know us. Reach out to Andy. Reach out to me. He did his 1st one now. I bet you in two weeks, he’ll probably have 10 or 15 of these things going, right?

Andy Lapteff • 01:08:00

It’s up on GitHub. It’s up on GitHub.

John Capobianco • 01:08:03

Pray the game, make the game better. And. Thanks for joining us from Munich.

Andy Lapteff • 01:08:08

Thanks for being here. It’s been a pleasure for all things Art of Net Eng. Check out our Linktree at Linktree forward/Art of NetEnge. Check out our shiny new website at the usual place, artofnetworkengineering.com. There’s a really cool resources section that we’re adding all kinds of cool stuff to, things you can learn. It’s mostly free. There’s communities.

Andy Lapteff • 01:08:26

If there’s anything missing or wrong in there, submit an issue in GitHub. Do a pull. I don’t even know if I’m saying it right. Yes. Do a pull request. That’s right. Send them a PR.

Andy Lapteff • 01:08:35

Yes, send me a PR. Send me an issue. We’ll get it fixed. We can do this together. As always, thank you so much for watching and listening. And we’ll catch you next time on the Art of Network Engineering podcast. Hey, folks, if you like what you heard today, please subscribe to our podcast and your favorite podcatcher.

Andy Lapteff • 01:08:51

You can find us on socials at ArtofnetEng, and you can visit Linktree forward/ArtofnetEng for links to all of our content, including the A1 merch store and our virtual community on Discord called It’s All About the Journey. You can see our pretty faces on our YouTube channel named the Art of Network Engineering. That’s youtube.com forward/art of netenge. Thanks for listening.

Keep Learning

The Latest in Spec-Driven Development

Ready to transform infrastructure with agentic AI?