One common aspect of building in and for a Service Oriented system is the idea of “Standardizing Developer Experience”.
What is Developer Experience ?
A Developer in a Service Oriented project has to deal with multiple concerns. Each such concern is vital to the success of the Project. These concerns are essential to managing the chaos in a Distributed system.
Let us look at some of these concerns :-
1. How does a Developer decide on the Size of a Service ?
2. How does a Developer ensure that she is building a consistent set of API Interfaces to her service
3. How does a Developer provide API Mocks or Stubs for other developers to use when consuming her service
4. How does a Developer provide consistent documentation for the Service APIs that she developed
5. How does a Developer help prevent failures for others as a result of using the Service she built
6. How does a Developer ensure she is providing Health check capability in the Service
7. How does a Developer ensure the service is ready for instrumentation and monitoring
8. How does a Developer know how to publish her service
9. How does a Developer able to provide consistent Test Cases and Test coverage for the service
10. How does a Developer get access to test the service she developed along with the other dependent services
11. How does a Developer able to deploy the Service anywhere, be it Private Data center or a Public Cloud service
12. How does a Developer able to consistently provide Authentication and Authorization capability to its service
13. How does a Developer manage and support the variety of Consumers / API Clients
14. How can a Developer reliably make a change to a code and ensure that this change does not affect other dependent services
15. How can a Developer ensure that a change can be moved to Production environment reliably without major human interference :)
16. How does a Developer ensure that the Service she built is easy for Debugging
17. How does a Developer know how much capacity the Service needs to be run
18. How does a Developer know how to scale the services horizontally and independentaly
19. How does a Developer reliably use the Good patterns when developing for a Distributed system like Circuit Breaker, Timeouts etc.
All these above patterns are essential for creating a Good developer experience. A Good Developer experience ensures better code quality, reliable and stress free changes to a system, and independent Teams.
As we develop the POC for demonstrating Service Design and Domain Isolation, it is essential for us to also show that this isn’t possible without creating a Good Developer experience.
The goal is not just to create an experience, but Standardize it.
What do I mean by Standardizing ?
Standardizing means making all these concerns a part of a standard template. For example, we know about Email templates. Email templates are used to help create consistent emails for all recipients. Similarly, Standard Templates for Developer experience will avoid mismatch amongst developers. Standard Templates for Developer experience will reduce the burden of managing all these ideas for a Developer. This will ensure that the Developer can quickly and reliably focus on building the actual Logic, instead of managing this mess.
The good part of this template is that it can be shared with anyone. Internal teams or Partners, anyone can have access to this template and build reliable code with certainity.
But, a Good developer experience cannot prevent Bad code :) It can help Good developers become better, and build consistent and standard system required for a successful Service Oriented product.
And creating good Developer experience is NOT expensive or time taking. It is easy with the wealth of tools available. All we need to do is to build this Template from the various tools available and bring them all together.