Skip to content

Commit be01d76

Browse files
committed
Add draft for service-vs-library pattern.
Fixes #89
1 parent 8ab273b commit be01d76

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

service-vs-library.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
## Title
2+
Service vs. library: It's inner source, not inner deployment
3+
4+
## Patlet
5+
Teams in a DevOps environment may be reluctant to work across team boundaries on
6+
interdependent code bases due to ambiguity over who will be responsible for
7+
responding to service downtime. The solution is to realize that often it's
8+
possible to deploy the same service in independent environments with separate
9+
escalation chains in the event of service downtime.
10+
11+
## Problem
12+
13+
When teams are working in a DevOps environment developers are responsible for a
14+
feature end-to-end: From the customer down to deployment, maintenance and
15+
support. This poses a challenge when working across team boundaries: Escalation
16+
chains may not be the same for errors happening in either team. Coupling
17+
source code and deployment leaves the teams with the question of who is
18+
responsible for on-call support in the event of errros. As a result teams are
19+
reluctant to join forces even if there is significant overlap in requirements.
20+
21+
## Context
22+
23+
Teams are working in a micro-services environment.
24+
25+
They are organised in full functional DevOps teams: Each team is responsible for
26+
their contributions end-to-end, including maintenance, on-call and customer
27+
support.
28+
29+
A team is tasked with providing a service to their downstream customers that is
30+
fairly similar to an existing service built by another team.
31+
32+
## Forces
33+
34+
Organisational escalation paths may be different for each of the teams.
35+
36+
Members of each team may be unwilling to answer on-call support for errors that
37+
do not affect their own downstream customers.
38+
39+
Severity levels for the same types of errors may be different across team
40+
boundaries due to different SLA definitions per team/customer relationship.
41+
42+
## Solutions
43+
44+
Decouple responsibility for source code from deployment: Both teams work to
45+
identify exactly where there is overlap and synergies.
46+
47+
Only shared source code is kept as part of the InnerSource project with shared
48+
responsiblity.
49+
50+
Decouple configuration and deployment pipelines from actual business logic.
51+
Establish a second deployment of the service for the second team.
52+
53+
Treat the common base as a library that is used by both teams with shared code
54+
ownership.
55+
56+
## Resulting Context
57+
58+
Teams are willing to collaborate, benefitting from sharing the work of
59+
implementing the business logic.
60+
61+
A service that originally was built specifically to work in one environment is
62+
converted into a more general solution based on a specific business requirement.
63+
64+
Both teams get to know their respective escalation policy and deployment setup,
65+
potentially identifying improvements for their own setup.
66+
67+
The likelihood that changes are needed and made in the shared source code
68+
increases, leading to more frequent oportunities to refine, improve and optimise
69+
the implementation.
70+
71+
## Known instances
72+
73+
Europace AG
74+
75+
## Author(s)
76+
77+
Isabel Drost-Fromm
78+
79+
## Acknowledgements
80+
81+
Thank you Tobias Gesellchen for review internal to Europace AG.
82+

0 commit comments

Comments
 (0)