Having worked predominantly in small companies and teams I've collected a few wisdoms along the way.
General
- Address your biggest constraint, it's the only one that matters. Repeat
- Solve only problems you actually have
- Mandate quality appropriate to the software at hand
Communication
- Take time to understand stakeholders' expectations and availability
- Establish a regular cadence for stakeholder reviews and other events
- Frequently demonstrate new functionality, even if incomplete. Limit the potential for misunderstanding
- Question things you don't understand, however small
- Avoid email for in-depth discussions. If you must try using stories, tables and mockups to communicate requirements then talk it through over the phone
- Adopt industry standard terminology for your domain
Process
- Reduce process overhead. How often do you use the audit trail you might think you need?
- Prioritise work with a simple familiar system such as a queue. Consider limiting this to a small number of next features. Get enough detail to roughly size the features then analyse them in detail as Just-In-Time as is tolerable
- Adjust your process to suit you
Planning
- Don't start until you understand what "finished" means
- Plan, but don't expect to have thought of everything
- Timebox unpredictable tasks and have a fallback plan
- Work on as-few-a concurrent projects as possible
- Understand your development capacity and be honest about what you can achieve
What advice would you have for someone in a small company or team?