1 minute read

Successful collaboration relies on shared interfaces.

Currently, I’m part of a project in my organisation involving three teams: the mlops team (my team), the data team, and the dashboard team.

The data team creates the model, we handle hosting it in our infrastructure, and the dashboard team takes care of visualisation. To make this collaboration work, we need to interact with both teams, consuming and hosting the model, and providing its output to the dashboard team.

The only real way of making this collaboration go smoothly is by establishing a clear interface. We need to align with both teams (the data team and the dashboard team) in what we expect to give them and what we expect in return.

For example, one such agreement could look something like this:

  • We will put files on s3://{env}-{region}-service/foo/bar/things.json
  • With things.json being valid json with the following format: {String<Name>: String<<List[Int]>>}.

Agreeing on this interface provides a clear point of separation, allowing both teams to work in parallel because you can pretend you get the output agreed upon in the interface (mock it, fake it, whatever). The important thing is that your interface need not be perfect from the start, but agreeing on one is the first step in decoupled collaboration.