the blog for developers

How your application becomes enterprisy

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:

  1. A startup with few people becomes a company with many people – Craigslist being the exception
  2. 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.
  3. 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.
  4. 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
  5. 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.
  6. 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.
  7. 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”?

You can leave a Reply here. Of course, you should follow me on twitter here.

You can share this post!
Do you want to tell others about this article? Use the social bookmark icons to submit this artice to the service of your choice. Thanks.

About the author: Stephan Schmidt is head of development at brands4friends. He has more than 15 years of internet technology experience and 10 years experience in agile. He was head of development, consultant and CTO and is a speaker, author and blog writer. He specializes in organizing and optimizing software development helping companies by increasing productivity with lean software development and agile methodologies. Want to know more? All views are only his own.

25 Tweets

Leave a reply.

Comments

+1

The most important thing you can do

is

Learn To Say No.

http://www.joelonsoftware.com/items/2006/11/21.html

@Michael: Exactly

Interesting re-definition of the idea of enterprise applications.

All apps suffer from code rot and technical debt – learning to keep those things in check is important as you imply here. (see Jeff Atwood’s post at: http://www.codinghorror.com/blog/archives/001230.html – it’s awesome)

Scaling applications up is not a bad thing though – and as long as you follow the guidelines you listed and continue to use your brain – you can avoid being overwhelmed by technical debt – even for a large Enterprise Application.

I can understand though, why the dynamic language community would be a little perturbed by large scale applications – dynamic languages are not the right tool by themselves to compose a large system – though they are perfectly suitable to be a part of the solution. Scaling up means adding complexity (in my view complexity is a function, probably an exponential function of number of features). Current dynamic languages do not provide the structure by themselves to deal with complexity after a certain point. So if a dev thinks just knowing Ruby and Python is going to allow him/her to work on highly sophisticated apps – he/she is going to be extremely disappointed when they try it.

I don’t really agree with this definition. I think the definition of an enterprise app is point 5. When the application needs to integrate with multiple other applications.

In my experience, developers might think all the other points are the hallmarks of an “enterprise” app but I’ve seen all those features in a hokey little website-to-database applications built and maintained by three people, and none or few of them inside large companies with an entire coterie of teams working on a variety of systems.

What is termed here as an “enterprise” system is just poor professional practice. If you strive to craftsmanship then good systems are possible to build in any environment. What the post commends as “fight it every step” I would say, be disciplined enough to show it at every step.

I’m toying with the idea of keeping a “conductor”, in the terms of a symphony conductor, not a train conductor. This person is in charge of a project, period. Basically, there is 1 person driving definition, that has their hooks in everywhere. Their word is the Way It’s Done.

The idea is not without it’s faults. If the conductor is too aggressive, of course, they can drive off talent. And, this better be put in the hands of someone who can and wants to get it all done. But there’s nothing to say the conductor hat can’t move around after a while.

Too many cooks spoil the soup. And once the number of people grows past, say 1, I find that someone starts to take up a dominating position anyway. Might as well try to make it official and respected, rather than just tell people to “you know, here are some specs and goals, go figure it out”.

And it’s a lot easier for 1 person to say no.

@Tristan: “And it’s a lot easier for 1 person to say no.” Thanks, interesting insight. Musing what to take with me from that.

The #2 point here is about recruitment, which is not reflected in the suggestions about how to keep your greenfield green.

Excellent people make excellent teams, and a living application is only as good as the team that supports it. Hire excellent people and many of the goals identified above will follow. The problem is, it is very difficult to locate and hire excellent software engineers. You need a strong process and the discipline to not hire out of desperation.

I agree with Scott McPhee’s comment when he says that #5 above helps to define an “enterprise” application, and is not necessarily a problem to be solved. Large problems often require solutions with many internally complex parts that work together. One of the challenges is to put them together in simple, elegant ways that do not limit your application’s potential.

Finally, I’d say that you shouldn’t “fight” to keep your greenfield green; rather you should tend it like a garden. Good gardeners make a good garden. Good soldiers make a good battlefield.

“You need a strong process and the discipline to not hire out of desperation.”

A very true point.

CCs

This is all needed for enterprise, but not enough by far.

Also add:

- iPhone vs BlackBerry: BlackBerry has a server to manage 1000s of phones, update, delete, reassign, track. So you need “Management tool scalability”.

- Updates, branches, versions, special editions: with a lot of customers some can’t update to your latest version, integrations are broken and so on. “Parallel code branch” is a bad word, but you will have it.

- Process: any larger (>100 people) company will need it. If it’s too light it’s useless, if it’s too heavy the shortcuts will kill it.

- Complexity: there will be no single “go to person” with all your issues. This will lead to silos (can be mitigated somewhat with a good process).

- Regulatory: FDA, FCC & co means “Change management”, from requirements to compliance, complaints and resolution.

- Spotlight: anything you do somebody will hate it and will blog/tweet about. So you will have to have answer for any action or inaction.

Basically expect to have issues you never thought about.

Can your tool handle 15,000 users with administrative rights? Do you track (audit and log) every action? Do you know every single point of failure you have and do you have a solution for that?

Leave a Reply

What people wrote somewhere else:

New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-)

This comment was originally posted on Twitter

RT @codemonkeyism: New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-)

This comment was originally posted on Twitter

RT @codemonkeyism New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-)

This comment was originally posted on Twitter

aka “Life is a fight against entropy” RT @codemonkeyism “How your application becomes enterprisy” http://retwt.me/eYKn

This comment was originally posted on Twitter

“How your application becomes enterprisy,” on why most software starts sucking over time: http://retwt.me/eYKn (via @codemonkeyism)

This comment was originally posted on Twitter

RT @codemonkeyism New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-)

This comment was originally posted on Twitter

RT (#lean #architecture) @codemonkeyism New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn

This comment was originally posted on Twitter

Como luchar contra aplicaciones que se gigantizan: http://bit.ly/3Zr00v

This comment was originally posted on Twitter

“How your application becomes enterprisy,” on why most software starts sucking over time: http://retwt.me/eYKn (via @timmolendijk)

This comment was originally posted on Twitter

New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-) (via @codemonkeyism)

This comment was originally posted on Twitter

RT @codemonkeyism: New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn #yam

This comment was originally posted on Twitter

New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-) (via @codemonkeyism) – Totally agree!

This comment was originally posted on Twitter

RT @dnene: RT @codemonkeyism New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-)

This comment was originally posted on Twitter

RT @codemonkeyism Code Monkeyism: How your application becomes enterprisy http://retwt.me/eYKn (too damn true. sadly)

This comment was originally posted on Twitter

RT @codemonkeyism New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-)

This comment was originally posted on Twitter

RT @codemonkeyism: New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn

This comment was originally posted on Twitter

Code Monkeyism: How your application becomes enterprisy #programming http://bit.ly/J9Yxr

This comment was originally posted on Twitter

RT @talios: New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-) (via @codemonkeyism)

This comment was originally posted on Twitter

RT @codemonkeyism Code Monkeyism: How your application becomes enterprisy http://retwt.me/eYKn

This comment was originally posted on Twitter

having a flashback while reading @codemonkeyism: “How your application becomes enterprisy” http://bit.ly/orBfa

This comment was originally posted on Twitter

RT @codemonkeyism:New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-)

This comment was originally posted on Twitter

Shared: How your application becomes enterprisy http://bit.ly/4iuqeo

This comment was originally posted on Twitter

How your application becomes enterprisy http://bit.ly/3Zr00v

This comment was originally posted on Twitter

RT @codemonkeyism: New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-)

This comment was originally posted on Twitter

RT @codemonkeyism: New blog post: “How your application becomes enterprisy” http://retwt.me/eYKn – Please retweet :-)

This comment was originally posted on Twitter

Additional comments powered by BackType