What are some practices for enacting large development projects in an organization with large development and IT units? We have thought of reorganizing the project into smaller modules but couldn't figure out how to do it. How could we make that method work? Are there other approaches?
Software development teams respond to changing business needs while keeping technical debt in check by slicing new features into small chunks and delivering those frequently. It's hard to learn how to break deliverables into appropriately-sized user stories. Similarly, it's hard for organizations to learn how to break a large project up into manageable-sized modules and maintain communication among all the teams working on those different modules.
Slicing and dicing up programs and projects takes a team effort. Stakeholders from all areas of the business, including product management, business development, marketing, sales, operations and customer support, should work together with representatives from the software side, which include developers, testers, business analysts, database experts, system administrators and line managers. Time-boxed brainstorming meetings are one good way to start looking at the business project portfolio and thinking about ways to divide and conquer.
One common way to divide software projects is by platform. For example, I work on a team that develops the application programming interface (API), or "back end," for a software product. Other teams develop the GUI front-end client for the product, while a third team is creating the mobile app. The teams stay in constant communication, coordinating development and testing efforts. Common use of a project tracking tool can help teams working on different platforms stay in sync.
When multiple teams take charge of different areas of a large product, you might need extra roles to help manage communication among the teams. For example, a technical business analyst may help ensure that necessary information is shared among different platform teams. I recommend that each cross-functional development team include professional testers. Multiteam projects may benefit from an additional team to test integrations among the different clients and platforms, as well as integration with external applications in related systems.
Consider the dependencies involved in your company's product. Are you developing embedded software? Is it a SaaS product? It might seem difficult to experiment with different team structures, but it's worth trying one approach for a limited amount of time, evaluating how it works, and restructuring as needed. Once you get the right software development teams in place, let them learn how to work together and don't arbitrarily reorganize them.
This was first published in September 2012