Software product development is, undoubtedly, a very complex task. A large software product usually comprises a lot of business and technology knowledge. The final product code embodies all this knowledge but doesn’t explain it. If you own the software product, this doesn’t necessarily mean that you own the product knowledge and know-how and that you can improve or extend your product. In other words, without sufficient product knowledge you merely possess “black box” software not adequately suitable for further evolution, which is inherent for custom software.
Therefore, it’s very important for clients not just to own the product but also to own the product knowledge. Potentially, you can restore product knowledge based on the existing source code (sometimes, even the executable code) of your software product, but this is very costly task and makes sense only in exceptional cases.
If you outsource the entire product development to your partner, you may risk losing the product knowledge and having difficulties with further product evolution unless you request your outsourcing partner to create and deliver full product documentation describing the software architecture, business workflow, algorithms and data structures, environment configurations, deployment procedures, and other crucial information. Often, however, Agile does not leave time for writing full documentation, and the available documentation on a project is limited to user stories and code comments.
A more practical way, in the case of Agile development, is to split the project team between the client side and the outsourcing partner side. If the product owner and the system architect are located on the client side, a vital part of the product business and technology knowledge will be preserved with the client. To preserve implementation and coding knowledge, it’s sufficient to keep a few key developers on the client side and outsource most of the work to the outsourcing partner. In this configuration, the client can have peace of mind, knowing that no important product know-how will be lost.
Another solution to the problem stated above is to outsource less critical product components that are auxiliary, rather than the core of the client’s business. This work is often more labour-intensive than work done on the core functionality, so outsourcing it is a wise and rational option. The potential risks of losing product know-how are not critical in this case.
At Solead, we apply the following practices to mitigate the concern of losing product knowledge by our clients:
In our next post #4 we’ll touch on another widespread concern – compromised work quality and failure to deliver by an outsourcing vendor.