Managing dependencies

Modern systems have a lot of dependencies. Managing them effectively is a big part of the software development life cycle (SDLC). There are two kinds of dependencies:

  • Libraries/packages (linked to the running service process)
  • Remote services (accessible over the network)

Each of these dependencies can be internal or third party. You manage libraries or packages through your language's package management system. Go had no official package management system for a long time and several solutions, such as Glide and Dep, came along. These days (Go 1.12), Go modules are the official solution.

You manage remote services through the discovery of endpoints and tracking API versions. The difference between internal dependencies and third-party dependencies is the velocity of change. Internal dependencies will change much faster. With microservices, you'll have other microservices you depend on. Versioning and keeping track of the contracts behind the APIs become very important aspects of development.