Application design considerations

For some time now I’ve been meaning to write down rough list of things I consider in my role as enterprise architect for a project on either a new or existing system.  Often in the early stages of a project I will be the project architect, and then in the later stages of the project I will transition to become the lead developer. Thus, I have included a high-level application design consideration list and a more detailed lower level application design consideration list.  In my experience, being aware of the lower-level design considerations has always helped inform the high-level solution design considerations.

High level application design

  • Business applicability: are we sure we’re solving the right problem for the business?
  • Cost!  Are we delivering the right value at the right cost?  Can we deliver the same or more value faster and/or for less cost?
  • Privacy, regulatory and legal compliance
  • Integration and reuse of corporately strategic technologies
    • Opportunities for improvement
    • Requirements that deviate
  • High-level security concerns
    • Credentials management
    • Firewalls
    • Reverse proxies
    • Anti-DDoS attack capabilities,
    • Layered security (defence in depth)
    • Network topology
    • Server deployment
  • Layering the application architecture
    • Multitier/Multi-server deployment considerations (pros and cons)
  • Isolation and separation / component independence
  • Organizing domain logic / working with the business on a Ubiquitous Language
  • Systems integration
    • Service design
    • Integration with existing services (service reuse)
    • New service requirements
    • Extending existing services
    • Multi-threading/parallelization of service request opportunities
  • Mapping to the relational database (or considering a NoSQL approach)
  • High-level application performance considerations
    • Application wide caching opportunities
    • Distributed caching opportunities
    • High-level concurrency opportunities
  • High-level cross-cutting concerns
    • Master security systems integration
    • User tracking and general user support concerns
    • Logging, distributed logging and aggregation across possibly diverse platforms
      (such as browser, desktop, server, Mainframe, etc)
    • Transactions and possible distributed transactions
    • Error handling, propagation, logging
  • 3rd party tool considerations
    • Content management systems (CMS), business rule engines (BRE), call centre applications, Imaging solutions, Enterprise printing solutions, Customer Relationship Management (CRM), etc.
    • Object Relational Mapping (ORM) tools
    • The Cloud!
  • Disaster recovery considerations
  • Mobile and cross platform considerations (present or future)
  • Supportability of solution
  • Testability of solution
    • What is the best way to implement or mimic the proposed solution in the testing environments?  What is the time/cost impact to the different testing environments?
    • Automated testing tool integration and exploration

Low level design and development considerations

  • Business applicability: are we sure we’re solving the right problem for the business?
  • The Single Responsibility Principle
  • Software usability (for the end user)
  • Consistency with other enterprise software approaches
  • Internationalization (which should be considered much earlier in the application lifecycle than it usually is)
  • Low-level layering decisions
    (for example, JavaScript vs. server-side divisions and duplications)
  • Supportability of detailed solution
  • Automated testability of the detailed solution
    • Unit testing
    • GUI testing
    • Web service testing tools (and integration with standard automated test system)
    • Stored procedure testing
  • Automated build system considerations
    • Ease of integration with the automated build system
    • Simplicity of build
    • New artefact management
  • Ease (or complexity) of deployment
  • 3rd party tool considerations
    • Lower level libraries
    • Open source libraries
    • GUI component libraries
    • Graphing components
    • Web or UI frameworks
  • Class and interface design
    • Specifically inheritance, encapsulation and abstraction and polymorphism
      • This may be affected by 3rd party tools – especially ORM selection
    • Alignment to business terminology and Evan’s Ubiquitous Language
    • Testability of the proposed design
    • Standard design patterns and anti-patterns
      • Object creation, structural, behavioural, data access, layering, concurrency, etc.
    • Dependency injection
    • Inversion of control (or not)
    • Resource management
      • Disposing of database connections, file streams, sockets, etc.
      • Detailed cache management strategies
    • Code reuse – The Don’t Repeat Yourself (DRY) principle
      • Reusable library design and selection
        • Business logic
        • Date/time manipulations
        • String manipulations
        • Networking
        • Caching
        • Undo capabilities
        • Internationalization utilities
        • Persistence utilities
        • Etc…
  • Detailed persistence/ORM design
    • Design patterns
    • (For example, Hibernate and NHibernate have multiple ways of defining persistence)
  • Low-level implementation of cross-cutting concerns
    • Aspect-oriented programming opportunities
    • Automatic transaction enrollment
    • Automatic security implementation (possibly with aspects or attributes)
  • Detailed low-level security concerns (usually this is tightly coupled with cross-cutting concerns)
    • Authorization and authentication implementation options
    • SQL-injection prevention
    • XSS attack prevention
    • Data encryption details
    • Of course there’s a lot more here…
  • Website development complexities
    • Session state management
    • Forward/back button management
    • Form data binding
    • Data validation (or not)
  • Domain Specific Language (DSL) opportunities

Each of these application design consideration points could be a blog post in and of itself, and many of these points have entire books dedicated to them.

Please let me know what application design points I’ve forgotten in the comments below.

Robert

2 thoughts on “Application design considerations”

Leave a Reply

Your email address will not be published. Required fields are marked *