As I look at the practices that Assembla has been most successful with over the past several years, I think that there is a new framework emerging for building and managing software development teams that are both nimble and "flexibly sourced". While I'd posit that Assembla has been a thought (and practice) leader in this, there are at least a few other companies working in similar ways. I haven't seen an attempt at codifying these practices in a way that would make them useful to others that are struggling with how to evolve their software development capabilities to better fit current needs, and think that this may be a good time to do so.
One of the core success factors that we've developed is what I've been calling "mercenary development." In its pure form, mercenary development focuses on building an outside team of best-fit, best-of-breed individuals to achieve a specific objective, often a complex, continuously evolving web-facing software product.
Specifically, we see mercenary development as embodying an approach that is tailor-made for product development efforts that are characterized by a need to deliver software quickly, reliably, and cost-effectively despite a lack of deeply developed requirements, by a need to evolve and improve the product throughout the lifecycle, and by a need to handle a dynamic team structure. Mercenary development blends and extends a selection of existing best practices from three important areas:
1) The open source software development movement
- pulling together an effective team from a globally distributed talent base. Each team member can be in a different place.
- flat reporting structures
- providing continuity over a shifting set of participants throughout the lifecycle
2) flexible talent outsourcing
- techniques for finding and hiring people you'll never meet
- techniques for effectively integrating these people into a true team at a fine level of granularity of interaction, composed of best-of-breed individuals and small specialized teams for specific tasks such as design.
- focus on continuity over full lifecycle (rapid ramp-up of new staff, full visibility)
3) Agile software development methodologies
- a subset of techniques from agile methodologies that work particularly well for distributed teams and loosely defined requirements
and contributes several new techniques as well.
In addition to a focus on building teams that seamlessly blend existing internal resources with best of breed talent from wherever it exists in the world to best address a challenging need, mercenary development practices must also provide a framework for supporting and managing those teams with a set of tools and practices that is optimized for success in the contexts described above.
We plan to dive a bit deeper into several aspects of this in future blog posts. In particular, we'll look at specific techniques you can implement to help you implement mercenary development, e.g., how do I find, evaluate, and retain the talent I need, and how do I get a diverse team of individuals to work together as effectively as they could if they were in adjacent cubicles?.
One thing I'm particularly interested in today is how closely the description above matches your own practices. Assembla has been working in this way for over 5 years, and we're happy to share what we've learned. If you have tried to incorporate techniques to bring some of these into your own approach, what has worked, what hasn't? Are there best practices that you'd like to share?
Jon Stillman, PhD, is an Assembla director and cofounder with 15 years of experience leading software, research, and startup projects at GE and Divine. He currently works with High Peaks Ventures.