I've been self-hosting service for the past few months, but I'm not as far as I would like to be in my self-hosting journey. Over time, I've realized one of the things that people over-simplify about self-hosting is how much technical skill is involved.
Don't get me wrong, you can get started with self-hosting even if you're not a computer or networking expert. In fact, there are a number of easy-to-deploy containers I recommend for self-hosting beginners. However, there are challenges I encounter because I have no coding experience.
Not all of these challenges relate directly to programming itself, but also the familiarity coding experience would have given me with command line interfaces and the more technical nuances of computing.
I'm extremely reliant on documentation
This is a frequent source of frustration
Many self-hosting services provide detailed documentation for a number of deployment methods, along with example files for Docker deployment. At the same time, though, there are sometimes small errors or missing steps that someone with coding experience would be able to easily spot. For me, though, these errors often go unnoticed and I can't figure out why something is not working.
I've been lucky enough that a developer friend has helped me with some of these errors with different services. Other times, developers have been kind enough to help out on GitHub or Discord to figure out a fix. But there have also been many times when I can't figure out what's wrong, and I've had to give up on deploying a service.
Over time, I've learned a bit more about Docker YAML syntax, but I don't know enough to configure a service independently. I still rely heavily on instructions from the developer on what variables are needed, which limits what I can do.
It limits what services I can use
Some platforms are targeted at developers
There have been times I have successfully deployed a service, only to find that the features are aimed at people with coding experience. There are other times that I see a service recommended on the self-hosting subreddit, but when I research it further, I see that I won't be able to do much with it due to my lack of coding knowledge.
This often applies to automation platforms, but also certain self-hosted notification and uptime services. Things also become more difficult when different APIs have to interact or I need more knowledge about the nuances of networking.
I have been able to learn different skills over time, and these aren't limited to coders, but if I had development experience, I would not be as limited when it comes to the apps I choose to host.
I have started trying to learn Python to build a basis I can learn from. Even where syntax differs, it would be useful to understand principles such as variables and how different languages handle them. It's kind of how linguists approach language: you need to build an understanding of the basis of different languages, such as word order, even if you don't know how to speak them.
Troubleshooting becomes much more difficult
It's more difficult to pinpoint what's wrong
There are plenty of things that can go wrong when you're self-hosting, and you need to get used to spending a significant amount of time troubleshooting. However, I do find that my lack of coding knowledge definitely makes troubleshooting more difficult.
First off, since I can't easily spot errors in YAML documents, I spend time tweaking what I think might be the issue in hopes that it fixes the error. Because I can't be certain that the syntax is correct, it makes it more difficult to narrow down the error. I often assume it's down to my own error, when it sometimes turns out that it's just a bug in the software that requires a fix. I only figure this out if the developer identifies it as such.
Logs are also limited in their usefulness. I always check my Docker container logs to see if I can figure out what's going wrong. Sometimes, the error is clear enough that I can fix it or at least use a search engine to narrow down the cause. Other times, I can't really figure out what's going on.
More recently, a developer asked me to check the developer tools in my browser to try to diagnose a potential bug. While I know how to access these tools, I've only ever used them to look at page elements or render a page in a mobile view. I had no idea where to look for the information the developer required among the lines of code and various tabs.
I have to mostly stick to graphical interfaces
My comfort with the command line is limited
Since I don't have coding experience, I'm not really comfortable working primarily in the command line of my devices, which means I stick to the graphical interfaces of most tools. You could argue that I'd be more familiar with the command line if I was a Linux user, but even when I tried out Linux distros in the past, I would use versions that stuck to a user-friendly graphical interface that didn't rely much on commands.
I view my dependence on graphical interfaces as a challenge since it can be limiting in some ways. For example, the GUI for Docker on my Windows PC and my NAS are different, which is a point of frustration for me due to the different flows for launching containers. If I used a CLI instead, this wouldn't really be an issue, since I've learned how to SSH into my NAS. But currently, I only use the CLI to run simple commands or to retrieve user IDs.
Even if I deploy a service, I can only customize it so much
Coding skills come in handy for customization
There are plenty of self-hosted tools that allow you to accomplish what you need from right inside the service. However, there are times when coding skills definitely come in handy, especially for custom scripts and workflows.
One example of this is Home Assistant. Home Assistant has plenty of integrations you can add from the user interface, but some of its most powerful features come from custom integrations, automation scripts, and blueprints. Luckily, the community does share integrations and blueprints that you can add to your own server, but you'll face limitations if you want to do something that hasn't already been shared by others.
For example, when I wanted to pull specific weather data from the Met.no integration in Home Assistant, I had to get the help of someone else since I didn't know how to create a script to pull this information.
But Home Assistant isn't the only service where I've encountered limited customization due to my lack of coding knowledge. There are self-hosted dashboards that only allow you to customize their appearance by editing JSON files, for example. Meanwhile, with the right knowledge, you can also configure different containers to work together. For me, that's not really an option right now.
Everything is just much more time-consuming
There aren't really any 'quick fixes'
Because I'm not building from a base of strong technical knowledge around the command line, networking, the nuances of computing, and the way different platforms work, everything takes more time. Whether I'm deploying a service, learning a new skill, researching a solution, or troubleshooting a problem; there's a lot more ground to cover.
I noticed this the most when I was researching a way to safely make a certain container accessible over the internet. I managed to deploy Tailscale on my NAS and PC, but only later realized I would need to create sidecars for existing containers to connect to these. Tailscale has tutorials on how to do this, but I found it overwhelming due to the need to edit my Docker Compose files significantly and I haven't revisited this just yet.
Meanwhile, fixes to certain issues may require knowledge of a coding language. I encountered this when using Dawarich. I needed a Python script to break up a Google Takeout file into smaller files since the currently available online tools weren't working. A colleague was able to help me out with this relatively quickly, but without this, I would've been stuck.
It's still worth trying out different self-hosted platforms
While I encounter my fair share of challenges while self-hosting with a lack of coding experience, I wouldn't say that this lack of experience should disqualify you from trying out different self-hosted tools.
Self-hosting in general requires you to learn new skills, so this just means you have more to learn. I do encounter frustrations, but I'm also motivated by what I've learned over the past few months and the confidence this has given me in taking control over my own data.
