协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
code-templating【开发与工程】Turns something built once into a reusable template, generator, or starter — extracting what varies, parameterising it, and keeping it from rotting. Use this whenever the user says they keep writing the same thing, wants a boilerplate, starter, cookiecutter, scaffold generator, or code generator, or is copy-pasting a previous project or module as a s…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
A template is an abstraction over things that do not exist yet, which makes it the easiest kind of abstraction to get wrong. Two costs are usually underestimated: templates rot silently while their generated children live on, and a wrong parameterisation is worse than copy-paste, because everyone inherits it.
The honest bar: three real instances before you templatize. Two examples cannot tell you what varies — with two, every difference looks essential and every similarity looks universal. The third instance is what separates them.
Diff them. Literally, not from memory:
diff -ru project-a/ project-b/ | head -100
Sort every difference into one of three piles:
The second pile is where the value is. Most "differences" between similar projects are drift, and turning drift into a parameter permanently enshrines a mistake.
Done when: every difference is classified, and the accidental ones have a chosen winner.
Every parameter is a question the user must answer and a branch you must maintain. A generator with fifteen prompts is slower than copying a directory.
Reject any parameter that switches architecture. --with-database producing two structurally
different outputs means you have two templates wearing one name, and both will be undertested.
Done when: each parameter is justified by a real difference across your three instances.
The generated output must run, build, and pass its own tests before a human touches it. A template whose output needs three manual fixes is a template nobody trusts, and they will fall back to copying a real project, which at least works.
Include, generated and working:
{{name}}Done when: generate → install → test passes with zero manual edits.
In increasing order of power and cost:
Do not build level 3 when level 1 would do. Most internal "boilerplate problems" are solved by one good example plus a README.
Done when: the mechanism matches the complexity you actually have.
This is the part that gets skipped, and it is why most internal templates are abandoned.
Done when: CI generates and tests the output, and the version is recorded in the output.
Say so plainly in these cases — the alternative is usually better:
That last distinction is the one most worth getting right, and it is decided by a single question: when this code has a bug, should every user get the fix automatically?