Lean architecture
Lean thinking describes seven classical sources of waste 無駄:
- Overproduction: Making stuff that nobody buys
- Over-processing: Creating stuff that is more fancy than what the customer wants
- Transport: Moving stuff from one place to another in order to create it or give it to a customer
- Motion: Expending unneeded effort while creating stuff
- Defects: Having to redo work because it wasn’t done right the first time
- Inventory: Storing stuff waiting to be worked on more
- Waiting: The time stuff is just sitting there, waiting to be worked on
Often an eight is added: Unused talent
It’s always fun (but sometimes risky) to draw analogies with other fields. In an enterprise information application (that is: what most people are working on these days), “stuff” is the data that your application shuffles between users, databases and other systems.
Here are the seven wastes of enterprise information application architecture:
- Overproduction: Any code that is not executed by an end user. In the extreme case, many applications contain code that is not “reachable” and so can never be executed. In other cases, it may be functionality that is available, but never used
- Over-processing: Do you really need to scale to a million concurrent users for a company internal application? Do you really need an application that is used get data for monthly reports to have 98% uptime?
- Transport: How many classes in the code touches a single piece of data before it’s displayed to the user (or stored in the database (or sent to another system)). How many systems does a piece of data touch before it’s done processing?
- Motion: How many times do you transform data into another representation?
- Defects: Do you accept data that may be in error? How do you deal with old data that contains errors?
- Inventory: I don’t know… maybe are you deleting obsolete data?
- Waiting: Do you have batch processes that run daily? ‘Nuff said
(As an aside about transport. Did you know: In C#, it’s requires substantially less work to save and find data with EntityFramework than it does to call a web service? If system A “helps” system B by provide a data access service, system A is actually causing more work for system B. It’s not just an investment with low ROI, it’s got negative ROI!)
Remember: Not all production is overproduction and not all transport is wasted transport. But much is.