12 Warning Signs of Bad Application Architecture

At a #CIOChat this weekend we were asked about warning signs for bad architecture. Here was my quick response capturing just a tweet-sized summary of architecture that "smells bad" -

Many responses were around "accidental architecture" that is "cobbled together" and sometimes degrading into "Frankenstein architecture." There were many technical issues identifies such as "data integration via feed files", "root cause analysis is rarely done", "testing with real live data", "diagrams remind you of fettuccine alfredo" (if there are diagrams), and the awful scenario of "when a system crashes and you go to do a restore and the tape is blank."

There were also many business issues identified. "Architecture does not start with technology" and that architectures become legacy issues "when the business treats everything as a one time cost."

Knowing the architecture issues before business issues emerge

By the time you have outages, poor performance, problems making enhancements, difficulties cross training new developers and other issues, it's already late to make architecture assessments and improvements. A seasoned CIO, CTO, or application architect can sport signs of trouble well before business and technical risks begin to materialize.

Some things that I look for -

  1. Lack of high level architecture documentation, or documentation is significantly outdated.
  2. Large number of architecture components or codebase size relative to the number of developers and engineers supporting the application.
  3. Minimal application monitoring and logging in place, so no one really knows how well the application is performing or what to do if issues are reported.
  4. Application platforms or components aren't upgraded regularly, or worse, they are running on unsupported versions.
  5. The last few attempts to enhance the application were categorized as disasters either because the improvements never made it to production, they took too long to implement, or their deployments created stability issues.
  6. There are no defined regression tests. Not even manual ones.
  7. The application is "stuck" on its computing architecture making it difficult to move to the cloud or alternative infrastructure. 
  8. There is significant investment in proprietary code to perform integration or technical functions that would be "out of the box" options on modernized platforms.
  9. Developers are afraid to make changes. New developers have significant learning curves before they can do basic enhancements. 
  10. There are hard coded connections, credentials, and other system parameters embedded in the code.
  11. Parts of the code is not in version control.
  12. The build and deployment process is manual. The documentation on the process either doesn't exist, or is something that needs to be modified with every release. 
I'm sure there are more than twelve!

No comments:

Post a Comment

Comments on this blog are moderated and we do not accept comments that have links to other websites.