I’ve met a lot of engineers who have a list of things they’d like to work on, they start working on them and within a few days they don’t seem to finish anything. They end up running into roadblocks or getting discouraged due to the number of tasks these things will take. Well, this just means I want to help them get over these issues and enjoy the work they’re setting out to make. So of course, the first thing all of these engineers need it a true software build-validation-deployment setup.
Of course you can do all of this locally on your own machine, but the issue doing that is you don’t have the instant gratification of all the parts coming together on a server somewhere. Which is what makes agile (omg!?! did I say that?) actually work, giving you the chance to see and review what you’ve created quickly.
What Do We Need?
We’ll want to build at the very basic tooling we’ll need to send our code somewhere, have it build and save itself somewhere, deploy to a platform where we can see it running, setup a redirect to that service and access it via a DNS entry.
There’s a number of different ways to do this, but I’d like to set things up so we can learn about each one of these different components while we’re settings things up. Which should help build the skills of whomever is doing this and possibly form a habit for whoever is building this so they can come back and feel at home with this setup.
Setting up your own machine is the first set in this process, you need to feel comfortable with your own machine and development process before we start anything.
Here’s what my setup looks like:
Hardware: Ubuntu 20.04–16GB RAM — Intel i7
Software: Docker, Visual Studio Code, vim, DBeaver and Robot 3t
Cloud Provider: Digital Ocean, Azure, Google Domains
This setup is pretty good for the work that I’m doing, it also gives me everything I need for local development. Depending on what you are writing you may want to use straight Visual Studio (C# or ASP.NET) or Intellij (Java anything) which will make things easier for you.
Write Something Simple to Start
Once you’ve setup your personal development environment you’ll want to either start from scratch building something or use tools that create frameworks or scaffolding for you.
I personally enjoy using https://yeoman.io/ for scaffolding web applications or using https://openapi-generator.tech/ to speed up development. This lays out a common setup for you to write software projects again and again.
For this part of the series we’ll start by creating two small services that will pass data back and forth.
I’ll create a very small go service for this as it’s currently my main programming language.
You’ll see on lines 21–28 we’re starting our service on http://localhost:8080/ and targeting a service on http://localhost:8081/ which means we should run a second instance of this code and flip those two values.
$ go build server.go
./server -serverAddr localhost:8080 -targetAddr localhost:8081 &
./server -serverAddr localhost:8081 -targetAddr localhost:8080 &
Running something like this will setup two servers, each with its own target back and forth.
curl localhost:8081/start && curl localhost:8080/start
Finally start these services and have them send signals back and forth.
We’ll setup our source code repository in the next installment, stay tuned.