How does an agile developer know which frameworks can be used? How does the product team know which open source licenses can be used in their products? In a multi-team environment, who coordinates the architecture to ensure that it is sustainable? These are the questions that I want to examine.
One of the tenets of the agile manifesto states the architecture is best crafted by the product team.
“The best architectures, requirements, and designs emerge from self-organizing teams” – agile manifesto
What are the suitability parameters that aid in the selection process when choosing a supporting framework? Is the longevity of the project sufficient, can the open source license (oss) license model be adhered to? Is the library actually support by an organization or by an individual? These are important questions that should be asked when the product team wants to augment their code with external projects.
Some oversight should be there to make sure that the products and their dependencies are built on a solid foundation. One of the gotchas that is present in most projects are their use of oss. Who is there to monitor licenses that are being used to ensure compliance? I do not see this to be any different than making sure that the appropriate Microsoft licenses are being maintained.
Open source license violations are not monitored like the those of Microsoft’s software. For the majority of the users of oss, their use will go unseen from the community as well as any corporate oversight. This does not mean that it is OK, but without oversight the likelihood of violation is greater.
The manifesto quote above speaks about the architecture spawning from within the product team. This makes sense to me when you look at a team that is chartered to build a single product. Does this statement still hold true when you span across several products and their teams? If they all stay within their boundaries, this statement still makes sense.
Who designs the architecture when the product teams must integrate with each other? That is a question that I have be trying to understand for quite some time. There is nothing that precludes the product teams from building an excellent integration for their products, but how do they match to the long term IT plan?
One of the things that I see and read is how the extreme agile practices are in use at spotify or facebook. These are awesome examples of how teams can quickly iterate over a product to release amazing software very quickly. Can this be applied in a corporate environment where you are building tools to support internal business users? I don’t know the answer, but I believe that you can not do a 1:1 comparison of an internal business application with a social product where there are little or no regulations. Also business applications typically have uptime requirements and other SLAs and a down system sings a much different song.
I believe that product teams should be equipped with the parameters so that they can pick the best fit frameworks to help them deliver awesome software. It makes sense since they are closest to the problem. Open source licensing should still be monitored, because that is just being a good citizen.
Building an infrastructure to support the organizational growth is a different story. I think there needs to be some central body, whether an architect or not, to look at the future of the portfolio and make sure that the products are driving that direction. I would love to hear others opinions on this topic. Cheers