1. Making Changes to the Code
As I mentioned earlier, software development boils down to making small changes to the code. Millions of programmers have been doing this for decades, which has led to thorough debugging, standardization, and formalization in every possible way.
There’s a special program for storing code — Git. Git is a distributed version control system. It doesn’t just store your code, but tracks all changes in it and helps developers work on projects together without stepping on each other's toes 🤝.
With Git, developers can create different versions of the project (branches), keep a full history of changes, and even roll back to any past point. It’s like a time machine for your code! Git helps merge changes and resolve conflicts, which is why it’s the main tool for team collaboration in modern development. 👩💻
2. Building the Project
Before testing or uploading the project to the server, you need to build it.
🏗️ Building projects is the process of compiling the project's source code into executable programs or other runnable formats, often including testing and deployment. It’s a key part of software development that ensures your program is ready to use.
Building isn’t just about compilation, although compilation is often part of the build process. After building, you might end up with dozens or even hundreds of files that need to be uploaded to various servers.
Build tools can be low-level, such as:
- ☕ Maven and Gradle — widely used in Java projects for dependency management and building.
- 🐜 Apache Ant — another build tool for Java projects, offering more flexibility in scripting build processes.
- 🖥️ MSBuild — used for building projects created with Microsoft Visual Studio.
- ⚙️ Make — a classic build tool that uses Makefile to define build rules, popular in C and C++ projects.
- 🌐 Webpack — often used for building JavaScript applications, managing dependencies and modules.
- 📜 Gulp and Grunt — tools that automate common web development tasks like minification and SCSS compilation.
There are also high-level build systems. More on those below.
3. CI/CD
🔄 CI/CD (Continuous Integration/Continuous Delivery) — a methodology that involves continuously merging changes from all development branches into the main branch, along with automated testing and deployment. It helps catch and fix bugs quickly, boosting development speed and efficiency.
One of the most common, though somewhat outdated, CI/CD systems is Jenkins. If you work in a small company, there’s an 80% chance you’ll be using it.
🤖 Jenkins — a popular automation system used for continuous integration and delivery (CI/CD). Jenkins automates various stages of software development, including building, testing, and deploying, which improves code quality and speeds up development.
In larger companies, you might have a choice among five other options:
- 🚦 TeamCity — a powerful commercial system from JetBrains. Offers deep integration with various development and testing environments.
- 📝 GitLab CI — built into GitLab, providing continuous integration and delivery with configuration via YAML files.
- ☁️ CircleCI — a cloud-based CI/CD service supporting automation for testing and deployment across many projects.
- 🦑 Travis CI — one of the first cloud CI services, used in many open-source projects. Integrates well with GitHub.
- 🎍 Bamboo — an Atlassian product that integrates tightly with Jira and Bitbucket.
You don’t need to know how to operate all of these — usually, DevOps specialists set up these processes. All you need is to be aware they exist and understand the terms if someone mentions Jenkins, CI/CD, or “continuous integration.”
4. Deploying the Project to the Server
Writing the project isn’t enough — it also needs to be on your server. Deployment (deploy) is the process of placing and activating a web application on a server so that users can access it via the internet 🚚.
This involves transferring project files to the server, configuring the server environment, databases, dependencies, and setting up network and security settings 😅.
So, do you think your code will make it to the server? Will someone upload it? Or maybe you’ll connect via SSH to a remote server, upload a few files, and do all the setup? Relax: that’s no longer how it’s done. Now, there’s Docker.
🐳 Docker — a platform for developing, shipping, and running applications using containers. Docker simplifies creating, deploying, and running apps by packaging them with all dependencies and environment into a single compact unit. This ensures consistency across all stages: from development to testing and production.
Docker allows you to package your project or projects into Docker containers. It’s kind of like a virtual machine.
And although on any Docker forum you might get flamed for calling it a “virtual machine,” you can think of a Docker container as a virtual machine — just much lighter.
Basically, a Docker container is a virtual “virtual machine”. Virtual machines include a full copy of the OS, kernel, and virtual hardware, while Docker containers share the host’s kernel and can be more lightweight and faster ⚡.
Deploying with Docker makes the process much easier, faster, and more reliable. Your project gets packed into Docker containers that can be easily moved and run on any system supporting Docker 🚢.
This eliminates issues caused by differences in server environments and makes scaling your app simple — just add or remove containers based on load. Everyone’s switching to Docker — it’s super convenient and straightforward.
GO TO FULL VERSION