Software is eating the world. As such developer tools have become the foundation of the modern world. One of the main questions any leader or team member has is how to drive developer productivity. Agile techniques can help with this but ultimately as with any profession better tools ultimately lead to better results. Below are our top picks for productivity improvements.
Source control systems these days have two parts to them. The first is the tool itself, and the second is the hosted application that supports it. Lets start with the tool itself. The defacto source control system these days is GIT but there are alternatives with different advantages. Mercurial is one such with a build in GUI that works the same across Windows Linux and OSX. Coming from a Windows background or if you are a visual person Mercurial is a good option as its inbuilt visual tools are excellent. One SCM that is often overlooked is Fossil. Similar to GIT and Mercurial it has a built in bug tracker and wiki making the addition of a hosted application redundant. For large organisations with very large code bases it is worth considering Perforce. It not only scales out to huge organisations but has native large file support and similar to Mercurial has nice client UI. Read this post for a good comparison between GIT and Perforce.
On to the hosted applications GitHub has also become the defacto choice for hosting GIT repositories. A web based version control repository it hosts your git repositories managing access control, backups and providing bug tracking, project management and other functionality. GitHub offers unlimited Open Source repositories, but also offers a paid for solution for private repositories. They also offer an on premises solution.
BitBucket from Atlassian is similar to GitHub but offers unlimited private repositories although limited to teams of 5. It also offers an on premises solution BitBucket Server (formerly known as Stash) which is also considerably cheaper than the GitHub solution. Keep in mind that BitBucket Server does not currently support Mercurial and that it looks like this will never happen
GitLab is more or less an admitted clone of GitHub but with a free community edition. In addition to the free community edition there is a paid for option with additional functionality and support. As with GitHub and BitBucket, GitLab can also host everything for you on-line.
If you ever want to see a group of developers get into an argument start a discussion about their favourite editors. Much like music everyone has an opinion and their own taste.
A good rule of thumb is to just let everyone use what they are most comfortable with from simple text editors such as Sublime and Atom to full blown IDE's such as IntelliJ or Visual Studio. Keep in mind that a developer can spend all day inside their editor so paying for a Sublime Text license quickly becomes worth the upfront cost.
What is Continuous Integration or CI? In a nutshell its about integrating all your code as quickly and as often as possible. The advantage is that potential problems are identified and fixed as quickly as possible. This frees developer time tracking down issues that arise when integrating components at a later date.
There are many CI servers which perform this task, both paid for and free. Current best practice is to use one that supports code pipelines. This allows you to build a series of logical steps that download or checkout, build and test your software before promoting into test or production environments. The exact definition of CI system can be a little fuzzy with some considering tools such as Jenkins or TeamCity to be task runners rather than CI but for the purposes of this article all will be considered CI systems.
It is also considered best practice these days to treat the pipelines that build your software as code. The idea being that you can use the source to rebuild everything in the event of a disaster recovery situation. It also provides auditing of changes and the ability to roll-back to a last known good state easily.
All of the below systems support the idea of pipelines and configuration as code.
Concourse is a self hosted solution that takes the idea of pipelines as code to the extreme and as such has no ability to control how it works through the main interface at all. You maintain how it works with YML files which can be used to build the pipeline. It is tightly integrated with docker which can be an issue if you are using throwaway docker containers for testing purposes. The biggest advantage concourse has is the ability for developers to upload their current working directory as a task into concourse and have concourse run it. This solves the common "It works on my machine" problem, and for large CPU intensive tasks allows the developer to move on to other productive tasks.
Jenkins is a self hosted solution (cloud services for it do exists though) and fork of the Oracle Hudson project and considered the one to use these days. The configuration for its pipeline is done through the Jenkins file. It has an outdated interface which is slowly being replaced by the Blue Ocean project.
TeamCity by JetBrains is a mature self hosted CI system. The biggest complaint that can be aimed at it is that its build agents are only able to perform a single task at any time. For tasks that are waiting on other systems such as performing A stack update in AWS this can mean build agents are sitting around doing nothing most of the time. One other issue is that its pipelines as code export is done through unwieldy XML or through Kotlin code which is an additional barrier to entry.
Bamboo is a CI system by Atlassian often compared to Jenkins that must be self hosted. Built by Atlassian it has full integration into the Atlassian suite of products, and if in that ecosystem can provide a nice productivity boost. CircleCI is a full featured cloud based CI solution. Built with native docker support and native support to deploy directly into nearly every cloud provider. For turnkey software that does not require custom scripts this can be a major advantage.
Using the cloud and specificity cloud hosting providers with a solid API can be a massive productivity boost. Even if you prefer to keep your main services running on premise the ability to spin up and tear down throwaway servers for test purposes is a massive performance boost. To gain the most productivity out of any cloud provider you must learn how to use their API's to build servers and services with the running of a script.
AWS, Azure and Google Cloud are aimed at the enterprise and have additional functionality outside the scope of this article. However you can use all of them to spin up temp servers as test beds for ideas and to check that deployment scripts work.
Vultr and DigitalOcean are a little bare-bones compared to the above. However they are a much simpler way to get started with cloud computing. Again for spinning up test servers they are an excellent choice and have a very low cost to boot.
For maximum productivity give developers the ability to create their own servers and services and train them with the operations team on how to do so in an automated repeatable way. Not only does this improve collaboration but it will massively improve productivity.
Ask any project manager what management tools they like to use and you will get a variety of answers, but here are a few that stand out as being more productive then others. JIRA is an issue and project management tool. It started out as bug tracking software but has slowly grown out to do pretty much everything you would like with regards to project management including agile sprint planning. Basecamp is a project management and collaboration tool. It has a heavy focus on team member collaboration and really gels well with some teams. Billed as a saner way manage projects and communicate company-wide its functionality also overlaps tools such as Slack and Hipchat. Trello is project management board based on kanban paradigm and as such is highly flexible. It can be used for pretty much any project management process that could be done through paper and a wall. Asana is collaboration information manager which can be used to track teams progress similar to Basecamp with the advantage that getting started with Asana is free.
The following websites are indispensable to developers to remain productive and should never be blocked or impeded by any organisation looking to improve productivity. StackOverflow is a question answer site devoted to developers. Any problem that you are likely to every ask about any programming topic is likely to already have been asked and answered in depth on StackOverflow. The same can be said about Quora. While it has less technical focus it does have excellent discussions about software methodology and architecture. Google tends to be the developers choice of search engine, but one to keep an eye on is DuckDuckGo which has a lot of developer focused functionality such as the ability to base64 encode text and search over public source code code. Finally there is searchcode.com which allows you to search over billions of publicly available source code quickly.
Both video and chat communication are essential when working with distributed teams, and are a useful way of increasing collaboration with teams that are in a single building or floor. Appear.in is a fantastic service for quickly jumping into a video chat and does not require buying into the Google ecosystem which Hangouts does. For day to day communication IRC and Hipchat work well however Slack has swept the industry and tends to be the choice of productive teams in 2017. Microsoft has also recently joined the party with Teams. Being flexible about the communication method used seems to be the winning strategy with tools that were popular such as Hipchat being supplanted by tools like Slack very quickly.
Micro-services, GIT, distributed architectures, agile methodologies and larger code bases have made a developers job harder these days with code spread out across multiple repositories. Code search tools address this problem by providing a simple interface to search across thousands of repositories and millions of lines of code as quickly as possible. They promote code reuse to and make re-factoring of multiple projects easier, both of which result in improved software quality and reduced software costs.
Working only on local systems ack or ag are designed to be a better grep for source code. As such it includes defaults that make a great deal of sense in that context. Firstly you don't have to specify file names as it assumes you want to start searching at the current directory and by default will recurse down the file tree. It also will ignore .svn and .git folders assuming (usually correctly) that you have no need to search inside them. Its output is also styled to make searching across source code easier. Most of its arguments are similar to grep so it is instantly familiar. One really handy feature is being able to include or exclude file types using the --java --nophp syntax. It also ignores known backup files and other such redundant files.
A web based solution OpenGrok is a fast and usable source code search and cross reference engine. It helps you search, cross-reference and navigate your source tree. It can understand various program file formats and version control histories like Mercurial, Git, SCCS, RCS, CVS, Subversion, Teamware, ClearCase, Perforce, Monotone and Bazaar. It has a reputation for being a little difficult to deploy but due to its open source nature is used by many open source projects.
Krugle is a paid for web based solution and proven enterprise search engine that creates an up-to-date, searchable and browsable archive of all the code and development artefacts that have been created in your organization. Through a simple, easy to learn browser interface, users can instantly access the information they need to pinpoint relevant code, including test results, code reviews and support records. An on-line demo exists which can be used to try before buying.
Searchcode server is a paid for web based code search solution with a free community version available. Written by the same developer behind searchcode.com (one of the largest freely available code search engines on-line with 20 billion lines of code indexed) searchcode server allows you to index and search quickly across tens of thousands of GIT, SVN or File repositories. Able to identify 100+ languages and filter searches down by the sourced repository, language or the owner. Searchcode server is also able to estimate the relative cost of source code. It requires little in the way of hardware and is capable of scaling from tiny Atom powered machines to Xeon servers. It's only dependency is a Java install. An on-line demo exists and the community edition can be downloaded for an on premises trial.
Usually the collection of tools that are used by any organisation or team grows in an organic way. Given unlimited budget time here are the tools we would pick in 2017 to have a productive team and the best part is almost every single one is free or inexpensive to get started with.
The ubiquity of git is hard to ignore and coupled with a tool such as GitLab or BitBucket can be a highly productive way of working. Go with GitLab if you want free or upgrade to paid for GitLab or BitBucket if you need more power or support.
Concourse and its ability to be configured through code is best in class. It performs extremely well, has the best visualisation of how the pipeline is structured and with the push for local build option is unmatched for solving the "It works on my machine" problem. Highly recommended and free to boot.
AWS is best in class when it comes to cloud, but comes with a steep learning curve. For production level applications its scale and breadth is hard to beat. For smaller operations or testing though Digital Ocean and Vultr are hard to beat. The ability to spin up a server in a minute or two for a cost of a few cents is hard to beat and they have a simpler API to work with.
JIRA's big advantage is that everyone seems to already use it and it supports flexible work-flows. It may not be the best tool for all situations but it is customisable enough that getting it to meet your needs is almost always possible.
Appear.in has the lowest friction system for setting up a video call. Coupled with Slack for day to day communication and you. Both are free to start with and upgradeable.
Ack or The Silver Searcher (ag) are a must to have for all developers who work on large or spanning code-bases and are a must to install. Obviously we are biased in favour of also having searchcode (live demo) for those with larger code-bases. Both can be had for free to start with, and searchcode can have additional functionality with a paid upgrade.
Try searchcode server today 100% risk and money free. Use the community edition free for life, or purchase the full edition for support and customisations.