The last ten years have seen a massive increase in the productivity of software development. New techniques that I call "fast, lean, and global" are allowing startups to build software for one fifth of the cost of ten years ago, and get it to market faster. The same techniques are revolutionizing the delivery of software and online services from bigger companies, and moving into enterprise IT delivery.
At Assembla, we study fast, lean, and global software teams to build better tools for them. We have identified a few key components that are driving the productivity revolution. We also describe a set of practices - basic, intermediate, and advanced - for taking full advantage of these components.
Components
1) Open source and sharing
Free. Open source code, community development. Platforms and API's with sharing, versioning, and contribution strategies. Google searches that get you answers within minutes, not days.
2) Agile and Incremental development
Agile, scrum, kanban, daily builds and continuous integration/improvement, rapid release cycles, lean startups, minimum releasable products, automatic updates.
3) Distributed teams
Strategies for working together, collaborating, and managing. IP capture, management, and delivery. Open-source communities, outsourcers, freelancers, multinationals, on-call admin and support.
4) On-demand Cloud services
Software and servers whenever you want them with no capital investment or setup.
Does it hold together?
The big question that I get is “Why link these components?” Yes, each of them is important. Why not just study them, or teach them, one at a time, as the need arises?
We asked ourselves a similar question when we were building up our cloud development services. We found that we weren’t just pitching “development and management of complex cloud applications.” We were pitching the whole gummy ball of agile, continuous releases, and open source adoption, global on-demand teams, etc. It all got stuck together. We couldn’t pull it apart.
I started thinking that these components really are stuck together. For example, you can’t run a cloud datacenter without open source software. There are too many servers to license, with too much infrastructure tweaking and versioning, to do it without using open source software. And, you can’t build open source software without distributed teams. You can’t make anything that complex work reliably without incremental development and releases. Each is dependent on the other.
Practices
Practices are things that you can learn to do. They help you take advantage of these large-scale components. The “Fast Lean and Global” concept will be helpful if helps people learn useful practices in a straightforward way.
I find myself describing practices as Basic, Intermediate, and Advanced. Let's look, for example, how these three apply to open source:
Basic: “Do research to find and test open source technology.”
Intermediate: “Contribute to open source projects.”
Advanced: “Organize and manage community projects.”
We don’t have a comprehensive list of the key practices in each of the three categories yet; that's where we need help from experts. But, we do have a pretty good idea about some practices that work for us. Here is a sample list:
