Shared Libraries

written by Jürgen Happe, Time to read 2 minutes
Sharing code within your team or company is a great idea, but if you do it the wrong way, you will lose a lot more than you can gain.
Shared Libraries

Why share ?

Long-lasting teams will sooner or later end up with more than one application even if they don't go all the way to microservices. Avoiding duplication is a key issue in software development. Since you can't access your code in every service without putting it into a shared library, the need for such a library will almost immediately arise.

Don't put everything into one library

The most common solution: One common shared library which is used for all the code that may be reused in different services or applications.Authentication, basic database layer definitions, integration test setups, excel document export and much more lumped into one library.

Imagine you are a developer in a team that needs to update their authentication from Basic Auth to OAuth2. Everything has been prepared in the shared library. You just need to update the library and configure the authentication.Then you encounter the first problem: In the latest version of the library, the document export (which is also part of the library) was changed to meet the requirements of another project. Now you need to fix all the compiler errors surrounding your document export first. And the syntax for the listeners on your database layer changed. You need to fix that as well. Maybe, you want to test your fixes first before continuing with your original change? This takes time as well.

In this case, you are forced to update everything contained in shared library simultaneously. You can no longer choose when or what to update. However, the worst part is that this forces you to do context switches between different parts of your application which will simply slow you down. This is well documented in Jeff Sutherlands book (page 87) [1]. So even if you want to update anyway, you may not be able to organize your work in the way you want.

Learn from the open source world

The obvious solution is to divide your library in a similar way people do it online. If you take a look at GitHub or GitLab projects, you will usually find libraries which do one thing only. If you need to create an excel document you use one library which does exactly that. The excel library you find online will usually not contain an OAuth2 module.

Conclusion

Organize your shared code the same way people do it online. Split it into different small libraries which all cover exactly one concern. The coming parts will deal with the common implementations of REST communication, which usually use shared code such as interfaces and data classes. The problems that arise from this in the long term are hardly foreseeable when designing a new architecture, which is why many teams initially choose the wrong way.

References

[1]: Scrum: The Art of Doing Twice the Work in Half the Time, 2014, Sutherland, J. and Sutherland, J.J.