| @ -0,0 +1,74 @@ | |||
| --- | |||
| title: Microcommits | |||
| author: brett | |||
| date: 2015-06-24 | |||
| template: article.jade | |||
| --- | |||
| A look into the new development methodology of microcommitting. | |||
| --- | |||
| Lately everyone has been talking a lot about | |||
| [microservices](https://en.wikipedia.org/wiki/Microservices), or the idea of | |||
| making services as small as possible. Making things smaller seems to be the | |||
| trend in development, making development cycles smaller with | |||
| [agile](https://en.wikipedia.org/wiki/Agile_software_development), making | |||
| test cycles smaller with | |||
| [continuous integration](https://en.wikipedia.org/wiki/Continuous_integration), | |||
| making release cycles smaller with | |||
| [continuous deployment](https://en.wikipedia.org/wiki/Continuous_delivery), | |||
| making applications smaller with | |||
| [service oriented architecture](https://en.wikipedia.org/wiki/Service-oriented_architecture), | |||
| and then again making applications smaller with microservices. It would only | |||
| make sense then that the methodology of `microcommits` will yet again make | |||
| things smaller, in this case our commits. | |||
| As we all know developers easily lose their train of thought due to many things, | |||
| like, noise in the office or just the presence of other human beings or sites like | |||
| [hacker news](https://news.ycombinator.com/). These distractions mean that | |||
| sometimes they have unfinished code changes just sitting around locally. In this | |||
| day and age, that code is a new feature or bug fix, having it just sit around on | |||
| a developers machine will cost you money! You need those bug fixes as soon as | |||
| possible to keep your users from rioting and moving to a competitor and you need | |||
| those new features to attract new users and happy and/or new users means more | |||
| money for your company. | |||
| So, how do we solve this problem? Just like these other methodology changes, | |||
| microcommitting is a fairly simple idea: make a part of our development process | |||
| smaller/shorter, in this case our commits and our pushes to the main git repo. The | |||
| idea is to try and shorten your commit/push cycle for each developer down to as | |||
| short as possible. Meaning that every developer must be committing and pushing the | |||
| changes that they have locally at least once within this time frame. I have | |||
| found that a good time frame to start with is 5 minutes. It may seem like a very | |||
| long time to start with, but you shouldn't expect developers to be able to just | |||
| change their workflows over night, you should start with a high interval like 5 | |||
| minutes and then slowly you can work them down to about 1 minute, maybe even | |||
| less if your team is diligent enough. | |||
| Microcommitting is only a small piece of the puzzle, however if you pair it | |||
| together with continuous integration and continuous delivery, then BAM! you have | |||
| new features and bug fixes going out to your users at least 100 times per | |||
| day... per developer! Now, how do you like that? | |||
| Some may point out a crucial "issue" with microcommitting, which is, if a | |||
| developer is suppose to be committing/pushing code every minute (or less) how | |||
| are they going to have time to actually write the code? This is true, if they | |||
| are manually writing commit messages and running git commands by | |||
| themselves. However, I have found that microcomitting is most effective with | |||
| automated commits. If we have automated continuous integration and continuous | |||
| deployment, why can't we have automated continuous commits? The easiest way to go | |||
| about continuous committing is to setup a service or cron on the developers | |||
| machines which will automatically add all their local changes, commit and push | |||
| their code. You can use something like the following: | |||
| ```shell | |||
| git add . && git commit -m "`whoami` - commit - `date`" && git push | |||
| ``` | |||
| There you have it, the new concept of microcommits. It may take a few hours, | |||
| maybe a day or two to get your development team up to speed, but once they have | |||
| their commits down to the minute or sub-minute, you will know be able to notice | |||
| a huge change in not only user satisfaction, but developer satisfaction as well. | |||
| Enjoy. | |||