DEV Community

Periklis Gkolias
Periklis Gkolias

Posted on • Originally published at hackernoon.com on

Devops and Infrastructure for the Solo Dev

Being solo doesn’t mean your infrastructure and operations has to suck. Sadly, in teams of one (and small teams in general), people being physically or emotionally close (eg friends in life, business partners) can be a great excuse to ignore this important part of your day-to-day.

You could find a ton of reasons to invest in a DevOps infrastructure, but the two most important for me are:

A solo dev

It will save your arse in the long run

So you are having a demo tomorrow to your only client or to a very significant stakeholder in your company.

Are you sure it is going to run as expected? Are the automated tests running successfully all the time, during the preparation? Is the deployment process automated? Do you have a “click it and leave it” level of trust to your deployment tools?

If you are doing all those stuff manually, how do you know that the expected stress before the big demo, will not sabotage you? Make a system to not allow this. Devops!!

It will help your team scale efficiently

You might be a lone wolf now, but if things go well, you won’t be a lone wolf forever. Ultimately, you will pair with other wolfs (hire colleagues, get more team members) and get more quarries during the hunt (scale the company).

You want to make this easy, but if all wolfs follow a “kinda process” you will get “kinda results”. And this is not true only for operations but for the development part as well.

Let’s see some things, that I believe will be helpful to do from day one.

Version control and flow code flow strategy

Believe it or not, not all people appreciate the powers of a version control system (VCS), but it is really important. After all, Joel has it as the very first question in his beknown test. That’s because it is the most basic and most important thing in the infrastructure.

But having a VCS is not enough. You need to have a code flow and branching strategy, otherwise, everyone will be pushing to master, which is of no use. You can read more about that here.

An issue tracking process

For starters, even the basic, “ToDo-Doing-Done” workflow from trello will do, but investing in a more detailed workflow will pay off when the tasks increase in size and the parallel streams of work will become tenfold in size.

You probably won’t need it, if you don’t intend to have a life for the next X years and only remember the status of each ticket.

You can use Jira’s or Trello’s blog for inspiration and ideas.

Some kind of automated testing

I don’t care if you preferred solution will be a clicking-robot, which will be paid in batteries or the best unit test suite with 120% coverage. Unit testing can be easier than ever and there are other kinds of testing like BDD-testing which an increasing number of people find it more natural. Pick one, and try to achieve a decent and always increasing coverage.

Focus on having more than 85% coverage to your keystone-areas, as much as possible.

Code review

I have written some tips on doing self-reviews but given we are speaking about infrastructure, this is a good time to focus some of your energy to set up an automated code review a solution like Sonar or Codacy.

They can’t replace human intuition, but they are at least very helpful flag raisers when something smells big time. They are usually integrated with the CI/CD flow. Speaking of which…

CI/CD

Having a CI/CD solution deployed, with a minimal, is ridiculously easy today. For example, gitlab offers out-of-the-box CI/CD and you can find tons of examples in open source repositories, which can be adjusted to your needs, in order to achieve a minimal setup.

Every time a build event is triggered(usually a change in the master branch of your VCS) the CI/CD system is following a process which involves steps like compiling your project, running the tests and deploying to a remote server. This is how you ensure a minimum of quality and lets you have a better sleep the night before the big demo. :)

I get it, being solo and setting up all those stuff can be overwhelming. Apart from the basics though, you can set up a few other things that will leverage your work even more. But you can probably survive and scale (a bit) without them.

IaC, virtualization, and similar tools

If you have ever seen people deploying various docker images to a number of cloud servers or being able to migrate to another cloud provider in a glimpse, you know what Infrastructure as Code (IaC) mean and how beneficial it is. Pure magic. If you don’t here is a nice article about Terraform, a beknown tool of this category.

Monitoring and alerting tools

Do you love waking up, in the middle of the night, because someone is trying to DDoS your web application and a monitoring tool, gave you an automated call? Yeah, me too #sarcasm

Still, this is something that will repay you with interest , especially if your software is being used by clients who need to be online 24/7 (eg banks).

If you want a hint to get started, have a look at one of Nagios, Rollbar, Sentry or Pingdom.

Thank you for reading this article. If you are on a solo journey, don’t forget to read my other two articles on the field.

If you want to comment on anything, I would love to hear your feedback.

Originally published at perigk.github.com


Top comments (5)

Collapse
 
sobolevn profile image
Nikita Sobolev

Awesome post!

You might be interested in taking a look at wemake-django-template. It has almost everything that is mentioned in this article.

I personally knew several solo devs who find it very useful to control the quality of the project.

Collapse
 
perigk profile image
Periklis Gkolias

Thank you Nikita, the project looks awesome, I will totally keep it in mind when working with django. :)

Collapse
 
tomavelev profile image
Toma

Automating stuff is in Quadrant 2 of task prioritization - not urgent, but important. I myself found a need to start automating whatever I can - having flavors, building, testing with after commit hook, deployment, I've written myself a scripts to go with ssh and do stuff on the servers, etc. Otherwise I was doing the same repetitive shit. Letting the machines to work is the only way to scale yourself. The time you have and spend is limited. The point about working with others (the only way to scale the unscalable), the only way the matrix,the corporation, a team to work is, if everything is written, processed, ordered, and saved with processes and procedures. This is not something bad. It is the only way the things will work when they get big. I wish everyone to reach at that point 😊

Collapse
 
perigk profile image
Periklis Gkolias

So true Toma :)

Collapse
 
mmarulka profile image
Marija N.

Hi there Periklis, you can check out our platform Microtica (microtica.com), you might find it like a perfect tool for what you're doing. We are currently based on AWS, which cloud provider are you most used to?
Our idea is to bring the DevOps benefits closer to developers by abstracting the overkill of cloud setup and microservice deployments with Kubernetes. You can try out our free package and let us know if we can help you in anyway :)