Several years back, I did an exercise in mapping out families of application architectures and application types. It was an extensive archeological expedition.
Key Goals / Outcomes
There were several goals of the exercise:
Identify canonical application architectures and app types
Figure out a useful way of sharing architectures
Figure out whether it's better to focus on the business architectures or the technical architectures
Find a simple way to overlay patterns work on top of technical architectures
Find a simple way to share architectural styles
Find a way to simplify and share visuals of end-to-end architectures
The exercise fed into a number of later works years later, including:
Reverse engineering many available sample applications inside and outside of Microsoft
Checking with industry experts on their lessons learned about the types and the shapes of all the applications they've seen and built over the years
Creating an extensive inventory of application patterns from various sets of our key customers that had a wide range of applications and platforms
Evaluating competitive efforts to index and catalog application shapes and types, and making sense of various patterns efforts
Keep in mind, that going into this, I already had the benefit of doing more than 650 customer architecture and design reviews -- yet still, this was an overwhelming exercise. It forced me to find new ways to deal with large bodies of data and information, and somehow turn them into shared maps, browsable, reusable knowledge nuggets, and backdrops for deeper conversations and elaboration.
Lessons Learned from Architectural Exploration
Some of the surprises for me or things that I learned that I didn't expect include:
Focusing on business architectures and verticals was less effective and less reusable than focusing on technical architectures as a baseline (from there, we could overlay business architectures)
Knowing the deployment patterns was the fastest way to get a good sense of the application patterns (it's where the logical met the physical against the infrastructure)
Looking through quality attributes as a lens made it easy to find and explore patterns for security, performance, reliability, manageability, etc.
So many applications boiled down to simple CRUD (Create Read Update and Delete)
The biggest variation among applications was the business logic and workflow
IBMs simple model of user, process, and data was useful as one lens
Views and viewpoints were a powerful way to change perspective and drill into another aspect of applications
At a high-level, you could capture a customer's core system by capturing the data, workflows, and workloads (the workloads significantly shaped the design of the app)
In retrospect, the simplicity and common denominators of CRUD make a lot of sense. It's all about interacting with information at a fundamental level. People are just trying to get things done and there's only so many things you can do with information -- find it, browse, save it, share it, transform it, etc. as part of your workflow.
Early Map of App Types
I included one of the many early maps of the application types that helped us figure out what to throw out and what to keep as we moved forward. One of the key distinctions that Ward Cunningham helped me figure out was to distinguish between the shape of the application architecture and design, and the actual “purpose” of the application. Some purposes were more business-oriented, while some were more technically oriented, and this helped me find and distinguish different families of apps.
It's circa 2004, but the irony is how timeless the backdrop really has been. It’s rough and raw, but like I said, it’s just one sampling of the many braindumps behind the scenes of mapping out app types.
Category
Items
Base Archetypes
Rich Client
Web Client
Web Service
Mobile / Phone
Video Game
Framework
Component/Library
Subsystem
Service
Pool of Stuff
OLAP
Data Mining
Data Warehouses
Data Management
Business Process Integration
Business Intelligence
BAM
Server-side
Desktop
Peer-to-peer
Mobile
Web-centric
Data-centric
Middle-tier
Transactions
Read-Only data
Workflow
Batch
Portal
Community
Commerce
Task-Tracking
Business Applications
Accounting and Finance
Customer Service
Distribution and Warehousing
Education and Training
Engineering, Design and Drafting
Facilities Management
General Office Automation
Groupware and Collaboration
Human Resources
Knowledge Management
Legacy Systems Analysis and Upgrade
Logistics and Procurement
Manufacturing and Process Management
Other Business Application Tools
Project Management
Reporting, Analysis and Decision Support
Sales and Marketing
Accounting and Finance
Account Activity Analysis
Accounts Payable
Accounts Receivable
Billing and Invoicing
Budgeting, Financial Planning and Analysis
Consolidation Statements and Performance Reporting (CS-PR, Aggregation)
Currency and Foreign Exchange Management
Electronic Funds Transfer (EFT)
Fixed Asset Management
General Ledger
Integrated Accounting Solutions
Integrated Financial Management Solutions
Inventory Accounting
Investment and Portfolio Management
Job Costing
Payment, Clearing and Settlement Systems
Payroll and Personnel Accounting
Purchasing
Quotation, Order Entry and Order Processing
Risk Management
Small Business Accounting
Tax Preparation and Reporting
Time and Billing
Customer Service
Automatic Page-Voice Notification
Call Center Management
Customer Service
Help Desk and Call Management
Interactive Voice Response Systems
On-line Customer Support
Scheduling
Distribution and Warehousing
Distribution and Warehousing (Integrated)
Freight Dispatch
Freight Handling
Other Distribution and Warehousing Industry Sectors
Route Scheduling
Truck-Fleet Management
Wholesale Distribution and Warehousing
Education and Training
Computer-Based Training
Courseware Development
Web-Based Training
Engineering Design and Drafting
Cartography-Mapping-Geographic Information Systems (GIS)