svg
Post Image
By Daniel Tanque11 de Outubro, 2023In DevOpsLearning

How to build a fully fledged app?

You know major platforms like Facebook, Netflix, Paypal, and so many others, but how does it work? Is it just an idea, coding it and publishing it?

Not quite, in this article you’ll learn about the underlying technology that you must be aware if you want to create an application that operates smoothly in terms of collaboration, scaling and monitoring. This is the start of a long journey into DevOps.

It starts with an idea

You know that feeling, watching Steve Jobs showing the iPod, or Elon Musk making it to the SpaceX landing, or Mark Zuckerberg launching Facebook from an Harvard Dorm. It’s a moment of joy that starts a long journey from success and failure, but in overall it’s the pursue of our own dreams by making them real.

The first step is to have a machine in which you code, from there you compile the code, run the tests and after it you pick a hosting to run your application world wide.

The application starts getting some traction and a friend of yours finds it interesting enough to help you on your journey, and another friends comes. In a few weeks it’s 4 people working in a project and they need a way to collaborate in terms of code in which no code is lost neither errors are added to the project that may block from running in the server.

For that it’s necessary to, firstly, have the same dependencies and packages versions equal in each developer PC. After that it’s necessary a control version system, per example GIT.

Git is a distributed version control system that allows multiple users to collaborate on software development projects by tracking and managing changes to source code, making it easier to work on the same codebase, maintain a history of changes, and resolve conflicts.

With Git you can organize your project by branches which can be associated to features, and after testing it you can deploy and merge to the main branch. But that is all local and you have to ensure that it operates well (each developers’ code) in production, that’s when you use CI/CD.

You can use tools like Jenkins, Gitlab CI/CD, Github Actions. In which the code automatically runs a set of processes in the server such as Build, Test and Deploy. For that you need to setup the dependencies in a server and in the CI/CD you can set tasks to be performed.

The goal here is to automate instead of you having to do all manual. Besides setting up dependencies it’s a complicated task because of versions and so on, thus you can use containers, like Docker.

You can have a container, like a virtual environment with all the configurations you have on your local machine, per example Java version, external libraries to run your code, and all must be the same version. Using different version may lead you to unexpected results and crashing you application.

Now you have a container image which can be replicated from the build server to the test server and to the production server. For that replication you use container orchestration which can be done by Docker Compose (in smaller projects) or by Kubernetes.

From an idea to the world

You’ve seen how to go from an idea, to collaboration and setting up servers. But how do you handle a increasing amount of requests?

The solution is to scale, bring more production servers to be able to give response, but you need to setup more servers, that’s why you should use Terraform, that takes care of it and uses an approach of IaC (Infrastructure as Code), Terraform handles the provisioning and setup.

Then you can use Ansible that also helps in the setup, installs software and more. And Prometheus is a tool to collect usage metrics that shows the performance of the servers, you can even add Grafana to make it more visible to easily understand the data coming.

Conclusion

That’s the overall pictures that you get while developing a fully fledged application, able to scale and handle continuous development and integration. As an organization your goal must be to develop solutions, test, publish, get feedback, iterate into new development cycle, test and publish again new features and wait for more feedback.

In the following articles we will dive in multiple sections of development from Linux, to Docker, to Clean Code Architecture, you will learn how to grow into a Software Engineer that can build an application, host it, automate it, and have a team collaborating in it.

svgWoonoo - Android App
svg
svgLinux : Bash basics

Leave a reply