Favorite Developer Tools for 2021
By: Hans Lee
Tags: Productivity, Development, Programming, DevOps

In rounding out the year, I realized that I now spend at least 40% of my time in different tools than last year. This is both due to COVID where my teams are remote, but also due to tools maturing.

1. Visual Studio Code

The new standard.

A year ago, I would have said Sublime Text was my only goto code editor. VSCode now has basically all the features of Sublime Text and more. It is easily available on ARM Architecture compute (NVIDIA Jetson, Raspberry Pi, etc) which really helps for building embedded or robotic projects. There are clean and understandable interfaces and it also includes a lot of extensions such as SSH Code synchronization and other interesting plugins.

Visual Studio Code has matured in the last few years.

2. Docker

Dockerize your dev environment. It’s Amazing.

In the past, I used to only use Docker as a container for deployment of scalable systems. I would first develop the code in my dev environment, then I would figure out how to make that code run in a Docker where I packaged it up and sent it off.

Now I use it much like a system-wide like a virtual environment which lets me code in any OS type or version with any custom dependencies from my Mac or Ubuntu dev environment. One of the most valuable use cases has been in doing robotic development using ROS and ROS 2. The dependencies to get ROS going are significant and, for some reason still seem to be error prone and unstable. Therefore, starting from a docker image which is based on a stable build of ROS with the added apt-get install {package} commands for my specific install, and then mounting the code directory directly into the container means that I can code from within my core dev environment but execute it in the different OS.

docker run -d -t --name robot_env --restart unless-stopped -v `pwd`:/root/workspace osrf/ros:foxy-desktop

The above line of code will boot a container with ROS2 in it and the current directory mapped to /root/workspace , ready to go.

The best part is that the time to deploy goes way down as you are running exactly as you would in production.

3. GITHub

Still the goto.

It is amazing how a single system for saving code can be so engrained in the consciousness of developers, but it is and it works.

GITHub still holds the core of versioned code and has added additional features which enable teams to more efficiently use it as a central communication hub for development.

4. PostMan

Saves hours accessing a new API.

Whenever you jump in to integrate a new platform or service into your project, you have to dig through the swagger docs, try to figure out what authentication they use, sort our payload details, try to fix CORS issues and then write 10–100 lines of code to get a reply.

Or, you just boot PostMan, type in the URL with the payload, set a few headers and are good to go. Then, a week later when you forgot what you wrote, it is all there in the history.

Postman enables you to easily test new APIs without writing code and to write groups of queries and reuse them, saving significant time.

5. Ubuntu Linux

It is a clean environment.

Unless you are developing directly for MacOS or mobile, Ubuntu is a much cleaner and, many times, better environment to write code in. With Apt having clearer dependencies, significantly more Linux support on Stack Overflow in the last few years and full stack developers now using Ubuntu, rather than Windows or Mac, as their base, starting out and building a projects in ubuntu has become much easier.

While Ubuntu has been around for a very long time, the groundswell of non-sys-admin users has really increased, making it a much better general-purpose dev environment for coding.

6. CircleCI

Better deployment.

CircleCI has advanced drastically with its updated scripting language, cross-architecture support and clean integrations with GITHub and other tools. I realized I had forgotten we were even using it for a while because everything just worked. Compared to Jenkins and many other CI/CD platforms, the overhead is significantly less, and it is not tied to a specific larger platform.

Note: That said, I will probably check out GITHub Actions for 2021.

CirceCI just works and is flexible enough with its container-based deployments that you can do anything with it that you want.

7. Chrome Dev Tools

Debug the hardware innards of the browser.

This last year, my teams released a lot of in-browser features where we had to optimize React.js code due to huge data sizes and also had to stabilize WebRTC video connections in adverse environments. All the other browsers had just a few simple tools for introspection or logging, but Chrome not only exposed much more and better data(chrome://webrtc-internals), it also formatted the logs and graphs cleanly where you could directly debug your issues in browser.

No matter if it was CSS, Javascript or API CORS issues, I found that whenever my team needed to fix something, even if it was in a different browser, they would use Chrome first to understand it.

Chrome has a huge number of debugging tools, including chrome://webrtc-internals, which give a fully detailed view into what is happening when something breaks.

8. Slack

A repository of organized knowledge, in addition to messaging.

I never thought I would put a messaging app in my list of tools which significantly increase development efficiency.

In the last year, especially with Covid, Slack has become more necessary. I realized the biggest change is that we now use it for a group consciousness, where I find myself looking up pictures people upload, reviewing code snippets and starting zoom and hangouts meetings from inside Slack itself. With the addition of groups for channels and other subtle things, it has become a lot more efficient. We even run our daily standup in it using Standuply.

Slack has become a repository of knowledge, images, videos and code snippets, not just a messaging service.

9. Google Meet

We have had a lot of time to play with and optimize video conferencing in 2020. For external meetings, we use Zoom, but I have found that for shared debugging sessions, our team uses hangouts. I think the simplest reason is that anyone can start it from the browser. They don’t need to have a zoom account, log in, then set up a new meeting. The screen sharing, and addition of hidden backgrounds, has really helped make it a tool we can use in the background while working together.