Building software is not an engineering problem, it is a communication problem between engineers and business. Agile Manifesto‘s first and foremost point is about the individuals and interactions. It is imperative that the feedback loop should be as short as possible to reduce the cost of late rework. Each team in an organization would be unique in terms of composition, their communication and means of interaction will be fine tuned for that particular group. The teams should be guided through non negotiable philosophies rather than intricate set of policies, restrictions and tools.
Cliche – ‘Any code can be understood by machines, code should be written such a way that it should be readable by humans’
Code is read many times more than it is written, so it is everyone’s desire to keep the code base very neat to adhere to good coding standards. One way of ensuring this is to do a code review. With Git the collaboration got easier that you ask anyone to clone your repo, do some work and contribute back through a pull request. Pull request is the only way of contributing code to a project which is otherwise a closed read only repository. The owner reviews the pull requests and decides what goes into his/her repo. The feedback cycle in this manner is too slow but works well for social coding.
Cliche – ‘If you have a hammer then all your problems look like nails’
It is becoming increasingly difficult to gather the right requirements, translate them quickly into working software and that too in an efficient manner. It is necessary for us to be able to roll up information from the environment and translate that into the software. To help the evolution we should be able to keep the feedback loop as small as possible so that it is very easy to add the right functionalities at a good pace. I happened to read a nice writeup on the importance of rolling up information from the environment. Many people fail to visualize what their intent is in selecting a tool in the first place, pull requests work very well in controlling what goes into someone’s personal project. It will also be successful in team setups, but it comes with a cost. The cost is the speed of evolution, as it will take longer and longer to sync the commits when the codebase grows.
Cliche – ‘Give a carpenter a latest power drill instead of a hammer, he will use it as a hammer’
In the SOA context it is a double whammy where there are many micro repos and pull requests are used to control the quality of the code. Choice of tools and technologies are always like rock, paper & scissors; what works in one context will not work in the other. Choose the right one considering the intent and moving targets in all dimensions in the system, change the approach if it does not fit in or the situation has changed.
Pull requests can work rather well for smaller codebases/teams provided you keep the changes small and merge frequently into the mainline (i.e. stay closer to trunk based development). It gives you the freedom of pushing your changes and getting quick feedback from your CI process. The problems start when your codebase(s) and teams grow and discipline starts getting diluted. With micro services (SOA reloaded), it is indeed a double, triple (or whatever number of services of you have) whammy.