8 ms·
Spec-Driven Development: The Waterfall Strikes Back
- deleted 1y ago[deleted]
- 4ndrewl 1y agoAnd this is absolutely fine, because the problem with waterfall wasn't the detailed spec, it was a) the mulyi-year lead time from starting the spec to getting a finished product b) no (cheap) way to iterate or deliver outside the spec Neither of these are a problem with SDD.
- mytailorisrich 1y agoThe detailed design spec is an issue hence Agile's "working code over comprehensive documentation". Your two points are consequences of this. "Heavy documentation before coding" (article) is essentially a bad practice that Agile identified and proposed a remedy to. Now the article is really about AI-driven development im which the AI agent is a "code monkey" that must be told precisely what to do. I think the interesting thing here will be do find the right balance... IMHO this works best when using LLMs only for small bits at a time instead of trying to specify the whole feature or product.
- 4ndrewl 1y agoIt's often forgotten that the last part of the agile manifesto states that the eg 'comprehensive documentation' _is_ valuable. The key to Agile isn't documentation - it's in the ability to change at speed (perhaps as markets change). Literally "agile". This approach allows for that comprehensive documentation without sacrificing agility.
- mytailorisrich 1y agoThe Agile manifesto states exactly what I wrote. It's not that comprehensive documentation isn't valuable, it's that working software is more valuable. In addition, the big issue is when the comprehensive documentation is written first (as in waterfall) because it delays working software and feedback on how well the design works. Bluntly, this does not work. That's why I think it is best to feed LLMs small chunks of work at a time and to keep the humam dev in the driving see to quickly iterate and experiment, and to be able to easily reason with the AI-generated code (who will do maintenance?) The article seems to miss many of those points. IMHO a good start is to have the LLM prompt be a few lines at most and generate about 100 lines of code so you can read it and understand it quickly, tweak it, use it, repeat. Not even convinced you need to keep a record of the prompt at all.
- skydhash 1y ago> That's why I think it is best to feed LLMs small chunks of work at a time and to keep the humam dev in the driving see to quickly iterate and experiment, and to be able to easily reason with the AI-generated code REPL development and Live programming is similar to that. But when something works, it stays working. Even with the Edit-Compile-Run cycle, you can be very fast if the cycle is short enough (seconds). I see people going all in with LLMs (and wishing for very powerful machines) while ignoring other tools that could give better return on a 5 year old laptop.
- eric-burel 1y agoYeah but can't we expect bureaucratic companies to adopt such a methodology exactly like that: write a spec for years, run the LLM agent every 6 months, blame techs for the bad result, iterate, and also forbid coding outside of the spec.
- yoz-y 1y agoIt seems to me that most people (myself included) never experienced the actual Waterfall elsewhere than in school curriculum descriptions. It's a bit funny to see people describe a spec written in days (hours) and iterations lasting multiple weeks as "waterfall". But these days I've already had people argue that barely stopping to think about a problem before starting to prompt a solution is "too tedious of a process".
- yoz-y 1y agoTo add to this: I've worked on projects that came out of waterfall process, and on projects that came out of too hasty agile iterations. They both have issues but they are very different. A waterfall project would have inscrutable structure and a large amount of "open doors" just in case a need of an extension at some place would materialize. Paradoxically this makes the code difficult to extend and debug because of overdone abstractions. Hasty agile code has too many TODOs with "put this hardcoded value in a parameter". It is usually easier to add small features but when coming to a major design flaw it can be easier to throw everything out. For UI code, AI seems to heavily tend towards the latter.
- wiseowise 1y agoPreparation is waterfall!!! Just code without instructions, bruv!!! Documentation gets out of date quickly!!!
- constantcrying 1y agoI did professional waterfall development and SDD is exactly waterfall. The problem with waterfall was never the time that it took, it is that the spec locks you into a small niche and iterative changes force enormous complexity to keep spec and code consistent. The problems with waterfall come when much of the project is done and then you discover that your spec doesn't quite work, but the changes to your spec require half the requirements to subtly change, so that it can work at all. But then these subtle changes need to be reflected in code everywhere. Do this a couple of times (with LLM and without) and now your code and spec only superficially look like one another.
- laserlight 1y ago> the problem with waterfall wasn't the detailed spec The detailed spec is exactly the problem with the waterfall development. The spec presumes that it is the solution, whereas Agile says “Heck, we don't even understand our problem well, let alone understanding a solution to it.” Beginning with a detailed spec fast with an LLM already puts you into a complex solution space, which is difficult to navigate compared to a simpler solution space. Regardless of the iteration speed, waterfall is the method that puts you into a complex space. Agile is the one you begin with smaller spaces to arrive at a solution.
- wiseowise 1y ago> whereas Agile says “Heck, we don't even understand our problem well, let alone understanding a solution to it.” How can you even develop something if you don’t have a clear idea what you’re building?
- mytailorisrich 1y agoYou have am idea but typically you neither have a complete understanding nor a detailed view of the solution, and of course things tend to chanhe over time. That's the key benefit of starting small and of iterating: it allows you to learn and to improve. You don't learn anything about your problem amd solution by writing a comprehensive design spec upfront.
- wiseowise 1y agoI have an idea to build payments processor, how does that get me any closer to actual payments processing?
- SideburnsOfDoom 1y ago> How can you even develop something if you don’t have a clear idea what you’re building? But, the statement "we don't even understand our problem well" is typically correct. In most cases where new software is started, the problem isn't well-defined, amenable to off-the-shelf solutions. And you will never know as little about the problem as you do on day one. Your knowledge will only grow. It is more useful to acknowledge this reality and develop coping strategies than to persist in denial of it. At the time that the agile manifesto was written, the failure of "big up-front design" was becoming plainly evident. You think that you know the whole spec, and then it meets reality much as the Titanic met an iceberg. Agile does not say "no design, no idea", it points out things that are more valuable than doomed attempts at "100% complete design and all the ideas before implementation". e.g. "while there is value in (comprehensive documentation, following a plan), we value (Working software, Responding to change) more. (see https://agilemanifesto.org/ https://agilemanifesto.org/ ) In other words, start by doing enough design, and then some working software to flush out the flawed thinking in the design. And then iterate with feedback.
- constantcrying 1y agoThe spec is the problem. The delay is just irrelevant. It has nothing to do with it working ot not. >b) no (cheap) way to iterate or deliver outside the spec You could always do this in a waterfall project. Just make whatever changes to the code and ship. The problem is the same for SDD, as soon as you want quick changes you have to abandon the spec. Iterating the spec and the code quickly is impossible for any kind of significant complex project. Either the spec contains sufficient details to make implementation feasible and iteration times become long and the process of any change becomes tedious and complex or the spec is insufficient in describing the complexity of the project, which makes it insufficient to guide an LLM adequately. There is a fundamental contradiction here, which LLMs can not resolve. People like SDD, for a exactly the reason Managers like waterfall.
- smj-edison 1y agoBit of a tangent, but this reminds me of a video[1] I watched a bit ago where there was someone who interviewed 20 or so people who were both engineers and programmers, and asked them what the two fields could learn from each other. One of the things it mentioned from the perspective of a physically-based engineer is that a little more up-front planning can make a big difference, and that's stuck with me ever since. [1] (pretty sure this is the right one): https://youtu.be/CmIGPGPdxTI https://youtu.be/CmIGPGPdxTI
- IanCal 1y agoBut specs are per feature, it’s just an up front discussion first like you’d have on may things rather than questions-> immediate code writing from a model.
- podgorniy 1y agoThis article if for those who already made up their mind that "spec-based-development" isn't for them. I believe (and practice) that spec-based development is one of the future methodologis for developing projects with LLMs. At least it will be one of the niches. Author thinks about specs as waterfalls. I think about them as a context entrypoint for LLMs. Giving enough info about the project (including user stories, tech design requirements, filesystem structure and meaning, core interfaces/models, functions, etc) LLM will be able to build sufficient initial context for the solution to expand it by reading files and grepping text. And the most interesting is that you can make LLM to keep the context/spec/projetc file updated each time LLM updates the project. Viola: now you are in agile again: just keep iterating on the context/spec/project
- RealityVoid 1y agoI had a small embedded project and I did it > 70% using LLM's. This is exactly how I did it. Specs are great for grounding the LLM. Coding with LLM's is going to mean relying more on process since you can't fully trust them. It means writing specs, writing small models to validate, writing tests and a lot of code review to understand what the heck it's doing.
- danielbln 1y agoI would maybe argue that there is a sweet spot of how much you feed in (with some variability depending on task). I tend to keep my initial instructions succinct, then build them up iteratively. Others write small novels of instructions before they start, which personally don't like as much. I don't always know what I don't know, so speccing ahead in great detail can sometimes be detrimental.
- podgorniy 1y agoAgree. I don't use term "spec" as it was with "spec-based development" before llms. There details were required to be defined upfront. With LLMs you can start with vague spec, missing some sections and clarify it with iterations. Sweet spot will be a moving target. LLMs build-in assumptions, ways to expand concepts will be chaning with LLMs development. So best practices will change with change of the LLMs capabilities. The same set of instructions, not too detailed, were so much better handled by sonnet 4 than sonnet 3 in my experience. Sonnet 3.5 was for me a breaking point which showed that context-based llm development is a feasible strategy.
- Davidbrcz 1y agoThat's Event-B (minus the formal side) with LLM
- DeathArrow 1y agoFor myself, I found that having a work methodology similar to spec-driven development is much better than vibe coding. The agent makes less mistakes, it stays on the path and I have less issues to fix. And while at it, I found out that using TDD also helps.
- zvr 1y agoIt's a nice observation that Spec-Driven Development essentially implements the waterfall model. Personally, I tried SDD, consciously trying to like it, but gave up. I find writing specs much harder than writing code, especially when trying to express the finer points of a project. And of course, there is also that personal preference: I like writing code, much more than text. Yes, there are times where I shout "Do What I Mean, not what I say!", but these are mostly learning opportunities.
- IanCal 1y agoI have no idea how to reconcile sdd and waterfall. With SDD you’re working per feature, right? Waterfall is speccing the entire project upfront and with a strong force against any changes as you go before a final delivery.
- discordance 1y agoYou can do SDD in waterfall or Agile. The interaction I’m having with users right now is that the feedback and iterations are happening within hours or days instead of the usual 1-2 week sprint length. In my case SDD is enabling my team to be hyper-agile.
- thomascountz 1y agoI just tried an experiment using Spec-Kit from GitHub to build a CLI tool. Perhaps the scope of the tool doesn't align itself with Spec-Driven Development, but I found the many many hours—tweaking, asking, correcting, analyzing, adapting, refining, reshaping, etc—before getting to see any code challenging. As would be the case with Waterfall today, the lack of iterative end-to-end feedback is foreign and frustrating to me. After Claude finally produced a significant amount of code, and after realizing it hadn't built the right thing, I was back to the drawing board to find out what language in the spec had led it astray. Never mind digging through the code at this point; it would be just as good to start again than to try to onboard myself to the 1000s of lines of code it had built... and I suppose the point is to ignore the code as "implementation detail" anyway. Just to make clear: I love writing code with an LLM, be it for brainstorming, research, or implementation. I often write—and have it output—small markdown notes and plans for it to ground itself. I think I just found this experience with SDD quite heavy-handed and the workflow unwieldy.
- ares623 1y agoI think the problem is you still care about the craft. You need to let go and let the tide take you.
- nrhrjrjrjtntbt 1y agoThe rip tide
- thomascountz 1y agoI respect this take. As I understand it, in SDD, the code is not the source of truth, it's akin to bytecode; an intermediary between the spec and the observable behavior.
- nrhrjrjrjtntbt 1y agoAre we really the guy who stands in front of the Model T waving a flag? Maybe we are?
- jillesvangurp 1y agoA point I like to make in discussions like this is that software and hardware specifications are very different. We think of software as the thing we're building. But it's really just a spec that gets turned into the thing we actually run. It's just that the building process is fully automated. What we do when we create software is creating a specification in source code form. Compared to what an architect does when they create a blueprint for a building, creating blueprints for software source code is not a thing. What in waterfall is considered the design phase is the equivalent of an architect doing sketches, prototypes, and other stuff very early in the project. It's not creating the actual blue print. The building blue print is the equivalent of source code here. It's a complete plan for actually constructing the building down to every nut and bolt. The big difference here is that building construction is not automated, costly, and risky. So architects try to get their blueprint to a level where they can minimize all of that cost and risk. And you only build the bridge once. So iterating is not really a thing either. Software is very different; compiling and deploying is relatively cheap and risk free. And typically fully automated. All the effort and risk is contained in the specification process itself. Which is why iteration works. Architects abandon their sketches and drafts after they've served their purpose. The same is true in waterfall development. The early designs (whiteboard, napking, UML, brainfart on a wiki, etc.) don't matter once the development kicks off. As iterations happen, they fall behind and they just don't matter. Many projects don't have a design phase at all. The fallacy that software is imperfect as an engineering discipline because we are sloppy with our designs doesn't hold up once you realize that essentially all the effort goes into creating hyper detailed specifications, i.e. the source code. Having design specifications for your specifications just isn't a thing. Not for buildings, not for software.
- Arch-TK 1y agoWe could just stop calling it an engineering discipline. You've laid out plenty of reasons why it is nothing like an engineering discipline in most contexts where people write software. Real software engineering does exist. It does so precisely in places where you can't risk trying it and seeing it fail, like control systems for things which could kill someone if they failed. People get offended when you claim most software engineering isn't engineering. I am pretty certain I would quickly get bored if I was actually an engineer. Most real world non-software engineers don't even really get to build anything, they're just there to check designs/implementations for potential future problems. Maybe there are also people in the software world who _do_ want to do real engineering and they are offended because of that. Who knows.
- adam1996TL 1y ago[dead]
- podgorniy 1y agoI could not have said it better. We're on the same page with you. I would add that to my opinion if previously code production/management was a limiting factor in software development, today it's not. The conceptualisation (onthology, methodology) of the framework (spec-centric devlopment) for the system production and maintenance (code, artifacts, running system) becomes a new limiting factor. But it's matter of time we'll figure out 2-3 methodologies (like it happened with the agile's scrum/kanban) which will become a new "baseline". We're at the early stages when new "laws of llm development" (as in "laws of physics") is still being figured out.
- skydhash 1y agoI know enough about Machine Learning and statistics to understand that errors are always there. It just needs to be small enough to not matter in the decisions that need to be taken (hopefully). But the thing is that computers can't differentiate errors from correct behavior. Anything in the code is true and if the result is catastrophic, so be it. As software engineers, it's very often easy to specify what the system should do. But ensuring that it doesn't do what he shouldn't do is the tiresome part of the job. And most tools we created is to ensure the latter.
- malfist 1y agoYour comment has a whole lot of "it's not just X, it's Y" for a human authored comment.
- hereme888 1y agoI think I've seen enough of a trend: all these LLM ideas eventually get absorbed by the LLM provider and integrated. The OSS projects or companies with products eventually become irrelevant. So they're more like 3rd party innovations to lobby LLM providers to integrate functionalities. X prompting method/coding behaviors? Integrated. Media? Integrated. RAG? Integrated. Coding environment? Integrated. Agents? Integrated. Spec-driven development? It's definitely present, perhaps not as formal yet.
- tamimio 1y agoI, for one, welcome the fact that agile/scrum/daily standup/etc. rituals will be outdated. While they might be somehow useful in some software development projects, in the past 10 years it turned out to be a cult of lunatics who want to apply it to any engineering work, not just software, and think any other approach than that will result in bad outcomes and less productivity. Can't wait for the "open office" BS to die next too, literally a boomer mindset that came from government offices back in the day, and they think it's more productive that way.
- LunicLynx 1y agoVery valid. In the beginning all this was driven by developers. Then it was LinkedIn-ified and suddenly we had to deal with agile coaches. Essentially people with no tech qualifications play with developers as guineapigs without understanding the why. Same is true for UX and DevOps, just create a bunch of positions based on some blog post, and congratulate your self on a job well done. Screwing over the developer (engineers) as usual. Even though they actually might be interested in those jobs. This is the main problem with big tech informing industry decisions, they win because they make sure they understand what all of this means. For all other companies this just creates a mess and your mentioned frustration.
- hackingonempty 1y ago> Can't wait for the "open office" BS to die next too, literally a boomer mindset that came from government offices back in the day, and they think it's more productive that way. Open office is the densest and cheapest office layout. That is the reason it exists and the reason it will persist. All other reasons are inferior.
- wiseowise 1y agoNo way, how will I develop without knowing what Bob the farter did yesterday?
- Chance-Device 1y agoThis is a weird article. How many times in your career have you been handed a grossly under-specified feature and had to muddle your way through, asking relevant people along the way and still being told at the end that it’s wrong? This is exactly the same thing but for AIs. The user might think that the AI got it wrong, except the spec was under-specified and it had to make choices to fill in the gaps, just like a human would. It’s all well and good if you don’t actually know what you want and you’re using the AI to explore possibilities, but if you already have a firm idea of what you want, just tell it in detail. Maybe the article is actually about bad specs? It does seem to venture into that territory, but that isn’t the main thrust. Overall I think this is just a part of the cottage industry that’s sprung up around agile, and an argument for that industry to stay relevant in the age of AI coding, without being well supported by anything.
- LunicLynx 1y agoI sometimes wonder how many comments here are driving a pro AI narrative. This very much seems like one of those: The agent here is: Look on HN for AI skeptical posts. Then write a comment that highlights how the human got it wrong. And command your other AI agents to up vote that reply.
- wiseowise 1y agoIt has nothing to do with AI, the article is just plain wrong. You have to be either extremely dumb, extremely inexperienced or only working solo to not understand this.
- nkmnz 1y agoThere’s nothing keeping you from scoping the spec to an agile package of work. To the contrary: even if you start with a full spec for a multi-day-AI-coding-session, you are free to instruct it to follow agile principles. Just ask it to add checkpoints at which you want to be able to let users test a prototype, or where you want to revisit and discuss the plan.
- CraigJPerry 1y ago>> You can see my instructions in the coding session logs such a rare (but valued!) occurrence in these posts. Thanks for sharing
- constantcrying 1y agoMuch of the hype around SDD is really about developers never having experienced a real waterfall project. Of course SDD/Waterfall helps the LLM/Outsourced labor to implement software in a predictable way. Waterfall was always a method to please Managers and in the case of SDD the manager is the user promoting the coding agent. The problem with SDD/Waterfall is not the first part of the project. The problems come when you are deep into the project, your spec is a total mess and the tiniest feature you want to add requires extremely complex manipulation of the spec. The success people are experiencing is the success managers have experienced at the beginning of their software projects. SDD will fail for the same reason Waterfall has failed. The constant increasing of complexity in the project, required to keep code and spec consistent can not be managed by LLM or human.
- perma_junior 1y agoI'm still not convinced there's anything wrong with waterfall for some projects.
- makeitdouble 1y agoIt is/was fine if you were willing to bet on your base specs being near perfect.
- 1718627440 1y agoAs long as you haven't started testing and verification, changing the spec is cheap.
- sgt101 1y agoIf your architecture allows it. If you are working with constrained hardware or users... it isn't.
- 1718627440 1y agoI expected testing and verification to come before the release, so that you don't have any users yet was implied. As for when you have produced hardware, when it's only prototypes, it should still be cheap, hardware also needs multiple revisions, before all bugs are ruled out. When that is not the case, working without a spec won't help either.
- sgt101 1y agoI was thinking more about my experience in corporate settings. Hardware needs to be procured or implemented in the cloud - there's a lot of work on the architectures and costs early in projects so as to ensure that things will cost in. Changing that can invalidate business cases, and also can be very difficult due to architectural and security controls. In terms of users, in corporates the user communities must be identified, trained, sometimes made redundant, sometimes given extra responsibilities. Once you have got this all lined up any changes become very hard because suddenly, like a ripple over a lake when a pebble is dropped in, everyone who's touched has a reason why they are going to miss targets (you are that reason) and therefore want 100% bonus (there is no money for 100% bonus for all). In previous jobs I would have delighted in pointing out that if there are no users the system can't be funded! I agree that working without a spec is madness, it's just not realistic in the real world either. People expect you to stand behind a commitment to deliver, they also want to know what they are paying for. However, things do change, both really (as in something happens and the system must now accomodate it) and also due to discovery (we didn't know, we couldn't have known, but now we know and must accomodate this knowledge). It's really important to factor this in, although perfect flexibility is infinitely expensive and completely unrealistic... A bit of flex can be cheap, easy and a lifesaver though.
- phyzix5761 1y agoReplace the product people with LLMs and keep the engineers. You'll get better results that way.
- koliber 1y agoYou can't code without specifications, period. Specifications can have various forms but in ultimately define how your program should work. The problem with what people call "Waterfall" is that there is an assumption that at some point you have a complete and correct spec and you code off of that. A spec is never complete. Any methodology applied in a way that does not allow you to go back to revise and/or clarify specs will cause trouble. This was possible with waterfall and is more explicitly encouraged with various agile processes. How much it actually happens in practice differs regardless of how you name the methodology that you use.
- IshKebab 1y agoOf course you can code without specifications. Most software projects don't have them these days. In contrast they're still the standard in the hardware design world.
- wiseowise 1y ago> Of course you can code without specifications. Most software projects don't have them these days. And most software projects are complete mess that waste unfathomable amounts of resources. But yeah, you “can” develop like that.
- n0w 1y agoCode is a specification. You cannot have a program unless you specify how it works.
- SideburnsOfDoom 1y agoAnd TTD would say "start with a failing test, it is an executable specification for the code that you will need to make it pass. Then make it pass, then refactor to make nice code that still passes all tests - red, green, refactor under tests"
- IshKebab 1y agoMost code is not a specification in the sense that we're talking about.
- dilyevsky 1y ago> Agile methodologies killed the specification document long ago. Do we really need to bring it back from the dead? it didn't really kill it - it just made the spec massively disjoint, split across hundreds to thousands of randomly filled Jira tickets.
- wiseowise 1y ago> it didn't really kill it - it just made the spec massively disjoint, split across hundreds to thousands of randomly filled Jira tickets. Don’t forget 80% of project knowledge in Jim’s head, and nobody knows how it all connects ever since he left 5 years ago.
- dkubb 1y agoI think that might be the key here. All those small micro decisions, discussions, and dead ends can be recorded and captured by the AI. If you do something that doesn’t make sense given past choices, it can ask you. Gradually, over time, it can gather more and more data that only lives in your brain at the time you’re building. It’s only partially captured by git commits but mostly lost to time. Now, when you change code, the system can say, “Jim wrote that 5 years ago for this reason. Is the reason not valid anymore?”. You might get this on a good code review, but probably not. And definitely not if Jim left 2 years ago.
- dilyevsky 1y agoI'd take a system that automatically updates stale docs over that tbh
- jauntywundrkind 1y agoWhat LLM tools are folks seeing that do the most or the best to integrate specs? Amazon's Kiro is incredibly spec driven. Haven't tried it but interested. Amplifier has a strong document-driven-development loop also built-in. https://github.com/microsoft/amplifier?tab=readme-ov-file#-document-driven-development https://github.com/microsoft/amplifier?tab=readme-ov-file#-d...
- sholain 1y agoDon't really think the thesis is fair. SDD as it's presented is a bit heavy weight, if you experimented with a bit, there is a lighter version that can work. For some mini modules, we keep a single page spec as 'source of truth' instead of the code. It's nice but has it's caveats but they are less of a concern over time.
- rembal 1y agoThank you for writing this. It was also my first impression after seeing not only spec driven dev, but agentic systems that try to mimic human roles and processes 1:1. It feels a bit like putting a saddle on an automobile so that it feels more familiar.
- dwb 1y agoI have similar feelings. I’m willing to believe there are scenarios where this kind of thing makes sense, maybe – a colleague has had great success on a small, predictable greenfield project with it. I don’t work on many of those. My main objections are that I’ve had plenty of success with LLMs without intermediate detailed specs (and I don’t think my failures would have been helped by them), and I just don’t like the idea of primarily reviewing specs. Some sort of plan or research document is a different matter - that’s fine. But the kind of code-like formalised spec thing? I want to look at code, it’s just easier. Plus, I’m going to be reviewing the code too (not doing so is irresponsible in my opinion), so having spec AND code is now double the text to read. The part of the process the actually needs improving, in my experience in larger codebases, is the research phase, not the implementation. With good, even quite terse research, it’s easy to iterate on a good implementation and then probably take over to finish it off. I really think LLMs and their agent systems should be kept in their place as tools, first and foremost. We’re still quite early in their development, and they’re still fundamentally unreliable, that I don’t think we should be re-working over-arching work practices around them.
- ErrantX 1y agoYeh I think you are right and I am also finding larger apps built using SDD steadily get harder to extend. > For large existing codebases, SDD is mostly unusable. I don't really agree with the overall blog post (my view is all of these approaches have value, and we are still to early on to fnd the One True Way) but that point is very true.
- macrolime 1y agoI've found that SDD is actually what you need to be able to work with code bases when they go above around 100 000 lines of code. It's what unlocked getting LLMs to work well with large codebases for me.
- dwb 1y agoI still don't get it, can you clarify? It's not the research phase that I'm disputing. Clearly for a large codebase, you need some good way to take all that information (code, product knowledge) and distill it down to something that can fit in the context, ready for implementation. And it's that research that is going to get harder the bigger the codebase. (My current experience is with a repo around 1.5 million lines.) I'm saying that the output of that research, in my experience, doesn't need to be anything like the detail of an exact spec. It can be a sort of one-to-two-pager Markdown doc, at most – and any further detail is much more ergonomic for me to iterate over in the form of code.
- canterburry 1y agoI vibe coded for months but switched to spec driven development in the last 6 months I'm also old enough to have started my career learning the rational unified process and then progressed through XP, agile, scrum etc My process is I spend 2-3 hours writing a "spec" focusing on acceptance criteria and then by the end of the day I have a working, tested next version of a feature that I push to production. I don't see how using a spec has made me less agile. My iteration takes 8 hours. However, I see tons of useless specs. A spec is not a prompt. It's an actual definition of how to tell if something is behaving as intended or not. People are notoriously bad at thinking about correctness in each scenario which is why vibe coding is so big. People defer thinking about what correct and incorrect actually looks like for a whole wide scope of scenarios and instead choose to discover through trial and error. I get 20x ROI on well defined, comprehensive, end to end acceptance tests that the AI can run. They fix everything from big picture functionality to minor logic errors.
- dakinitribe 1y agoCould I see one of your specs as an example?
- mattmanser 1y agoSeems like you are all just redefining what spec and waterfall means. A spec was from a customer where it would detail every feature. They would be huge, but usually lack enough detail or be ambiguous. They would be signed off by the customer and then you'd deliver to the spec. It would contain months, if not years, worth of work. Then after all this work the end product would not meet the actual customer needs. A day's work is not a spec. It's a ticket's worth of work, which is agile. Agile is an iterative process where you deliver small chunks of work and the customer course corrects as regular intervals. Commonly 3/4 week sprints, made up of many tickets that take hours or days, per course correct. Generally each sprint had a spec, and each ticket had a spec. But it sounds like until now you've just been winging it, with vague definitions per feature. It's very common, especially where the PO or PM are bad at their job. Or the developer is informally acting as PO. Now you're making specs per ticket, you're just now doing what many development teams already do. You're just bizarrely calling it a new process. It's like watching someone point at a bicycle and insist it's a rocketship.
- Alifatisk 1y ago> Coding assistants are intimidating: instead of an IDE full of familiar menus and buttons, developers are left with a simple chat input. How can we ensure that the code is correct with so little guidance? Isn't this was Kiro IDE is about? Spec-driven dev?
- onion2k 1y agoDevelopers spend most of their time reading long Markdown files, hunting for basic mistakes hidden in overly verbose, expert-sounding prose. It’s exhausting. Those requirements exist regardless of whether you write them down in Markdown files or not. Spec-driven Development is just making what needs to be built explicit rather than assuming the whole team know what the code should do. Practically every company already uses 'spec-driven development', just with incredibly vague specs in the form of poorly written Jira tickets. Developers like it because it gives them freedom to be creative in how they interpret what needs to be done, plus they don't need to plan things and their estimates can be total nonsense if they want, and Product Owners and BAs like it because it means they can blame shift to the dev team if something is missed by saying "We thought that was obvious!" Every team should be capturing requirements at a level of detail that means they know how the code should work. That doesn't need to be done up front. You can iterate. Requirements are a thing that grow with a project. All that spec-driven development is doing is pushing teams to actually write them down.
- wiseowise 1y ago> Developers like it Do they?
- dwb 1y agoYou can get away with incredibly vague "specs" in tickets most of the time because of a shared understanding of the system and product – of the kind that an LLM won't have (without very careful and well-organised in-repo documentation). When it works, which in my experience is quite a lot, it's very efficient. Sometimes it fails, sure. Sometimes it's annoying because you actually do need more detail than is provided and have to ask for it in a conversation. In my experience that's a low cost because it happens much less often and isn't too laborious when it does. But crucially, the details here are coming from the issue authors. Do you really think that issue authors are going to be reviewing LLM-generated specs? I don't think so. And so engineers will be the intermediary. If that's going to be me, I would rather mediate between the issue author, some kind of high-level plan, and code. Not the issue author, a high-level plan, code-like specs, and code. There is one extra layer in the latter that I don't see the value of. > Developers like it because it gives them freedom to be creative in how they interpret what needs to be done, plus they don't need to plan things and their estimates can be total nonsense if they want I like it because it moves me closer to the product, the thing actually being built. You seem to be asking to move the clock back to where there was a stricter division of labour. Maybe that's necessary in some industries, but none that I've worked in.
- ReptileMan 1y agoMost software developers are doomed to rediscover time and time again that 4 weeks of frantic developments save two hours of calmly thinking about the task.
- wiseowise 1y agoWorked in a company where they’ve spent 6 months waiting for vendor to implement custom hardware solution instead of just optimizing software to run faster in a month, no joke.
- sgt101 1y agoI just feel that the community has learned nothing. Opinions about "what works" being pushed as fact. No evidence, no attempt to create evidence (because it's hard). Enless commentary and opinion pieces, naive people being coached by believers into doing things that seem to work on specific examples. If you have an example that worked for you it doesn't mean that it's a useful way to work for everyone else in every other situation.
- scuff3d 1y agoYou'll see plenty of the "no true Scotsman" arguments too. Seen it with OOP, "agile", and now LLMs.
- sgt101 1y agoYes - it's not a problem with the technique... it's a problem with you! (or me!) I remember feeling very small and very embarrassed. I remember consultants all puffed up with pride in their intellectual purity. These are patterns we need to move away from in the community.
- _def 1y agoI swear I've never seen the waterfall dissappear. I've never seen agile work out so far. I don't say it can't work. But I haven't seen it yet. What I really want is to be able to do the things I'm good at. Usually that is not what gets assigned to me or is next in line.
- djantje 1y agoDefining the spec is ofcourse also needed in an agile process. The difference is when is this done; In a upfront discussion, while developing, or after user feedback. For LLM we know it needs to be written down. (At least if we want human tracability) And agile ofcourse is a shortend waterfall to get user feedback early on. Giving enough context is important for every case.(humans and llm's alike)
- liampulles 1y agoOne of the biggest productivity improvements I've had as a developer was to make a habit of planning all my work upfront. Specifically, when I pick up a ticket, I break it down into a big bullet point list of TODOs. Doing it this way leads to a better design, to dealing with inter-ticket dependencies upfront, to clarifying the spec upfront (which yes, is part of your job as a senior developer), and most valuable of all it allows me to get into flow state much more regularly when I am programming. Its not a surprise to me that this approach also helps AI coding agents to work more effectively, as in-depth planning is essentially moving the thinking upfront. (I wrote more about this here: https://liampulles.com/jira-tickets.html https://liampulles.com/jira-tickets.html)
- skywhopper 1y agoIt doesn’t seem like you read the article, which argues against this sort of pre-planning.
- liampulles 1y agoThe article itself advocates that one should "split complex requirements into multiple simple ones." So I don't disagree here, at least I don't think I do. If we have a differing interpretation of what the article is motivating for, then please take the opportunity to contemplate an additional perspective and let it enrich your own.
- mr_toad 1y agoThis all seems like a re-hash of the top-down vs bottom-up arguments from before the 90’s (which were never resolved either).
- colechristensen 1y agoThere are two extremes, having everything you do planned up front, and literally planning nothing and just doing stuff. The power of agile is supposed to be "I don't need to figure this out now, I'll figure it out based on experimentation" which doesn't mean nothing at all is planned. If you're not planning a mission to Jupiter, you don't need every step planned out before you start. But in broad strokes it's also good to have a plan. The optimum is to have some recorded shape of the work to come but to give yourself space to change your mind based on your experiences and to plan the work so you can change the plan. The backlash against waterfall is the result of coming up with very detailed plans before you start, having those plans change constantly during the whole project requiring you to throw away large amounts of completed work, and when you find things that need to change, not being able to because management has decided on The Plan (which they will decide something new on later, but you can't change a thing). For some decisions, the best time to plan is up front, for other decisions the best time to design is while you're implementing. There's a balance and these things need to be understood by everybody, but they are generally not.
- exasperaited 1y ago"The rise of specification" OMG really? You think? (Except people will get AI to write it.)
- qudat 1y agoI’ve done spec driven development using a bunch of markdown files. That works fine but what I have found really works is using beads: https://github.com/steveyegge/beads https://github.com/steveyegge/beads I’m letting the agent help me draft the specs anyway and I found that the agent is a lot more focused when it can traverse a task tree using beads. It’s the one spec or planning tool that I find really helps get things done without a bunch of intervention. Another technique I employ is I require each task to be TDD. So every feature has two tasks: write tests that fail, implement feature and don’t notify me until tests complete. Then I ask the agent to tell me how to review the task and require I review every task before moving to the next one. I love this process because the agent tells me exactly what commands to run to review the task. Then I do a code review and ask it questions. Reading agent code is exhausting so I try to make the tasks as discrete and minimal as possible. These are simple techniques that humans employ during development and I find it worked very well. There are also times when I need to write some docs to help me better understand the problem and I usually just dump those in a specs folder. I think spec-kit is an interesting idea but too heavy handed. Just use beads and you’ll see what I mean. Another technique I employed for a fully vibed tool (https://github.com/neurosnap/zmx https://github.com/neurosnap/zmx) is to have the agent get as far as possible in a project and then I completely rewrite it using the agent code purely as a reference.
- skybrian 1y agoThis sounds promising! Could you give us examples of how you give instructions to the coding agent?
- CuriouslyC 1y agoNot sure why Steve re-inveted a VCS for agents, if you just use Github/Gitlab all this stuff is properly tracked and surfaced.
- osigurdson 1y agoAnything that ends with "Driven Development" is a little suspicious to me. It usually means that someone wants to sell books or conference tickets.
- cmrdporcupine 1y ago"Agile methodologies killed the specification document long ago. Do we really need to bring it back from the dead?" Not at FAANG. Or at least not at Google where I was for 10 years. They were obsessed with big upfront PRDs and design docs, and they were key to getting promotion and recognition. These days those kinds of documents -- which were laborious to produce, mostly boilerplate, and a pain to maintain, and often not really read by anybody other than promo committee -- could be produced easily by prompting an LLM. Having drunk the well-spring of XP and agile early in my career, I found it continually frustrating. Actual development followed iterative practices, but not officially.
- luhego 1y agoIn my experience, spending 20–30 minutes writing a good spec results in code that is about 90% close to what I expected, which reduces the back-and-forth with the tool. It also helps me clarify and define with some level of precision what I actually want. During the specification phase, I can iterate until the design proposed by the tool is close to what I envision, reducing the number of surprises when the tool generates code. It’s not perfect, and there are still details the tool misses that require additional prompts, but overall I can get good results in a single session, whereas before I would exhaust the tokens and need to start a new session again.
- osigurdson 1y agoMy best "AI win" so far was in an area where I had to create a number of things that all followed a similar pattern. I created one hand-crafted example and created a general spec and specific ones for each component. It worked really well and I was, for a moment, experiencing a 10-30X productivity boost while having resultant code that I could review quickly and understand. It was also more consistent that I think I would have gotten from hand coding as it is easy to drift a little in terms of style and decisions. Of course, this is all very situational and based on the problem being solved at the time. The risk with "practices" is they are generally not concerned with problem being solved and insist on applying the same template regardless.
- 0xbadcafebee 1y agoAh, another Dunning-kruger-bait post (someone who doesn't know what they're talking about who writes a blog post very confidently, and it's read and upvoted by people who also don't know what they're talking about). Very good. The immediate pooh-poohing of Waterfall is the big tell here. If they don't give you an example of an actual Waterfall project they've worked on, or can't elucidate why it wasn't just that one project or organization that made Waterfall bad, they're likely parroting myths or a single anecdotal experience. And that bad experience was likely based on not understanding it to begin with (Waterfall in particular is the subject of many myths and lies). I've had terrible Agile experiences. Does that make Agile terrible? In my experience, Agile has a tendency to succeed despite itself. Since you don't do planning, you just write one bit at a time. But of course eventually this doesn't work, so you spend more time rearchitecting, rewriting, and fixing things. But hey, look, you made something useful! ....it still isn't making the company any money yet, but it's a thing you can see, so everyone feels better. You can largely do this work by yourself, so you can move fast; until you need something controlled by someone else, at which point you show up at the 11th hour, and dump a demand on their desk that must be finished immediately. Often these recipients have no choice, because the organization needs the thing you're slapping together, and they're "being a blocker". And those recipients then can't accomplish what they need to, because they haven't been given any documentation to know what to do. Bugs, rushed deadlines (or worse, no deadlines), dead-cats-over-the-wall, wasted effort, dysfunction. Is this the only way to do Agile? Of course not. But it's easy for me to paint the entire model this way, based on my experience. There does not exist a project management method which is inherently bad. I repeat: No formal project management method is bad. Methods are simply frameworks by which you organize and execute work. You will not be successful just because you used a framework. You still have to do the organizing and execute the work in a not-terrible-way. You have a lot of wiggle room about how things are done, and that is what determines the outcome. You can do things quickly or slow, skillfully or shoddily, half-assed or competently, individually or collaboratively. It's how you take each step, not which step you take. As long as humans at at the reigns, it doesn't matter what method you use. The same project, with the same method, can either go to shit, or turn out great. The difference between the two is how you use the methods. You have to do the work, and do it well. In organizations, with other humans, that's often very difficult, because it means you depend on something outside of your control. So leadership, skill, and a collaborative, positive culture, are critical to getting things done.
- softwaredoug 1y agoA lot of software process exists to solve a specific problem IMO: Devs get married to their first implementation; Stakeholders don’t tolerate rework If companies and individuals could throw more away, then we wouldn’t need to obsess over planning. The “spec” and “design” would get discovered through doing. I’ve never worked anywhere where a long up front design addressed the important design issues. Those get discovered after you’ve tried to implement a solution a few times and failed. If we say throwing away as a feature rather than a bug, we’d probably work more efficiently.
- qwertylicious 1y agoI mean, yeah? That's why in my workflow I don't write single monster specs. Rather, I work with the LLM to iterate on small, individual, highly constrained specs that provide useful context for what/why/how -- stories, if you will -- that include a small set of critical requirements and related context -- the criteria by which you might "accept" the work -- and then I build up a queue of those "stories" that form a, you might say, backlog of work that I then iterate with the LLM to implement. I then organize that backlog so that I can front-load uncovering unknowns while delivering high-value features first. This isn't rocket science. By far the biggest challenge I experience is compounding error during those iterative cycles creating brittleness, code duplication, and generally bad architecture/design. Finding ways to incorporate key context or other hints in those individual work items is something I'm still sorting out. (and yes, I use en-dashes, and no I'm not an AI)
- romankolpak 1y agoThe scope and complexity of the change is crucial here. There is a sweet spot where spec-driven agent offers great value: the change is small and simple enough that you can describe it reliably with a spec (i.e. you have complete understanding how to do it), while implementing it yourself is a lot more work than writing the said spec plus reviewing and correcting the agent. For me currently this sweet spot is TINY. It's so small that my usage of Claude Code has dropped to almost none. It's simply more practical to let myself have the agency and drive the development, while letting AI jump in and assist when needed.
- adidoit 1y agoI think we're conflating spec-driven development with waterfall because most people's understanding of a spec is an extremely long document often with more bureaucratic components than actually useful information. It's the sort of thing that is done for legal reasons rather than engineering reasons. However short and targeted specifications at the right level of detail and fidelity, can be extremely useful during coding with agents
- ugh123 1y ago>Coding assistants are intimidating: instead of an IDE full of familiar menus and buttons, developers are left with a simple chat input. >How can we ensure that the code is correct with so little guidance? Easy, diff and test the code yourself after each run.
- ineedasername 1y agoIt’s really not difficult to work with the LLM to tweak behavior in eg speckit for higher or lower levels of this behavior. It is setting a baseline of how the LLM should engage with a project which is pretty critical to getting the highest quality output with lower token overhead and API costs. It mirrors the way LLMs are used productively in countless tasks in other industries to structure their output according to needs, be it something like content analysis and summary or tasks that require more structure inherently like data analysis.
- fzaninotto 1y agoHi, author here. I love reading the posts in this thread. It seems the waterfall vs Agile debate is still vivid in the HN community, which surprises me. I know that developers have different experiences with SDD, and there is no one-size-fits-all methodology anyway. It's interesting to read the feedback of people who really like it, especially when they describe their background and the type of project they use it for. In my experience, SDD doesn't bring any value as I'm already using Plan mode before going to implementation. I have also never seen instances of a coding agent doing exactly what I had in mind in the first try (except for very simple cases), so there must be iterations, which defeats the purpose of the Big Design Up Front. Finally, I really think coding agents pave the path for a new way to develop digital products, more productive and closer to the users' expectations. But I doubt that SDD lies anywhere in this path.