Plan how you will work
Plan your infrastructure first
In order for your team to be successful you will need to have some processes running smoothly. Builds, setup, automated testing, bug reporting and status are vital to the success of your project.
Plan out how you will achieve all the work goals. Set up prototypes and get the system running before you work on real product code. A product that has a shell of setup and a completely automated system that builds, installs, tests and reports has a strong leg up on competition that leaves these things till later in the cycle.
Setup in particular is not an end game feature! Setup is the first impression your customer gets of the product. Every feature needs a way to get shipped and installed. Plan how this will work up front and make sure the system is functional before you start on feature coding.
Plan to have the development team help with the tools and processes. They are really good at these tasks. Leaving them out is asking for trouble. If test “owns” setup you can bet they will work their butts off to make it fly, but they will be fighting development all the way down the road. Make sure the entire team owns the technologies and processes you use to ship your products. Plan it into your release. It really makes a big difference in the end game.
Architect your product
Before the features are designed your product should have an overall plan. How the components fit together, where the abstractions points are and the construction phases are all critical. You should have a plan to achieve your pillars. If you want the most feature rich product in the world, you better plan (and execute on) to have a solid platform for all the features to plug into.
You might build a house around really killer windows the point at a great view. That’s fine, but you still have to have a foundation. Those awesome windows won’t do you much good on a mud hut you built at the last minute because you spend all your time making the windows.
Plan to make your product loosely coupled at all code levels. Plan to make your product testable. Plan to make your product maintainable. Plan for every pillar you can think of. Write the plan down and give it to the team. Go through all the pillars and carefully plan how you will achieve (or ignore) each one that applies to your product.
This kind of planning is something that needs to be vetted by senior programmers. Business managers can tell you what to build, but get the engineers involved in the how. Make sure everyone is on the same page and agrees it can be done before you start. Otherwise you will live out a Dilbert cartoon.
Don’t “rat hole” on the features
We typically spend an enormous amount of time planning our features to the nth degree. This is a big waste of time. Plan to iterate on your features. If you have a strong vision and planned your work well, then iterating on features will be cost effective.
When features aren’t coming together we often make the mistake of thinking we didn’t plan them well enough. The truth is that more often the failure to plan was at a different level. An experienced feature crew can plan and execute on a feature at warp speed if the pillars and infrastructure are solid.