The most frequent asked questions I encounter on, for example, LinkedIn start with "What is the best..". "What application is the best for doing x?" etc.
And every time I comment on such a discussion, my answer contains the message "There is no tool that is the best. There's no tool to rule them all". What matters is that the tool works for you.
This blogpost is not about code packages I use, but about the tools I use to organize myself, to keep my data/thoughts/code in sync to minimize the time loss on stuff I want to do good, but quick so I can maximize the time to do what I love most: write code! This post is about what works for me and, most important, WHY it works for me! If you have any additions to my list or awesome stuff that must be mentioned, feel free to add them in the comments below this post.
First, my situation:
Personally, I travel about two hours every Monday through Friday between my house and my work. As I travel by public transport and, luckily, it is often not too crowded. I've got around 60 to 80 minutes per day of 'lost' time which I can fill in freely. Sometimes I like to sleep, sometimes I bump into friends, sometimes I like to get some work done and so on.
The latter is kind of crucial when picking my tools. I want to maximize the time available to me to get as much work done as possible.
Therefor, I need tools where the online-part is an extension of the offline part, but not a requirement. My essential tools are:
This could also have been iCloud or any other syncing service I guess, but I'm using Dropbox for some years now. I use it to sync files and folders with my phone, tablet and laptops. Unless I got large files to transfer, I don't use USB sticks, memory cards etc. I transfer the ebooks which I want to read from my library to my Dropbox account to read them on my phone, laptop or tablet. My books folder only contains titles I would like to read in the near future. Once I finish the book, I can remove it from Dropbox. This keeps my head and my reading list organized. If a book's not in there, it's either not important or I should add it.
Another application which I'm using for a couple of years. Especially the web clipper feature. Often, when at work, I pick up a tweet referring to an article, but I can't read it at that moment and/or it's useful to save for later use. The Web clipper can save the url, page or article for me. I only add some tags to it so I can quickly look it up and I sync it. As I have installed Evernote on my phone, tablet and laptops, I can read it back whenever I want on any device I got at that moment. Once I'm done reading and if I don't need the note any more, I can delete it and it's off my list. This also holds for things like notes. All my braindumps go either into Dropbox or into Evernote.
Again: I could also use the reading list feature of Safari for web pages or articles I want to read later, but Evernote works for me!
I just love this IDE. After working with Notepad, Notepad++, Smultron, Eclipse and Netbeans, I came across some blogposts of people using PhpStorm and tried to check it out. In a short amount of time I was able to integrate some tools like the BitBucket connector, but also (more recently) PHP Code_Sniffer. Next to that, the built-in code-completion, variable and function usage checking, support for Phing files and probably more nifty little features which I'm forgetting to mention made me stick with this IDE. These tools not only made me code faster, but more importantly: they made me code more consistently. I also spot errors faster, which saves me lots of time. All in all, this is the IDE that makes happy and productive.
Working with Git is a must for me. As I mentioned earlier: I also work when I'm travelling, so I'm not always ensured to have access to the internet. Git allows me to use versioning on my codebase offline. When I'm online again, I push my code to my online repo. The most important in this is that I'm still able to have small commits and with that, when I'm coding during travelling, my behavior regarding commits is no different from when I'm coding on a location where I have internet. In the times when I used a Subversion server, I would commit large changesets when I arrived, while committing smaller changesets (I like small commits to keep things organized and to keep code reviews fun.. nobody likes reading large changesets, right?) when I was coding while having internet access.
I switch between workstations / laptops a lot. Therefor I don't want my code to be bound to one single instance. For open-source projects (like Bolt (http://bolt.cm) I use Github. For closed source projects I use Bitbucket. (Why host your own Git repo if you can use their excellent service?). Fetch, merge, commit and I'm all up to date.
For Time tracking I've used Kimai, but it made me open a web page and log in to actually start and/or stop the timer. Ever since I've started using Harvest I'm not considering another time tracker any more. It provides an online interface to start and stop your timer, but there's also an app for doing that for both your phone as well as your computer. I'm starting the timer from my dock without any hassle. Next to that, Harvest also offers business accounts. These offer functionalities to manage clienst, projects, create estimates, create invoices and even payment options. And I haven't even taken a look at the extensions it has to offer..
As I said earlier: I switch computers all the time. Therefor I wanted a password manager which I could use without having to sync data manually or carry USB sticks or so. I've found my solution in combining 1Password with Dropbox. The 1Password application saves my password encrypted in Dropbox. The application runs on your computer, cross-platform. It also has browser extensions so you can fill in and submit login forms with as much as one click! And if you happen to be on a computer which doesn't have 1Password installed, you can still access your passwords in Dropbox as a web interface is also provided to access the encrypted passwords database file. Oh, and of course they also have an app.