1x developer

A perspective on being an effective software developer in a full remote role.

The software development world has shifted towards remote work. Prior to 2020, the remote model was only available to select groups of people. In many cases, it is now mandatory and sometimes just available to everyone. I think the fully remote roles are now much more common within the whole software industry.

I’d like to offer my perspective on what can make a remote software developer more effective and competitive on the job market. The full remote or work from home model was always my preferred way of working.

With being remote or working from home you control, and are responsible for, many more aspects of your job than when you sit in the company office.

You’re responsible for your full schedule management, your utilities, network setup, and parts of the hardware you’re working on. You may also have better control of what software you prefer to solve the problems you’re working on.

Disconnect

First, I’d like to offer a non-technical piece of advice that you may have not read before. I found this piece of advice absolutely critical for success. In order to improve your learning, thinking and problem-solving you must start focusing on yourself. This means you must extremely limit the time you spend gaming or watching video and browsing social media. In other words - no distractions.

The easiest way is to go cold turkey and delete your accounts, delete those apps from your devices and block some domains in your hosts file. It is hard because you will miss those dopamine kicks. Less screen time will help you sleep, focus and think. It will free up your brain cycles for problem-solving and engineering. Over time, it will help you improve your ability to focus for extended periods of time.

As a benefit you may have more time to enjoy life, including talking to your friends and family. It will also serve you as a thick layer of protection against the amount of noise that gets pumped into your head. Starting valuing your most precious resource you were given - your time.

The ability to think deeply and spend the time there is crucial for solving hard problems. I firmly believe that deep thinking can be learned, trained, and that you must do it on your own. I’m sure your future self will thank you for doing it.

Hardware

First things first. Start by installing a UPS for both your workstation, network, and internet equipment. You must have this under control. No surge should destroy your expensive and customized equipment. No sudden power flicker or outage should knock you offline.

In Mac-compatible development environments the most cost-effective option for your workstation is a MacBook Pro. Best benefit is that you can always close the computer and take it with you anywhere. When selecting a model, you should go for one with the most RAM. The memory will be your most limiting factor while working with your IDEs, compiling, possibly running Docker and having web browsers with many apps open.

I think the current MacBook Pro hardware design is better, but still quite unfortunate. There are no USB-A ports and no wired ethernet port.

To get a better screen view, webcam experience and to have more space on my desk I have the computer raised on a laptop table stand.

Working full time on a laptop touchpad and keyboard quickly becomes very uncomfortable. This is why I use a precise mouse and a mechanical keyboard.

A gaming mouse like the Razer DeathAdder is a great choice for any professional work. It offers great precision and standard-mouse ergonomics that will help you correctly navigate the user interfaces.

I recommend you use a real mechanical keyboard. It will help you with precise typing because the combination of good tactile response, sound effect, and visual feedback helps train your brain. There are many types of mechanical switches. If you’re unsure on which one is right for you, buy a Cherry Switch sampler kit. I prefer to use a mechanical keyboard with Cherry MX Red linear switches as they are less noisy. For the keyboard I can recommend HyperX mechanical keyboards. I think they are priced very reasonably compared to other brands.

You’ll hit the lack of USB-A problem with these accessories. To solve it, I bought a few cheap USB-C to USB-A adapters.

I also use the USB adapters in combination with a USB-C gigabit ethernet adapter that also happens to have a couple of USB-A ports.

Network

A reliable internet service is now very important while you’re working remotely. For many years I used VDSL, Cable, and I was finally able to switch to fiber. I know what I’m talking about when I say fiber means the best latency and bandwidth. If fiber is available in your area you should switch to it immediately even if it’s more expensive than other options. No fiber in your area? Explore options having it installed. If your provider offers symmetrical service, you should have it.

Your employer or clients pay you to work on solving their problems. They don’t pay you to wait for data transfers. Unless you’re using some form of virtual desktop environment, a VDI or RDP, slow, asymmetric or unreliable internet service makes you slower and less efficient at your job.

While you’re working, you should have all of your hardware wired as that helps you skip potential reliability issues and allows you to always have the full bandwidth available.

You should set up your network by splitting your work and home environments. This is to isolate your work environment from the rest of the network. On the network level it means using different VLANs and having ports on your switch assigned to them. With Wi-Fi, it means having different SSIDs with virtual network devices. Traffic on these devices and ports will be isolated, routed and NATed independently. Devices in your work environment won’t be able to access your equipment and see other devices. Your home network devices will never be able to see your work devices' environment.

One of the easiest ways to accomplish splitting the network is by using a high-end advanced router that will also keep your publicly accessible IP endpoint secure and patched up. If you’re a power user like me, consider getting Turris Omnia. The Turris devices are running an open source operating system. They also have an active community with lots of resources, ideas and help available.

When your router is in a different area of your home than your office, you may also want to consider running both of your home and work networks on the same ethernet wire. This means you may want to put a managed switch with VLAN capabilities in your office. Because it’s a managed switch, you can assign different ports to different VLANs (home and work), physically isolating your networks and devices from each other.

Software

With software being tied to the hardware I recommend you to start by using macOS. If you can’t afford the original Apple hardware to run it, look for x86-based alternatives. macOS is the operating system for serious work with everything you need.

First run the Settings and bump the system font size. Modern displays with 144dpi are great, but all text just looks smaller. Save your eyes some pain and make the fonts easier to read directly in the OS.

Next run the default Terminal app and install Homebrew. Homebrew is a critical component for maintaining software and packages in your operating system. You can install Homebrew by copying and pasting the script from its website.

After you installed Homebrew, upgrade your terminal experience by installing the iTerm2. It’s a better terminal than the default Terminal app. Adjust the settings, increase font size, disable sounds, adjust color scheme and change the prompt.

Now you’re ready to install Mac App Store command-line interface (MAS). This is an extremely useful tool to install software available in the App Store directly from the terminal.

Use MAS to find the Xcode App in the App Store using mas search xcode | head -1 and use the result to install the application mas install 497799835. This command will download and install the latest version of Xcode. You’ll have access to the Apple compilers and runtimes.

Before you start any project development work it’s best to also start using a language runtime manager like Python pyenv, Ruby rbenv or Go goenv. These managers significantly reduce the problems of maintaining multiple versions of language runtimes in your projects, and they provide a clean native alternative to running projects in Docker containers. They will also make your debugging significantly easier.

I recommend installing a good text editor to keep your notes, commands, code snippets. Sublime Text is a simple editor, and you will not regret using it.

Finally, since you’re a professional, you may want to save yourself some time and frustration and you definitely want to be effective. Now this effectiveness is largely driven by your ability to focus, and the tools you’re using to solve problems. The tools must help you on your way to becoming a great and effective software engineer.

There is only one package in the world that offers a complete set of unbundled Integrated Development Environments (IDEs). This package is the All Products pack from JetBrains. I don’t know your programming language preferences, but over the years I found myself writing code in Go, Python, Javascript, Ruby and C/C++. The JetBrains products are premium, and they are the best. I’m currently not sponsored by JetBrains, and I’m happy to pay for their great products. The free alternatives don’t come even close to the feature set, plugins, coherence and user experience.

Saving Money

Everything from the list above costs money. Here’s a couple of tricks that can help you save some of it.

When you’re getting your fiber installed, you may not need the highest plan. Take advantage of any promotional offer and get the plan that’s in the low-middle. Don’t shoot for the highest plan from the start. Consider buying the equipment from your provider or using your own if at all possible.

Do your research on where you can buy hardware. I frequently use Ebay to find cheap hardware. A good example is the UPS. You can buy it on Ebay for way less than a new one. A second hand UPS usually goes without batteries, and you can easily buy the batteries separately. I saved quite a bit of money doing that.

The same thing applies to network equipment, you may need an access switch for your home office. You can find very cheap gigabit-capable Cisco switches from the 2960-C and 3560-C series on Ebay. Since Turris Omnia is not cheap, you may want to watch or post on the Turris Forum Market as there may be someone willing to sell their router.

For the keyboard and mouse you can get the renewed products directly on Amazon. They go cheaper and will do the exact same service.

Finally, you may want to consider buying a second-hand MacBook as that may save the most significant amount of money. There are many ways to do that, consider looking at Ebay or buying a refurbished one directly from Apple.

Conclusion

The above list is not everything, but these things work for me. Writing the list down helped me reflect on what I did and why I did it. Everybody is different, but I believe there may be a quite large intersection of things that a rising software developer needs to be productive and successful. Remember, always do what works best for you. Use ideas from others (including me) just as an inspiration.

TL;DR

  • Limit gaming, video sites and social media. Stop wasting your time.
  • Get fiber internet.
  • Save money by looking at Ebay and consider buying refurbished or renewed products from Amazon.
  • Install surge protection and UPS backups to your network equipment and workstation.
  • Buy work hardware. Here are some ideas.
  • Use macOS. Install Homebrew, iTerm2, MAS, Sublime Text.
  • Look no further and get the All Products pack from JetBrains.