We’re preparing to release the source code to the latest Power Toys for Visual Studio and the question has come up a few times. What makes for successful source code releases? Specifically… what makes for successful releases if you’d like to encourage community driven development rather than simply tossing code over the wall?
Personally I’m not a believer that simply throwing the code over the wall is good enough. I’ll give you the list of things I think are important. I’d love to get your feedback on missing items and the priority of the items.
Parachutes that come with the code
- Well formed code: Code that’s easy to understand, jump in, and contribute to. Code that’s self explanatory and follows coherent coding guidelines.
- Unit tests: I’d love to know, if I’m contributing, that I’m not breaking anything.
- Scenario tests: Beyond basic unit tests these tests would validate end to end scenarios with the code.
- Design documents: These are dev focused documents that aim to teach people about the code in a way that code comments can’t.
- Code comments: Well commented code is still a requirement. Even with good design documents.
- Test Spec: Think of this as a design document for the testing. It explains all the concerns about the code, what tests are the highest priority, how to run the tests, any manual verification that can be performed, etc.
- Documentation: This is sort of a requirement for any release. : - )
- Vision document: What’s the vision of the application? What features may have been requested, but not completed that are in-line with that vision? What’s easy to accomplish and what’s harder?
Intangibles that can’t come with code
- A good project leader: Someone to spend 10-20% of their time organizing the contributions of others, setting a schedule, etc. (Time estimate based on small isolated projects like the Power Toys)
- Experts: People that know the code well enough to help onboard new contributors, answer design questions in a timely fasion, etc. Expect to spend around 10-20% of someone’s time in this role.
- Popularity: Releases with little or no potential consumers won’t attract experts.
- Completeness: If a solution is tightly scoped and fairly complete there really isn’t going to be much of a need for community driven development. There probably aren’t many popular releases that fall into this category, but sometimes there’s just no place to go.
What’s missing? So far I think we're ahead of where we were with the VS 2003 Power Toy source releases. Is there anything more specific that should be listed? What about wiki’s/forums/blogs? What’s the best bug/feedback model?