Software Engineering Tool Set - A Survey
I'm getting ready to start a new job and help my new team pick a development process and a set of tools that best suits their needs. This seemed like an ideal time to do a little research and check in on currently popular options. I created a survey, and circulated it through my personal contacts and the twittersphere.
Who answered the survey?
The first set of questions were designed to give a little context for interpreting the rest of the results.
The survey was answered by 34 participants, most of whom were CTOs of VPs of small start-ups. Participants included divisions of Amazon, large Agile consulting companies and a whole variety of trendy start-ups.
We use a wide array of languages. I was happy to see that PHP (finally!) seems to be on it's way out.
Unsurprisingly, we've all embraced some flavor of Agile.
A full 50% of respondents work in organizations without product managers. This is highly correlated with the size of the organization. Everybody with more then 10 engineers also had product managers. Nobody with less then 5 engineers had a product manager.
I do wonder though, the real correlation is with company age, not size. During recent interviews, I was surprised by the lack of PMs and started asking the following question: "I notice you don't have any product managers. Is this just a function of your current company size and stage? Or is this by philosophical design?" Invariably the response was "by design". As organizations more fully get into the groove of iterative, Agile development, I wonder if this role is starting to be seen as an unnecessary layer between the customer and the engineers.
What Tools Are We Using?
Unsurprisingly, we're leaning heavily towards Git.
Surprisingly, many of us are not doing continuous integration. For those that are, Jenkins is the clear tool of choice.
For code review, GitHub Pull Requests are winning out over targeted code review tools (like Gerrit). Here's the definitive GitHub Flow blog post describing one way to do this in a continuous deployment environment. A similar approach could be taken if you're releasing to production on a regular schedule and using a Git Flow-like approach. In this case, the pull requests would occur when merging from a feature branch into the development branch.
Task and Defect Tracking
Task tracking tools were all over the map. Larger organizations tended to use JIRA. For the smaller shop, Pivotal Tracker was the winner, with GitHub, Sprint.ly and Trello as rising stars. This corresponded tightly with development methodology. Teams using Kanban or Scrumban are also using Sprint.ly or Trello.
Virtually nobody absolutely adores their task tracking tool, and (surprisingly) virtually nobody hated it either. A couple of "Actively looking for something better" for JIRA and Bugzilla (oh, you poor, poor darling), and a resounding of chorus of "Good enough" for everything else.
Most people used the same tool for defect tracking as for task tracking, and, again most people said whatever they were using was "Good enough".
Tools for phone screens was, for me, the most surprising result. Most respondents said that they do not include a coding exercise as part of their phone screens, and nobody is using any of the many tools designed for this purpose. Of course, I highly recommend that you all get started using theReq right away!
Now that I have these basic results, I wish I'd asked a few more questions. What are you using for inter-company chat? How often do you deploy to production? If you use Git, which branching model are you using? Does your company publish a technical blog?
Oh well... next time! To everyone who participated, thanks for your input!