A recurring theme in companies that I see all over the world is the huge agile solution.
The trend for continuous refactoring and the modular nature of modern software projects mean that application solutions containing dozens or even hundreds of sub projects are common.
Not so long ago I worked for one company that had eighty-five projects under the same solution and their style of continuous refactoring meant that all eighty-five projects had to be built every time.
Two constants spring from this style of work. Firstly, the time to build a project is not necessarily linearly linked with the number of projects. Inadvertent cyclic dependencies can force compilers to process one project several times. Secondly, the productivity of a software design team will be closely linked to its familiarity with a product. Several agile teams working on the one solution all with a mindset of continuous refactoring will pretty soon mess up any possibility of a stable API if your system contains anything resembling a framework.
A company that supplies developer tools has an obligation to provide backwards compatible APIs to their customers and having been both a provider and consumer of these tools I know that resisting the temptation to refactor a tool provides customer satisfaction when the developers don't need to think too hard when upgrading to the latest and greatest version.
My own philosophy is to split out large solutions into groupings of smaller projects that can be treated as providers and consumers of internally developed and externally sourced tools. Here, the all-too easy style of continuous refactoring that has been made possible by tools such as ReSharper and now what is built into Visual Studio and other tools becomes a choice that is applied in the way most efficient for the project. People working on front-ends and consuming the frameworks can refactor all day long but people wo provide the frameworks must have the mindset of a tools developer and maintain familiarity and compatibility at all costs.
No comments:
Post a Comment