The Developer's Toolbox

Jan Olbrich
Mobile Quality
Published in
7 min readFeb 28, 2018

--

Quality is a result of the tools we use. The more familiar we are with them, the better (or faster) will be the result. Of course we can achieve a lot with a minimal toolset, but to get more productive, we should always strive to master our current tools and find new ones which will improve our workflow. I'm always looking for new tools, so if you have any I don't use yet, please tell me.

Without further ado, here is my toolbox:

GUI Tools

1Password

Store your passwords and have them save. I used different password manager, but for over 10 years I stay with 1Password.

Dash

Ever had to lookup docs for anything? I do it in Dash. If the docs are not there yet I’ll import them. This way they are available offline and all the integrations (e.g. Xcode) make the usage even better.

Little Snitch

Want to know, which apps try to do network requests? Do you want to control them? This is the tool for you. I’m using it for years now and it didn’t disappoint me.

Network Link Conditioner

As mobile developers we often forget, that our apps are not used with a stable internet connection. To replicate it on our Macbooks we can use Apples Network Link Conditioner. Just change the network the way you want it and your whole Mac will have this connection (So if you drop all packages to see what happens, you can’t read reddit while waiting).

Paw

There are soooo many apps to send HTTP requests. I use Paw. The main feature which makes it better than POSTman <link> is chaining requests. This way I don’t have to authenticate every single time. Instead I just run one command and it does everything I need.

Quiver

This is by far my favorite note taking tool. Not only can you order your notes by collections (and subcollections) you can even use different cells which contain either code, markdown, text, etc within a cell. Let it render the entire note to pdf and you’re good to go.

Reeder

As developers (and especially mobile developers) we have to stay up to date with new developments. Mostly we can do this by tracking blogs. I do this by using Reeder. It’s a nice little tool to aggregate RSS feeds.

Reveal

Ever had visual bugs? Had to work with an UX designer? Reveal is my choice. In a new codebase I can just fire it up, look for the correct view with the bug, find the name of the class and know where to start. On the other hand, with an UX designer, we can sit down and change properties (including Auto-Layout) in real time. Really useful!

Sketch

Whenever I do any UI work, I do it in Sketch. It’s so easy to use, there is no reason not to. Just be aware it’s vector only, so if you want to change any images, you’ll have to use something else.

Sourcetree

Sourcetree is a GUI to git. I do use it as it simplifies a lot of things. At the same time you shouldn’t rely entirely on it. Learn some pure git and work with it. You will improve just by understanding how git works. Just knowing how to setup hooks is worth it. There is also Tower, but I just don’t get along with it.

Sublime Text

Everyone of us needs a text editor. For me this is Sublime Text. The huge advantage is the plugin system. I know there are others like Atom but if there is no need to switch, stick with it.

toggle

I’m working at a company which does internal billing. So we have to track out times. I do this with toggle, as it provides a macOS and iOS app. Furthermore a colleague wrote a Tampermonkey script, which imports it into our billing application. Quite useful ;)

Workspaces

Have you ever worked on multiple projects at the same time? Depending on your setup you want directories open in Finder, development server started etc. Workspaces does this for you.

Xcode

People love it, people hate it. I use it, as it is the right tool, as there is (in my opinion) no alternative. AppCode seems to be nice, but I only ever fire it up, if I'm cold. It just burns your battery and you still have to use Xcode for CoreDate, Storyboards or even simple Project Settings. So just learn it and get along. Refactorings are now included in Xcode9 so one reason less to not use it. Also I heard a lot of complaints about Xcode, which I haven't experience at all. Don't get me wrong though. Jetbrains creates amazing IDE's. I use Webstorm and Goland. Just AppCode is not one of these and probably never will be.

Terminal Tools

brew

The tool of choice for package management on macOS. There is also MacPorts but I have the feeling less and less applications support it.

Bundler

Bundler is a way to manage Ruby Gems. This way every project can have their own set of gems and you store which ones they are in your repository. As long as you don’t have to change your Ruby Version this helps a lot.

Carthage

The more I’ve used CocoaPods, the more I started to hate it. It creates a workspace, modifies your project imports, requires a specific Ruby version AND every time Xcode updates to a major version I have to change signing within the Podfile. Instead I’m using Carthage. It just creates the framework for you and you import it by hand. No changes to your project, you didn’t do. This makes it also easier to import, if you are working on huge legacy codebases which are based on custom framework, which provide a custom xconfig (Yeah.. sadly this exists and I worked on it). So Carthage is my tool for Dependency Management.

fastlane

We all know this one. Fastlane makes it easy for us to set up our CI. Though be aware, it’s mobile development only.

mas

mas enables you to write setup scripts and install apps from the AppStore without having to do it manually.

Neo2

This is not really a tool, but a keyboard layout. I’ve never got the hang of the touch system, so I decided to pick a layout which isn’t represented on a keyboard and is designed for programming. This is for me Neo2. Sometimes I have to wait before upgrading to the newest macOS but for me this is worth it, as I don’t have to do finger gymnastics to reach “{}” (look at a german keyboard you’ll know what I mean).

rbenv (goenv, pyenv)

In every project there are different environments I need to manage. Depending on the Fastlane version I need a different Ruby version. Other tools might require Python etc. I found *env to be my tool of choice. They are easy to setup and have the same interface. At the same time, as they modify your path, you know exactly how they work. They also don’t replace any of your current tools.

sake

This is a nice small tool to replace make files in swift. It’s still under active development but will be my goto tool to run my CI scripts on macOS.

SwiftLint

A clean codebase makes development easier. So lint your code! I do this with SwiftLint (and a custom pre-commit hook). I know there is also Tailor, but I do prefer Swiftlint due to it being Swift based.

Honorably mentions

All of these are tools I would love to experiment with, but didn't have any time yet to do so. Still they sound reasonable enough to list them here.

Alfred

Until now I was totally happy with Spotlight. A colleague showed me what he does with Alfred and now I have to try it. Just need the time.

FlawlessApp

Have to check wether your implementation fits the provided design? This is the tool for you. I didn't work on UI lately so there was no chance to test it, but it really sounds great!

Nix

Above I said I use brew for package management. The more projects we have, the more state there is. Nix tries to reduce configuration state by handling each version of your package as an immutable object. It stores all of them in their own directory and manages for you, which ones you use. Sounds interesting!

Yoink

A tool to simplify Drag&Drop. It annoys me to always change windows etc, so I have to look into it.

--

--

Jan Olbrich
Mobile Quality

iOS developer focused on quality and continuous delivery