Java Champion / JavaOne Rockstar Adam Bien ( is a self-employed consultant, lecturer, software architect, developer, and author in the enterprise Java sector. He is also the author of several books and articles on Java and Java EE technology, as well as distributed Java programming. adam has posted 59 posts at DZone. View Full User Profile

First Indicators of an Over-Engineered Project

  • submit to reddit

The problem with patterns, best practices, and idioms is the overuse of a single principle. Regardless of what you are considering, overuse of DRY can lead to "fat" layers and classes, overuse of Separation Of Concerns to many fine grained units, overuse of modularization to JAR, plugin, or just governance hell.

  1. You start to use terms like "potentially", "in future", or "scalable".
  2. You spend more time thinking of "encapsulation", "abstraction", and "decoupling", than the actual problem.
  3. You believe that with the amount of frameworks, libraries, and languages (better polyglot projects), the quality of the software will improve.
  4. You are able to replace every single concept, class and layer—but this feature actually cannot be derived from the client's requirements.
  5. Just looking at the code—you do not understand what happens—you need additional tools, products, and consultants :-) to understand it.
  6. You hate monolithic structures—so everything is configurable, replacable—of course, at runtime. If it becomes too complex, go to point 5.
  7. You start to implement a generator to tackle the complexity.
  8. Your configuration file is getting slightly bigger than your code.
  9. Your interface is so fluent that only domain experts understand the code. :-)

Common sense and the balance between concepts and idioms are the solution—but it's hard to find in real world. :-).


Published at DZone with permission of its author, adam bien.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)


Harald Krake replied on Fri, 2008/06/27 - 4:39am

10. Your project is going to end up with half of this planet's jar-files in tow.

GeekyCoder coder replied on Fri, 2008/06/27 - 7:36am

11. Design pattern becomes a must rather than a need

What can be done with button using ActionListener endup using a command strategy which create more unnecessary object and bloat as well. 

Christoph Beck replied on Fri, 2008/06/27 - 9:33am

Here's the first indicator of an under-engineered project.

  1. You start to use terms like "common sense".

In a recent post you were talking about test coverage and metrics, closing with "instead of believing in numbers, sometimes a portion of common sense could really streamline your development". Now you're saying "Common sense and the balance between concepts and idioms are the solution..."

Well, "common sense" always sounds good because everyone claims to have it. However, when people talk about "common sense" they usually mean "my sense". I think that the wider interest in patterns and idioms just shows that people understand the importance of quality and design and have learned that "common sense" is sometimes not enough.

Alex(JAlexoid) ... replied on Fri, 2008/06/27 - 12:57pm

Here's one indicator that can replace all...

0) If your project was in design ,before entring development stage, for 2 years - it's overengineered.

Ritesh Chitlangi replied on Mon, 2008/06/30 - 8:01am

Great list. The "enterprise"-crazed "java community" needs a shot of common sense from time to time.

Slava Imeshev replied on Tue, 2008/07/01 - 3:23am

Great post! Here is my addition to the collection of bad signs:

12. Word "genereric" appearing anywhere in the code, project documentation or in verbal communications.



Slava Imeshev

Cacheonix - Common Sense Data Grid for Java



Jeroen Wenting replied on Tue, 2008/07/01 - 12:39am

re. 8: not necessarilly... Depends on whether you see the configuration file as code or not (on the project I'm now on, we have a few thousand lines of Java code, and probably about a million lines of XML code driving that Java code to call another million or so lines of PL/SQL. It's not overengineered, if anything it's underengineered as there are some glaring holes in the design that make adding new capabilities to the engine rather hard).

Maxim Zakharenkov replied on Fri, 2008/07/18 - 7:27am

Cool post!

In my practice I've encountered the following requirement from a PM (Not from customer) - "Your project should be 100% configurable"

Alastair Rodgers replied on Tue, 2008/07/22 - 7:53am

Slava, you are spot on! At every job I've had, sooner or later someone has requested a Generic <insert-your-system-here>.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.