Friday, October 27, 2017

Building microservices in an agile environment

How to start to fail. I am the crazy guy saying the end is nigh. Building Micro-services and Agile are somewhat at odds. Good Micro-service design needs big design up front planning which is anti-iterative, succeed or fail, rinse, wash, repeat. In order to have the proper motivation to spend time and effort planning and succeeding at Micro-services you must fail at the monolith and retain a large enough percentage of your team to learn the lessons from that failure and repeat. Fail at scale has been batted around a lot lately. Unfortunately failing at scale sounds great, but business owners aren't always on board with with the failure, most don't understand it is apart of the cyclical process. Too often failure is not tolerated even though it is necessary for the greater good. Failure must be seen from the economic perspective, building incrementally accelerates value delivery. Without failure, ROI alone is not enough motivation to rebuild a component.

To build micro-services in an agile environment first you build the monolith, then you must fail. Then you must be able to retain most of your team, and properly plan out the service implementation. Then you build out the services. Each successive generation getting you closer to the original vision of decoupling, scalable, reslient, non-hacked together Microservices.


Sufficient design upfront not big design. Always design just enough to get finished and to solve the problem while creating new and unique problems to solve.

I think this is why we have the "Three throw a ways rule". Getting management to buy off on the fact the first two times were just throw aways is the hard part. Its like windows, nothing good till version 3.1.


Disemboweling the Megadon. 


This is a slow and tedious process and has many setbacks. The current setback should be an anti-pattern "the king is dead long live the king". We are killing the monolith by building a new monolith. But this one will be easy to de-tangle later because it was built smarter and as services this time.

My biggest win this week is database Joins. Figuring out a good way and modern technique to avoid doing an extremely costly and inefficient database operation.