Don't waste time on specs: /prototype instead — Transcript
Full transcript
- 0:00There's something that a lot of people
- 0:01do when they're working with AI to
- 0:02create code that totally drives me
- 0:05crazy. And it's sort of something that
- 0:08I've been railing against for a while
- 0:10now. The thing that I've noticed is
- 0:12people tend to think I need to create a
- 0:14spec for AI. I need to create a plan,
- 0:17right? Plan mode, spec-driven
- 0:19development. I need to put all of my
- 0:21efforts into making this extremely
- 0:23detailed spec so that when I get some
- 0:25outputs from the AI, those outputs are
- 0:27going to look like the spec. I'm going
- 0:29to have specified everything up front so
- 0:31that I can just perfectly nail it. And
- 0:33in this impulse, what they forget to do
- 0:35is they forget they can actually write
- 0:37code. You can write code while you're
- 0:40working towards a spec. Prototyping and
- 0:43spikes are things that we've had around
- 0:45since the days of Agile, right? I mean,
- 0:47I suppose these are still the days of
- 0:49Agile. Agile is still extremely popular,
- 0:51still extremely influential. But people
- 0:53just aren't prototyping anymore. And so,
- 0:55as part of my skills repo, I'm trying to
- 0:57turn this around. I have a prototype
- 0:59skill. A prototype is throwaway code
- 1:02that answers a question. Everyone is
- 1:04saying that code is cheap, and it's
- 1:05partially true and partially I hate that
- 1:07phrase. But the thing that is cheap is
- 1:10the cost of producing code has gone way,
- 1:12way down. So, producing prototypes,
- 1:14producing quick kind of throwaway spikes
- 1:17has never been cheaper and never been a
- 1:19more effective tool. In this video, I'm
- 1:21going to introduce this prototype skill.
- 1:23I'm going to talk about when you should
- 1:24use it, what it can be used for, and
- 1:26also how it fits into my new wayfinder
- 1:29skill. But first, to explain the concept
- 1:31of fidelity, high fidelity and low
- 1:34fidelity. Whenever you're talking about
- 1:35designing something, you're going to
- 1:37have questions in your mind that need to
- 1:39be resolved somehow. Some of the
- 1:41questions are going to be really basic,
- 1:43like the basic frame of the thing you're
- 1:45building. When the modal opens up, it
- 1:47should have a cancel button and a
- 1:49confirm button, simple stuff. With
- 1:51simple stuff like that, you don't need a
- 1:52lot of high fidelity stuff to answer the
- 1:55question. That can just be resolved in
- 1:56discussion, really. But let's say that
- 1:58the modal, when it opens up, under some
- 2:00circumstances it needs to show some
- 2:02data, you might need to go a little bit
- 2:04of higher fidelity on that. How would
- 2:06you display the data? It's often hard
- 2:08when you're planning out a spec to
- 2:09figure out exactly how things should
- 2:11look, and how things should look, how
- 2:13they should behave under certain
- 2:15circumstances, making sure that you've
- 2:17road tested all of this idea in kind of
- 2:20semi working code, that means you need a
- 2:22higher fidelity. Some questions really
- 2:25can only be answered by prototyping. And
- 2:28because producing these prototypes is
- 2:30now cheaper than it ever has been
- 2:32before, I tend to want more of my
- 2:35discussions at a higher fidelity.
- 2:37Obviously, the basic stuff I'm going to
- 2:38just resolve through discussion. So, the
- 2:40agent is going to ask me some questions,
- 2:42probably through a grilling session, and
- 2:44then I'm going to say, "Okay, yeah, this
- 2:45sounds good." But then, as soon as we
- 2:47get anything that I think, "Oh, I really
- 2:49need to see this in action. I need to
- 2:51feel it in action, look at it working."
- 2:53I'm going to ask for a prototype.
- 2:55Prototyping is a part of my new
- 2:57Wayfinder skill, which is a skill that
- 2:59allows you to plan a huge chunk of work.
- 3:01There's a future video coming on
- 3:02Wayfinder. Now, Wayfinder, what it does
- 3:05is it tackles a huge chunk of work, and
- 3:07it splits it up into different planning
- 3:10sessions. And all of these planning
- 3:11sessions get their own ticket, and there
- 3:13should be somewhere in here ticket
- 3:15types, just here, that tells it exactly
- 3:19what different ticket types there are.
- 3:20The two that we're looking at here are
- 3:22the grilling type, so it's using the
- 3:25grilling skills, and the prototype
- 3:28ticket type. The default case here is
- 3:30the grilling type, so where you're
- 3:31chatting with the agent, figuring out
- 3:33the basic scope of the thing you're
- 3:34building. But when you need to raise the
- 3:37fidelity of the discussion, making a
- 3:38cheap, rough, concrete artifact to react
- 3:40to, an outline, a rough take a stab at
- 3:42UI logic code via the prototype skill,
- 3:44links the prototype as an asset, use
- 3:46when how should it look or how should it
- 3:48behave is is key question. Whether
- 3:51you're using Wayfinder not, this gives
- 3:53you a really clear criteria for when you
- 3:55should reach for a prototype. So, I'm
- 3:57sure you're dying to see it in action,
- 3:59and here it is. This is what it's done.
- 4:01I've been using Wayfinder to extend my
- 4:03diagramming app here, which is built on
- 4:05TLDraw. And I wanted a way to search
- 4:07through old diagrams, and the data model
- 4:10here is quite complicated. There's like
- 4:12diagrams and then snapshots of the
- 4:14diagram through time. And so, I wanted
- 4:16to build a search bar, but I wasn't sure
- 4:18how it should look or behave. So, I ran
- 4:20prototype here, and what it did is it
- 4:22created this little uh
- 4:25picker at the bottom here. And this
- 4:26picker, if I go between it, it has three
- 4:29different options. So, that's option B,
- 4:31and that's option C. And each one
- 4:34encodes a few design decisions that I
- 4:36can then react to and iterate on. So,
- 4:38let's start by looking at A. I've just
- 4:40generated this. I've not actually looked
- 4:41at it yet. So, I get to search the
- 4:43diagrams and see what comes up. And this
- 4:46one, okay, it's reflow in place grouped
- 4:49rows. So, it's grouping the snapshots by
- 4:51the name of the diagram. I really like
- 4:54the placing of the search box up here,
- 4:56but this grouping doesn't feel right to
- 4:59me. So, let's see what B is. Let's
- 5:01search again inside model here, and
- 5:04okay, now on the left, we have grouping
- 5:07for where it can filter down. Okay,
- 5:09that's quite nice. What happens if I
- 5:12search for something else and it's
- 5:14already Okay, so the filter resets at
- 5:16that point. Now, that's okay, but I
- 5:18wonder what C looks like. I really don't
- 5:20like this search diagrams thing at the
- 5:22top. That doesn't look nice, but let's
- 5:24see what this looks like. So, let's
- 5:25search for model, and ooh, okay, so now
- 5:27it's everything in line, no filters. So,
- 5:30I do actually really like this, but
- 5:31there are a few things that I don't
- 5:33like. I don't like these current things.
- 5:35It looks like this is really technical
- 5:37weird thing, but the the current one is
- 5:41showing with the diagram snapshot. So,
- 5:42I've got some kind of feedback that I I
- 5:45to give to the prototype. This
- 5:46prototyping session took about 100,000
- 5:50tokens. So, I'm actually going to
- 5:51compact and say, "We're going to do some
- 5:53more QA on this." Compacting at this
- 5:55point makes sense to me because we kind
- 5:57of need to retain all of the information
- 6:00about the prototype, need to retain all
- 6:01of the design decisions that went into
- 6:03it, but we just need to give it some
- 6:04feedback. So, we just need to continue
- 6:06the conversation in the same place in
- 6:08the codebase. I should definitely do a
- 6:09video about the design tree that I use
- 6:11for when I've got compact versus clear
- 6:13versus handoff, but, you know, that's
- 6:15one for another time. Okay, now I'm
- 6:16going to give some feedback. I really
- 6:18like the search box of A and I like the
- 6:21layout of C. Okay, so I've just dictated
- 6:23in some more feedback and I'm going to
- 6:25send it off. So, the idea of this
- 6:27session is that I'm iterating on this
- 6:29prototype. I'm not just saying, "Okay,
- 6:31this is the best one." I'm going to
- 6:32actually create some design decisions
- 6:34here, create a super rich asset. All of
- 6:36these design decisions are then going to
- 6:38be encoded into the prototype and I'm
- 6:40going to save the prototype probably on
- 6:42a throwaway branch. That means that when
- 6:45the thing actually goes to implement it,
- 6:47it's not only got a spec, it's actually
- 6:48got real front-end code that it can
- 6:50usually copy and paste out of it. Now,
- 6:52creating these prototypes does take some
- 6:54time, right? The higher fidelity you go,
- 6:57the more token cost there is. If we were
- 6:59to try to resolve this in a discussion,
- 7:01we'd be at a lower fidelity, so the
- 7:03answers would be less useful, but we'd
- 7:05also be spending fewer tokens. And we
- 7:07can see it's now starting to give me a D
- 7:09version here, which is kind of what I've
- 7:11been iterating towards. One note here is
- 7:13that this is actually
- 7:15integrated with the live page. So, it's
- 7:18not doing this on a throwaway route. You
- 7:21can do that if you want to, but I really
- 7:23like seeing it actually plugged into the
- 7:26live route because then it just gives
- 7:28you so much more flexibility. It it like
- 7:30it's a more honest representation of how
- 7:32the code is actually going to work. All
- 7:33right, looks like it is now created D,
- 7:36so let's see what that looks like. Yes,
- 7:38we have the box from A and if we search
- 7:41in here with model, then we can see that
- 7:43everything I asked for actually got
- 7:46done. Before we had a duplicate of this
- 7:48one, but now there's only one. And in
- 7:51theory, if I click this, I'm not sure if
- 7:52this will actually work. I don't know
- 7:53whether this is part of the prototype.
- 7:55Yes, it works. Oh, beautiful. So, there
- 7:57we go. Loads of this functionality looks
- 7:59like it is now just done. And so, you
- 8:01might ask, what is the next step after
- 8:03this? Well, now I consider the prototype
- 8:06to be complete. That was a pretty quick
- 8:07one. Usually, I'm kind of in here doing
- 8:09a lot more. Um I would pass this off to
- 8:12an AFK agent to plug in everything,
- 8:14delete the old prototype code, and just
- 8:16make sure that it was uh compliant with
- 8:19the original spec. And as you can
- 8:20imagine, the results here are incredible
- 8:23because we've had such high fidelity
- 8:25discussion, because we've been able to
- 8:28look at a live running version of it,
- 8:30give our feedback based on that. That
- 8:33feedback is so invaluable, and it's
- 8:35already baked into a throwaway branch
- 8:37that our implementer can actually just
- 8:39go and reference. So many times I see
- 8:42people saying, well, the thing didn't
- 8:43build what I wanted. I created this big,
- 8:45beautiful spec, and it just did
- 8:47something totally weird. You probably
- 8:49just weren't having discussions at a
- 8:51high enough fidelity, and you probably
- 8:53should have been prototyping. Finally, I
- 8:54don't want you to walk away thinking
- 8:55this is only for UI or front-end stuff.
- 8:58Front-end definitely benefits a lot from
- 9:00prototypes because how should it look,
- 9:02what should it look like is a really key
- 9:05question that's really hard to answer
- 9:08during the discussion phase. However,
- 9:10when you're doing more complicated
- 9:11stuff, especially back-end work, then a
- 9:13question like, does this logic, does
- 9:15this state model feel right? If you're
- 9:17building anything reasonably complex or
- 9:19that needs to work in the real world,
- 9:21then you're going to run into these
- 9:23questions all the time. And often, the
- 9:25best way to get around these kind of
- 9:26questions to build something that kind
- 9:29of serves the needs of your users,
- 9:31especially on something complex, is to
- 9:33build a prototype. Now, it doesn't need
- 9:36to be a UI prototype. And what I've got
- 9:38here is build a tiny interactive
- 9:40terminal app that pushes the state
- 9:42machine through cases that are hard to
- 9:44reason about on paper. In other words, a
- 9:46pure logic prototype. And I've had tons
- 9:50of feedback from folks saying that this
- 9:51is such a nice little feature. Both of
- 9:53these branches have their own reference
- 9:55docs here, which tell it exactly how to
- 9:58do each one. So, if it's building a
- 9:59logic prototype, it looks here. If it's
- 10:01building a UI prototype, it looks like
- 10:03this. So, I beg of you, have your
- 10:05discussions at a higher fidelity. As
- 10:08agents get better at working with
- 10:09canvases, working with design tools, I'm
- 10:11sure that wireframes will definitely
- 10:12make a comeback as well. And the key
- 10:14point is this, the leap from discussion
- 10:16and spec to production-ready code is
- 10:19really big. Whereas, if you have a
- 10:21working prototype, turning that into
- 10:22production is pretty simple. I want to
- 10:25give a quick shout-out to Shape Up by
- 10:27Ryan Singer, which is an extremely good
- 10:29book and very, very influential on me. I
- 10:32read this, I think, in 2019 or
- 10:35something, and it totally changed the
- 10:36way that I built applications for
- 10:38people. It is totally free online, and I
- 10:40will drop a link in the description. If
- 10:41you want to keep up-to-date with my
- 10:42skills, then my skills newsletter is the
- 10:45place to be. I'm shipping, shipping,
- 10:47shipping, constantly thinking about
- 10:48these skills, how I can make them
- 10:49better, and you can benefit from that
- 10:51the day that I make the changes. But
- 10:53folks, thank you so much for watching.
- 10:54It's been a pleasure, as always,
- 10:55bringing you one of my skills, and I
- 10:57will see you very soon.
About this transcript
This page contains the full transcript of Don't waste time on specs: /prototype instead by Matt Pocock, generated from the public captions YouTube serves with the video. The transcript has 2,258 words across 319 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.