You have a choice as to how you develop your Framework.
There are many suggestions, including the
HarvestedFramework
and the
FoundationFramework
approaches to the problem.
I have found that both of these approaches are flawed and in fact one has to always create with QuasiFramework.
QuasiFramework
Build a Framework so that it always "resembles a Framework", always think reuse, always abstract the problem.:
First, understand the majority of requirements
Decide the Frameworks' coverage of those requirements
Divide the coverage into loose iterations
Design for reuse from the start
Begin implementing the Framework
Confirm requirements by creating small sample applications
Refactor if neccesary
Test and Test more
Framework developers must start building the Application [A] outline (not full implementations of anything)
If you hit a problem (bug, too difficult to use, not maintainable etc), STOP.
Repair the Framework
Consider [A] as a prototype
If the Framework meets coverage and expectations, release to application developers
Release with Prototype, samples and plenty documentation
Train the developers, help reduce the learning curve.