git-flow and Agile
For a long time this has been something that has really bothered me. git-flow was first introduced in this article http://nvie.com/posts/a-successful-git-branching-model/. A lot of projects have adopted this workflow. It is a great standard mechanism for managing a project when you need to work with lots of features, different release branches etc..
The problem is that I have had trouble really seeing where the level of complication added to a project by git-flow has really added value to the project that is Agile. Now before we go any further let me add a caveat. I come from a background of favoring a continuous deployment model with anything I develop. While some may disagree with me, this is the model that I think most projects should adopt. This is where you really get your bang for the buck with Agile. But even if you are not doing continuous deployment, if you are doing TDD and CI git-flow still feels like overkill. It seems to run contrary to the reasons that we use TDD and CI.
So why do I feel this way?
First, lets look at the basics of TDD. We follow this because we are aiming at having all functionality of the application covered with passing unit tests that are frequently checked in. While there are certain circumstances where you might have a new feature or piece of functionality that will require major surgery to fix that requires going off into another branch this should be the exception not the rule….
Second, if you are creating all of these branches for each new feature then it really feels like you just lost the benefit of CI even if you are doing CI on every branch. Now you either have to set something up, or create infrastructure to put a CI build on every branch, but more importantly, where is your continuous integration with your main branches such as dev and master when every feature is in another private branch? To me this is a smell. But that is assuming that you push your feature branches up to a main server. The page that introduces the git-flow says that feature branches usually only exists on a developers repo and not origin. At that point we have majorly undermined the purpose of using CI.
Third, continuous deployment, and in my view the spirit of Agile, say that changes should be checked in often and be shippable (even if a story is not complete) at any point in the development cycle. The entire philosophy behind git-flow goes against that.
For some projects git-flow is probably a great tool, but to me I am having trouble seeing how it would add any value to most projects that are following a sprint schedule or doing Kanban. In fact I would argue that if you are doing TDD, using CI, and practicing some form of continuous deployment and feel that git-flow will solve your problems you should take a step back and look at how you are using those tools. Maybe there is a scenario where these would make sense….but I would sooner think that the need for using git-flow on an Agile project is more of a project smell that indicates that something else is broken. I would love to hear what you think, so please feel free to comment.
Talking about Adhearsion around the world
So it has been over 9 months since I have done any blogging. The main reason has been that I have been extremely busy working on a new project called Adhearsion with a really cool company called MojoLingo. This has given me the opportunity go to conferences to talk about the project. In the past six months alone I have been to 6 conferences including The Ruby Hoedown, Adhearsionconf, Startech Chile, RubyConf Argentina, RubyConf Uruguay and Rubyfuza. Mojolingo encourages me to get out to talk about Adhearsion and keep my skills current. This is in sharp contrast to my previous three years of working for large companies where I was lucky to attend one conference in a six month period usually having to fight to get time off and paying for it myself.
So how do the conferences stack up?
The Ruby HoeDown - If you live in the Southeast it is the best value going. It is a very inexpensive conference with some very high quality speakers. The after parties are good, and a lot of hacking happens there. If you go and want to stay connected to the net for hacking I would recommend that you bring a 3g or 4g device to tether to.
Adhearsionconf - I am biased here, but this is a great conference. Last year we had about 30 people show up. The quality of the attendees was great and it was also in one of the best cities for tech....San Francisco. If you work with Adhearsion it is worth the trip for both the content of the conference, rock solid net connectivity, one of the best cities for tech...and plenty of sight seeing activities if you want to tour around.
Startechconf Chile - Last year was the first year for this conference that had somewhere between 800 and 1000 people. I have to say that I was very impressed. There was nothing quite like getting up on stage in front of 800 developers to do a lightning talk. As with many large conferences Internet connectivity was a little touch and go, but being a first year conference I'm sure that will improve in subsequent years. The talks from Startech are all across the board and cover multiple languages and technologies over three tracks. It's a shame that this conference was on the same dates as Rubyconf Brazil because it would have been nice to catch both. There is a rumor afoot that there is going to be a Rubyconf Chile sometime this year or next which should be interesting.
Rubyconf Argentina - This was scheduled two days after RubyConf Brazil and StartechConf. It was perfect for using one big trip to hit multiple conferences. The quality of the presenters was excellent, the food was good and the venue was really cool. From looking out in the audience it looked like there were about 350 people over one track. As with many conferences Internet connectivity was touch and go, but overall it was a great experience.
Rubyconf Uruguay - This is a very well funded conference that was held two days after Rubyconf Argentina. They even gave comp tickets to people who's talks were not accepted. This was held at the Entel conference center which ensured that the Internet was amazingly fast. The other thing that I really liked was that the conference center had desks at many of the seats in the stadium and plenty of power outlets. The talk quality was really good. With what appeared to be about 150+ people spread out over one track it was the smallest of the three conferences that I went to in South America. One of my favorite pieces of the Rubyconf Uruguay was the ferry ride to and from Argentina where I had a chance to hang out and trade tricks and tips with Sean Cribbs and Arron Patterson.
Rubyfuza - This has thus far been my favorite of the Ruby conferences. It is much smaller than the other ones, but the quality of the presentations was really good. The thing that I really liked was that it was small with just under 100 people attending. This allowed you to really get a feel for the group. It also had the highest quality food of any conference that I have been to and some fantastic cappuchinos. Unlike some of the conferences where there the drinkups where sponsored, but not the meals, meals for both nights were paid for by sponsors and the drinks were your responsibility (something I prefer). They also followed it up with a code retreat with Corey Haynes which was awesome! Between the Code Retreat and that main conference I met some really great people both from the International speaker community and from South Africa. The South African presenters were at a level where they could and should present and conferences in the US and Europe.
On benefit to the conferences in South America and South Africa is the time of the year they are held at. The South American series was held in November which means that you will have long days and warm weather which for me was ideal. With that being said South Africa really takes the cake. Rubyfuza is held in the beginning of February which is an ideal time to visit Cape Town and South Africa is stunning. I say that even-though this was my third time travelling to this part of the world. The mountains in Cape Town are beautiful, you have the beach, Table Mountain, Robben Island numerous wineries, Chapman’s Peak and some absolutely wonderful restaurants. Rubyfuza also happens within a week of Scaleconf which is a web scaling conference in Cape Town. If you shop around for your ticket you will also find that it will cost about the same to fly from the US to South Africa as it does to travel to South America. In my mind this makes it the perfect way to combine two awesome conferences and a holiday. If everything works out next year I am going to try to go down to Cape Town for a month so that I can work from there, enjoy the weather and attend the next version of this awesome conference.