If ExtremeProgramming is growth based, a Seed is a domain-specific starting point for a project. Seeds are an attempt at rescaling XP so that it works on my particular level - a single contractor experienced in a particular domain. I currently have... * not enough time, too many projects. * Deadlines are two - three weeks shorter than they should be. * I am managing a ridiculous number of code bases (7+) * to solve a similar problem over and over again, luckily. I could attempt to leverage my domain knowledge in two different ways: * one code base (a library) * or high quality seed that is designed for growth. Seeds are not libraries. If you are solving the same problem over and over again, a library is the answer. But if you are solving a similar problem over and over again, a Seed may be the answer. Hopefully, a Seed will reduce the startup cost for projects, making it easier to get a project started in the right direction. The Seed must... * be small, the beginning of a project, not a developed end * do the most important things first - if a feature turns out to be less popular than I thought, that feature shouldn't be in the seed * be fully unit tested, so that I can refactor / etc. I will report on the usefulness of this practice... ''Huh? Can you be a bit more concrete about what you mean by a seed, please?'' ---- Some ideas have been tossing around in my head since I was reading GenerativeProgramming by Krzysztof Czarnecki & Ulrich Eisenecker. In this book they talk about active libraries. An active library is essentially a framework which consists of program generators and test code. I have started thinking about building frameworks within frameworks. As you apply refactoring to your code, you will also organize it into various libraries. The libraries are split along domain boundaries. Each new project contributes code to your frameworks. A framework built in this manner will be the seed for your next project. -- BillBurris ---- See also: MichaelFeathers' Stunting a Framework at: http://www.artima.com/forums/flat.jsp?forum=106&thread=8826 ---- The extremely early version which works end to end in spirit, but does little or nothing useful, is a seed. ''You mean a SpikeSolution?'' No. A SpikeSolution is a useful proof-of-concept that you plan on throwing away. A Seed is a starting point that you plan to keep. ---- This seems to be the same conclusion that drove me to write http://www.sf.net/projects/megg (some documentation at http://www.javanicus.com/blog2/items/41-index.html [not much as it is so simple to use :)] ), with the basic drive of doing almost the same thing in each project, and wanting to accelerate that initial coding step. It is using Velocity for code generation of what I guess is a seedwork. (And it even generates its own tests) -- jez ----