My principles of choosing and managing software and hardware as a developer
Tags: productivity
Published: 2019-07-08 14:00:21

---
title: My principles of choosing and managing software and hardware as a developer
published: true
description: I share how I organize my software and hardware and, in particular, my work computer so that I am more productive. And what are your principles?
tags: productivity, discuss
canonical_url: https://alex-rudenko.com/posts/my-principles-of-choosing-and-managing-software-and-hardware-as-a-developer/
cover_image: https://thepracticaldev.s3.amazonaws.com/i/rmksqp5gin3al2wi0j87.jpg
---

Hey! Welcome to a non-coding post where I share how I organize my software and computers. That's probably the first post of mine which is not about coding! Share your thoughts too and let's start:

## 1. Make use of default configuration

When I install new software or get new hardware, it's essential for me that it suits my needs out of the box. I know many people who like configuring their software or even building it from the sources. It's not for me: for example, for many years I use the default Ubuntu version without customizing anything. So since 2008, I lived through the days of Gnome, Unity, and Gnome again. I feel like it saved me much time because I didn't try to change the systems or migrate to new ones. All I did was adapting to minor changes over the years.

Therefore, it's also essential to choose the products which are suitable for you by default. Often, if you need to change the product a lot, it might not be a good fit and can cost you much time.

Also, I check upfront if the software I plan to use will be compatible and working well with the hardware I am about to buy.

## 2. Set up backups for all important documents

It is what I did 4 years ago: I made sure that everything in my documents folder is regularly backed up. Even if my hardware dies or gets stolen, I can access the backups anytime. There are multiple ways to set up backups: you can use Dropbox or other services. I chose a different way: I purchased a network-attached storage system from Synology, where I have two hard drives in a RAID. Synology offers a backup program which you can run on your system to backup every document automatically. My NAS is not exposed to the Internet.

Additionally, I do the following:

- all code I write lives in online services such as GitHub or BitBucket as well as my work computer
- I back up photos I take with my phone to Google clouds (to help them do machine learning, you know). The most important photos I back up to the NAS. Regarding the rest, I am fine if I lose it, but it's convenient to keep it at Google and enjoy automatic sync.

## 3. Use a password manager

I use [KeePassX](https://www.keepassx.org/), which stores passwords encrypted locally. I only create passwords on my primary computer, and it gets immediately backed up to the NAS. I keep a copy on my phone so that I can access services if I need to.

## 4. Don't automate installation and configuration of software you currently use

I don't automate the installation or anyhow back up the configuration of most tools that I use. My reason for not doing it is that if my computer breaks and I need to set up a new one, most likely, I won't need to use all the software I installed over the years again. Often, there is a better way or a better software to solve a particular problem, so I want to discover it the next time I set up a system. Problems are getting solved every day, and bug fixes are released, and there is a good chance that whatever you would be automating today is going to be obsolete.

One example for this: NVIDIA drivers were used to be hard to set up and configure on Linux. I could have spent time automating the setup and trying to streamline it somehow, but developers of Ubuntu and NVIDIA eventually made good progress, so the drivers work out of the box.

## 5. There are exceptions to all the 4 rules above

The world is not perfect, and sometimes I don't use a password manager or forget to back up a document. Now and then, there is an outstanding software which I stick to for a while and which does not change often, and it makes sense to invest more time in it, such as, for example, setting up your primary editor or terminal. Nonetheless, I try to minimize the time I spend on this.

So to summarize, I store my data in multiple places, so the chance of all them being destroyed is lower. I minimize the amount of time I dedicate to configuring and tweaking my software. Instead, I focus on finding software which works for me out of the box. I benefit from switching to newer and better tools over time because I am not heavily invested in my current toolset. Moreover, if I need to recover my setup, it usually takes very little time.

*originally published in my blog at https://alex-rudenko.com*