Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

re: Applications Architecture, that is, "the science and art of ensuring the suite of applications being used by an organization to create the composite application is scalable, reliable, available and manageable."

When looking at a range of applications in an organisation, I can see various reasons for merging apps together, but sometimes also good reasons for keeping them separate.

In general, what are the pros and cons of having fewer big systems versus more smaller systems (bearing in mind that many of the systems will exchange information).

I'm thinking things like: fewer, bigger apps means less plumbing between apps, but more smaller apps means more flexibility for individual departments.

Is there any literature on this, or has anyone got a list of pros and cons that they've discovered?

edit: In my scenario, a lot of the apps might be customisable off-the-shelf ones rather than in-house developed, but feel free to consider more general scenarios.

share|improve this question
1  
Note that bigger apps doesn't means no plumbing, it just means that plumbing will occur within the app. –  deadalnix Sep 21 '11 at 15:54
    
@deadalnix: agreed. I'm kindof assuming that linking data within an app is less effort than linking data between apps. –  codeulike Sep 21 '11 at 15:56

3 Answers 3

Just off the top of my head

Smaller Systems

  • Pro - Scale up on commodity hardware, or cheaper virtualized environments.
  • Pro - Can implement on demand scaling in a Cloud.
  • Pro - Fewer intra-system dependencies, ie. 1 service per server.
  • Pro - HA/DR (High Availability/Disaster Recovery) is typically easier to implement
  • Con - Has to be horizontally scalable
  • Con - The more systems, the more interconnects the more complicated management is

Larger Systems

  • Pro - Fewer interconnects which usually mean it's less complicated
  • Pro - Responds faster to high peak usage if it's within the tolerance.
  • Pro - Fewer resources to manage
  • Pro - More efficient resource usage (assuming relatively constant usage)
  • Con - More complicated intra-system dependencies, ie. N services per server
  • Con - HA/DR is typically harder/more complicated
share|improve this answer
    
Thanks, thats great. How do you see change management fitting in - perhaps local changes are easier with smaller systems, domain-wide changes easier with larger systems? –  codeulike Sep 21 '11 at 16:47
    
Change management can be manual on fewer systems, but can quickly get out of hand on many systems and should be automated. –  dietbuddha Sep 21 '11 at 16:59

In a larger system, it is much easier to:

  • Share features and code. You will reinvent the wheel a little less. For example, if you have ten applications which must have an access to the database, you have to specify the connection string in all of them, i.e. ten times. Or you have to create a separate library and reference it ten times again.

  • Consolidate workflows, including the deployment process.

  • Manage the system: less applications to manage is generally easier.

  • Unify the user experience. When an employee has to deal with ten different applications, he may easily be lost: what application to run to do A? In what application is available the option B? But don't overunify. No one will appreciate Word, PowerPoint, Outlook, Publisher, Visio, Project and Groove as a single monolithic application.

In a bunch of small systems, on the other hand, you'll find that:

  • You can abandon a whole system if you don't need it any longer. Or start from scratch if the codebase becomes unusable over time. This is of course only true if other systems do not rely on this one, or if the interface is light enough to be easily rewritten in a new version.

  • You can form a team of fresh developers and expect from them to understand the existent codebase in less time. If it's a part of a large project, chances are they will require more time, unless the overall large codebase is done extremely professionally and refactored very well (I haven't seen such codebases in my life).

  • The system administrators will be able to relocate the applications easier. The larger system, on the other hand, either scale well on multiple servers, or not.

  • The developers can migrate the codebase to new standards easier. Migrating a large codebase is always scaring. Instead, when you have to deal with a small codebase, then another, then another, and so on, it becomes less scary.

This being said, such comparisons work only in general cases, but your decision must be taken not from pools, but from your company assets. How is it organized? Are there many small developer teams or a few large ones? Are there strict guidelines about coding style and similar things?

It also depends on the application itself. For example, it would be absurd to ship all Microsoft Office applications as a single app. But it would also hurt productivity to, for example, separate Adobe Photoshop in an application for drawing and another one for photos retouching. IMO, the decision to unify or separate a product must be a business decision, not a purely technical one.

Finally, I also want to answer to the second comment of the original question:

I'm kindof assuming that linking data within an app is less effort than linking data between apps

It is not always true. If you're dealing for example with .NET, it is not unusual to ship a single application where different components are exchanging through WCF. In this case, this is comparable to a set of separate applications communicating through WCF.

Of course, when you have to deal with multiple applications, you have to establish some way for them to communicate, whereas having a single monolithic application does not force you to do that. But would you really be able to write a large monolithic application?

share|improve this answer

Read this. It's the "many small programs" philosophy of Unix. Linux uses it, also. The immense endurance of this philosophy (from the late 1960's to today) suggests that it's the right thing to do.

http://en.wikipedia.org/wiki/Unix_philosophy#Eric_Raymond

http://en.wikipedia.org/wiki/Unix_philosophy#Mike_Gancarz:_The_UNIX_Philosophy

http://159.93.17.14/usoft/WWW/LJ/Articles/unixtenets.html

http://www.linuxjournal.com/article/2877

share|improve this answer
    
OK, so that works for a set of components within an operating system, but does it work for a set of database applications within an organisation? Thats quite a different scenario. –  codeulike Sep 21 '11 at 19:16
    
Not a different scenario at all. Can you provide some specific differences? –  S.Lott Sep 21 '11 at 19:24
    
@codeulike: was this your question? "Is there any literature on this," If so, here is literature. I don't get your comment in the context of your question. –  S.Lott Sep 21 '11 at 19:26

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.