This discussion concerns freelancers, employees and owners of side projects alike.
Who doesn't know it: You laboriously set up a development environment, configure everything and start the project.
Later on in another project you copy the whole or parts of the previous project, change some things, get annoyed about mistakes and places you forgot to adjust and end up with a running second project.
With private side projects it is just as annoying, but not critical. In a professional working environment, however, you should avoid these unnecessary times. Especially as a freelancer, it is even more important, as this has a considerable influence on delivery times and hourly wages.
A current example from myself:
Some time ago I set up an app with Next, React and GraphQL (Prisma).
Just the rough steps:
- Deploy Prisma Server to DigitalOcean (Docker)
- Set up MySQL Server (also Docker)
- Configuring Firewalls
- Set environment variables correctly in the project
- Initialize Git
This architecture was an exact fit for my next project and so I created a
docker-compose.yml file to facilitate the deployment of the Prisma server and the MySQL server.
For the backend and frontend part I duplicated the folder of the old project and had to (with the help of search and replace) painstakingly go through all configurations, customize them and change other places (app name, constants, etc.).
This all seemed very tedious to me.
In the end, I wrote a short shell script for those tasks aswell.
Then this morning I read the article about the $200 challenge:
As a freelancer you have to be able to start a new project quickly and you need templates for different types of projects and best of all scripts to automate the setup.
- Scripts to deploy maschines on DigitalOcean (via API)
- Scripts to setup the firewalls on DigitalOcean (via API)
- A temaplate I created on base of my first React+GraphQL tutorial from the course of (hey Wes, sick-fits was great! 👍)
- Various docker-compose files for different topologies
- AWS Cloud9 partially as IDE to be able to code from anywhere and to be able to share it with others if needed.
So now I'm curious...