Today I realized painfully that for some decisions you need a good overall understanding of the system. Otherwise, the risk is too high that your assumption turn out to be wrong.
Imagine that you are a developer for an online web shop. To understand the system, you have to understand many connected subsystems, for example:
- How to receive and process product information from various suppliers
- How the customer can search and order products on your web shop
- How the orders are processed and managed by your customer service
- How your SAP system handles the invoicing process
- ...
The larger the system becomes, the more you have to understand.
If that knowledge is lacking, sub-optimal solutions where developed when specialized teams worked together. Specialized teams, which only understood their part of the system in detail.
To deal with that problem, our company changed the strategy, so that one development team always has to be responsible for all aspects of a feature. Even if it involves the complete process chain. (It is kind of a feature team, but not from teams working on different subsystems.)
What are effective strategies for developers to keep their system and operational process knowledge up to date?
I think good system documentation is a key, but I'm afraid that there is a point where the human mind cannot scale as fast as the system involves. At some point to have to simply, but that simplified assumptions can turn out to be costly mistakes. When you have to implement and maintain the code, you just have to know the exact details.
As a developer, I currently have to face a difficult conflict of interests:
- I need to spend more time to understand our system and operational process.
- I need to develop and maintain our code.
As time is limited, 2) mostly wins. The result is that I mostly gain deeper knowledge along the way, and some half knowledge from casual conversations.
Do you know how huge companies like Amazon solve that problem? I would assume that no single human is capable of understanding such a complex process, and be able to contribute code at multiple subsystems at the same time.