Your application is going to be an enterprise application soon. Prepare for it. There is a certain disdain for enterprise applications in the new world of dynamic languages and frameworks like Ruby/Rails or Python/Django. Mostly this is associated with the world of Java and C#. Developers think they are immune from enterprise woes. Think again.
Enterprise applications are not defined - contrary to public opinion - by applications for the enterprise. What developers associate with enterprise applications like untested code, tangled code, old frameworks and slow development are not something that happens in the enterprise. If you do not act, it happens to every application.
I've seen many applications becoming enterprise applications over time. Top driving forces for applications becoming "enterprise" are:
- A startup with few people becomes a company with many people - Craigslist being the exception
- A growing company with investors gains more goals, which results in more feature wishes. Often this means more developers. If recruitment isn't tough enough this leads to averaging the developer force. This in turn reduces code quality, leads to lower testing, higher coupling and worse documentation.
- More employees lead to more wishes and more features. These features need more real estate on the website. Marketing wants banners, sales wants contact forms and customer support wants info boxes. Pages get cluttered, simple forms get complex.
- Marketing usually wants to store everything about your customers (and others want too). This means more fields, more complex forms and more dependencies to third party services
- Integration with other services is the most common enterprise "problem": Integration with mail services, backends, web tracking companies, financial systems, data warehouses or payment providers tangle your application. Deployment gets harder as does testing. Everything takes longer.
- The first few years a startup has very low turnover. But from my experience as a team manager, retention in our industry is not measured in decades. So as a startup ages, turnover increases: After some years the initial developers are no longer there, and others have not quite the grab of the system. Development, code quality and architecture deteriorates.
- Founders leave: After some years, often founders leave or are ousted by their VCs. Technic savvy founding types are replaced by executives. Technology looks less important, quality goes down.
Law of software development: Greenfield becomes brownfield.
If you do not want this to happen, you need to fight it every step:
- Have migration paths, upgrade paths and life cycle management for frameworks
- Clean code
- Architecture guidelines and architecture strategy
- Someone who fights for clean web pages and forms
- Strategy for integrating with many, many systems
What do you think? How do you prevent applications from becoming "enterprise"?