Everyone who works with computers has their essential apps and programs, but for a software developer, the tools we use on a daily basis are especially critical and can give an extra edge in being productive.
With that in mind, I’d like to share my 5 most essential apps and tools in hopes that they may help others achieve productivity nirvana.
As someone who’s livelihood depends on the code I write, obviously a good IDE is a top priority. I’ve gone from using VI to Eclipse and more recently, made the move to Intellij. I really liked Eclipse for a while but its reputation as a memory hog, especially with plugins, is well deserved. Once I discovered Intellij, I haven’t gone back. Code completion is faster, and while I’ve never been able to get auto builds to work, compilation is fast. The rich plugin universe of eclipse isn’t there, but everything I’ve needed from git and JUnit support is natively supported. Plus, it doesn’t need to be restarted every morning while consuming 2 gb of memory.
During the course of a normal day, I take notes, like a lot of notes. Documenting architecture decisions, service calls, and notes on team status are the main day to day areas I document, but I also heavily use Evernote for taking interview and meeting notes. The search is fantastic and the text recognition means I can snap pictures of whiteboards, then search later. I’m not very good at tagging or organizing notes, but with the search, I don’t find I need to. The backup is also great as I’ve killed hard drives on two work laptops now. I love Evernote so much I even use it for storing to do lists and storing my personal notes for upcoming travel.
Not really an app, but an essential tool for Java web application development. JRebel allows you to instantly and automatically reload changed class, spring xml, and jsp files on a running Tomcat web server. Our application stack is fairly heavy, and a full Tomcat restart takes 5-10 minutes. Before JRebel, I had to do this for every single change. Now, I can make a change and instantly see it reflected in the browser. So fine.
More out of necessity than choice, Mira is a huge part of day to day operations. It serves as bug tracking, backlog management, Sprint planning tool, and day to day to do list, in addition to giving visibility into what the team is working on. The integration with tools like Eclipse and intellij is also great and allows much easier and less intrusive updating of status. It can be hard to incentivize team members to update status, and making it frictionless helps considerably with this. There are definitely problems, and it can be easy to use badly, but properly used, Jira can be a huge productivity helper. Plus, it helps me focus on what to work on next.
#5 Microsoft Office
Probably not a very popular choice, but Microsoft still makes the best tools in the trade for a lot of my daily work. Obviously I live in Outlook which is actually not terrible for email and meeting management. I’m not a huge fan of communicator, especially on Mac where it constantly disconnects and never reconnects. I also frequently need PowerPoint for creating diagrams and sequence diagrams, especially for the architectural design work I do and once figured out, it’s pretty quick to throw together a quick diagram. I also need word and excel fairly often for writing reports on weekly work and operational metrics as well as planning team work. There are a lot of improvements that could be made, but I haven’t found a better, more universal tool for this type of work.
*Bonus: MacBook Pro
While probably not an option for most to easily improve productivity, moving from a PC to a MacBook made huge improvements in my productivity. The hardware alone is a huge step up, especially the display, the keyboard, and the trackpad that no other manufacturer can come close to. I haven’t always been a huge Apple fan, but there is no denying their hardware is incredible. Also, the integration with a Linux development environment is quite good with built in ssh and other Unix commands. I have my code setup on the Mac, develop in Intellij, and have it automatically sync to my Linux machine where JRebel automatically updates my server. Frictionless development is next to godliness.
So those are my top five, plus a bonus, productivity tools that help me get through my day writting code and developing software. But I want to know what yours are as well. Leave your tips in the comments below.