This article describes my working setup (hardware and software) as a remote freelance Java developer. I've been working from either home, co-working places, or cafes for almost two years. That's why the setup is split into two working modes: working from home and working mobile in a co-working place. On top of the hardware setup, this guide includes the software I'm using on a daily basis.
The linked products are affiliate links. If you buy through these links, I'll get a small cut.
Java Developer Work from Home Hardware Setup
Let's start with the hardware setup I'm using when working from home.
I'm working and developing software on a Mac Book Pro M1 2021 16GB Ram 13,3 Inc 512 GB laptop with a touch bar. In the past, I've frequently switched between using Windows, Linux (Ubuntu), and Mac. But I've now stuck to Mac as the tooling support, as well as the integration to my tablet and mobile phone, is perfect. While the price is enormous compared to what you get when buying a similar Windows laptop, I can deduct these expenses as I'm a freelancer.
I went for the 13.3-inch screen size because I frequently work from co-working places or travel by train. A smaller device is better in such situations. After solving some initial hurdles as a Java developer working with an M1 chip (arm64), I'm now really productive with this laptop, and it's super fast and slim (good for travel).
The MacBook is connected to a docking station (Raidsonic ICY BOX IB-DK2245AC) via USB-C and to an external monitor. As I'm frequently changing workplaces, I want a smooth transition without any cable resorting. I can just remove the docking station cable and put the laptop into my bag.
The screen is a DELL S2721QS (27″) 4K TFT. I'm fine with having two screens in total: one external monitor and the integrated Mac screen. While the monitor allows for 4k resolution, I usually use a 1920×1080 resolution.
The laptop stand for my WFH setup is a solid non-adjustable: Rain Design mStand. To organize my desk, I'm using an IKEA stand (ELLOVEN) for the external monitor. With this stand, I can additionally store some pencils, paper, cables, and USB sticks.
All this hardware is placed on a 200x80cm height-adjustable desk from IKEA (BEKANT):
I try to balance the time sitting and standing every day. There's no better investment than investing in your health and work setup that will last.
The chair is also from IKEA (LÅNGFJÄLL) and is stylish and comfortable.
As I'm regularly organizing and scanning receipts, I've bought the Brother MFC-L2750DW. This printer works with AirPrint (Apple's printing solution) and has some built-in apps to scan a document, convert it to PDF, and directly upload it to a OneDrive folder.
As a fallback solution, I still have a desktop machine. This is an Ubuntu 20.04 with 16 GB RAM and an i7. If my main laptop has issues, I can easily switch to another machine. On top of this, I sometimes use the Ubuntu machine if there's no compatibility with the Apple M1 chips for any enterprise software of my clients.
I started with the Logitech MX Keys keyboard but switched to the Apple one. The Logitech MX Keys keyboard is still used for working with my Ubuntu machine. Both the MX keyboard and mouse have a neat feature to connect to up to three devices and switch the current machine context with just a click.
For meetings and calls, I'm using a Jabra Evolve 75 headset. For sharing a picture of myself in those calls, I'm using the built-in MacBook Pro or a cheap 1080p camera. This USB camera works well, but I might soon upgrade to a new one.
The underlying mat is from Amazon, and it helps me to keep the desk surface protected and works perfectly with the mouse.
Java Developer Mobile Co-Working Hardware Setup
When I'm out of home, I slightly change the hardware setup. The co-working spaces and cafes usually don't offer any external monitors. That's why I have to improvise and find a good balance between carrying too much hardware with me and having a healthy setup.
I've recently bought the Nextstand V2 laptop stand. This allows me to have good posture as I'm looking up straight into the laptop and not down. The downside of using a laptop stand is that you have to carry a keyboard and mouse; otherwise, typing will be hard.
If I need a second monitor, I connect my iPad Pro 11″ as an external screen for my Mac Book Pro. The Mac comes with a built-in feature for this.
I'm using either the Apple AirPods Pro or the regular Apple headphones for calls and listening to music. Most co-working places offer phone booths that ensure there's no background noise.
Some additional accessories I'm using for this mobile working setup are:
- Laptop case
- Travel case for the keyboard
- USB-C to USB-A adapters
When traveling, I switch between these three bags:
- JOOP! Treviso Pandion Briefbag S Black
- Backpack from onemate: Discovery
- Brown laptop bag from s.Oliver
Online Course Recording Setup (Hardware & Software)
As I'm creating video content for both YouTube and my online course platform, I'm recording audio every now and then. I started with an external mic, as many streamers or podcasters have. This microphone was attached to a microphone stand and attached to my desk.
While this worked fine, I recently switched to a headset for my recordings. For me, this feels handier. I only have to switch on the headset and can start the recording. No need for an adjustment of the microphone, and I can move back and forth in my chair without affecting the sound quality.
The headset I'm using is a Beyerdynamic DT-797:
However, I can't wear this for more than 2 hours straight because of the pressure on my head. The headset rests safely on a stylish headphone stand from Amazon.
To convert the analog audio signal from this Beyerdynamic headset, I'm using a Focusrite Scarlett 2i2 3rd Gen Audio Interface. This lets me plug in the headset via USB-C to my docking station.
I'm using Screenflow to record and edit all the content I create on the Mac laptop. When working with my fallback Ubuntu Desktop for recording, I'm using Kazam, Audacity, and kdenlive.
Software for Java Development
Let's continue with the software part of my setup as a Java developer.
The application I spent the most time during the day is my IDE. I'm using IntelliJ IDEA with the following must-have plugins:
- AsciiDoc (as I'm writing some of my ebooks in Asciidoc)
- Presentation Assistant to show a toast notification whenever I use shortcuts
- SonarLint for basic code hints
- Key Promoter X to learn more IDEA shortcuts
I switched from Eclipse to IntelliJ five years ago and have never looked back since. I'm using their Ultimate license and really enjoy the productivity gain and features of this IDE.
I use jEnv to manage various Java installations (I guess it's time for me to get to know sdkman) and easily switch between Java versions. With jEnv, you can place
.java-version file in the root of each project and define which Java version to use. When navigating to a folder with such file, jEnv configures your shell session to use the selected Java version. It falls back to a globally configured Java version if no Java version is defined.
For the shell, I'm using
zsh with Oh My Zsh. I'm using the default theme
robbyrussell, and the following plugins:
I've installed iTerm2 as a replacement for the macOS native terminal. The main reason is the split pane feature that allows me to run multiple shell sessions on a single screen.
When editing files on a remote server, I prefer vim over emacs. However, I'm not a vim ninja, but I feel comfortable editing config files with it.
For quick project investigations or when writing blog posts in Markdown, I prefer VS Code. I have installed the following extensions:
- Extension Pack for Java
- Debugger for Java
- Language Support for Java by Red Hat
- Maven for Java
- Intellij IDEA Keybindings
Next, I'm using Postman for tinkering and exploring the API for systems that I'm about to integrate. I've created an account on their site to share my API collections among multiple machines potentially.
Last but not least, I've installed Docker Desktop for Mac. As I'm a sole trader, I don't fall into Docker's new licensing agreement and can continue to use their desktop installation for Mac. However, as one of the main reasons for me to use Docker locally is to run tests with Testcontainers, I'm using Testcontainers Cloud whenever I can. This tool lets me run my Testcontainers integration test locally without the need for a Docker engine, and it speeds things up when I'm on bad WiFi.
Java Developer Utility & Productivity Software
Let's finish this hardware and software guide for Java developers with some utility and productivity software I'm using on a daily basis. Some of them are not directly related to software development. However, they help me stay productive or organize my workday.
First, my primary browser is Firefox. I'm using Firefox also on my mobile devices and syncing my bookmarks to, e.g., read interesting articles on a train ride after having bookmarked them on my laptop. I use Chrome and Safari less frequently and mainly for testing purposes of my blog and applications.
For messaging and coordinating in a remote and asynchronous world, I favor Slack. If I'm not working for a client, I never have Slack open all the time and instead open it every two or three hours to stay focused on my current task.
I'm using the Google Workspace to organize my solo company and use the Gmail web view for managing emails.
On top of Google Workspace, I still have an Office365 subscription. The main reason for this subscription is the fact that I can share the office applications with up to five people and get 1 TB of OneDrive cloud storage. I use OneDrive for most of my personal files.
To quickly adjust and split any application window, I use Rectangle. This simple application allows adjusting the sizing of windows and quickly placing two next together, for example.
Another small and super helpful macOS tool is Maccy. This clipboard manager on steroids keeps a history of all my clipboards and lets me efficiently use a previous one.
To quickly record my screen or share screenshots, I'm using CloudApp. Once you finish the recording or take a screenshot, the tool will immediately upload the content, and you get a sharable public URL. This is helpful when working with a support team to share error reports.
For all my personal notes, checklists, and book summaries, I'm using Notion. Notion lets you organize your content with Markdown-based files and offers an intuitive and fast user interface natively in the browser and on mobile devices.
Spotify is another application that I immediately install when setting up a new machine. Listening to music helps me get into the tunnel and stay focused. For deep work and when doing creative tasks, I prefer piano music. For all other tasks, I frequently mix the music genre.
All my passwords are stored within the password manager Dashlane. Dashlane comes with a browser extension for every major browser and also seamlessly integrates with the iOS password manager. The times of noting down my password with pen and paper are over. With the help of a password manager, you can max out the security requirements for all passwords as you don't have to remember them.
For organizing my workday and task planning, I use Kanbanflow. I plan all my days ahead and split the tasks into 25-minute Pomodori (Pomodoro Technique) chunks. The tool runs as a web application in the browser and comes with a Pomodoro timer that I use to know when it's time to work and when it's time for a break.