Technologies we use to build modern applications

Technologies we use to build modern applications

I began writing code in 2014, and my first project was a fleet management system written in Visual Basic. When I was a young programmer, I thought it was cool to program at night and sleep during the day. After a few years of experience, I learned what I was doing was known as nightly builds.

In a software product development project at Nokia, there was a process called Nightly builds. Nightly builds can be thought of as a predecessor to Continuous Integration. It means that every night an automated system pulls the code added to the shared repository throughout the day and builds that code. The idea is quite similar to Continuous Integration, but since the code built at night was quite large, locating and fixing bugs was a real pain.

As time passed, I realized that writing code at night was no longer something I enjoyed doing. At the time, I was architecting and developing systems that were relied on by a large number of users. This made managing my nightly build more difficult, especially in the event of bugs appearing in my codebase.

In 2018, I attended a DevOps conference. After finishing a session that seemed relevant to me, I noticed that another session on Container Orchestration using Kubernetes was about to begin next to the hall we were in. It sounded interesting, so I decided to attend despite the fact that it appeared to be a new difficult topic for me. I had the pleasure of sitting next to a stunning young lady, a rarity in such gatherings. Kubernetes and Docker were unfamiliar terms to me, and I became drowsy in no time. This was true up until the girl seated next to me and gave a 5-minute briefing on continuous delivery. It was that five-minute briefing that swung my life around.

I’m writing this blog four years after I first heard about CI/CD, and I must admit that my life has been made easier and that I can now enjoy my nights and weekends more than I ever could before.

I will share with you some of the tools that I now use to make the transition from development to production as smooth and easy as possible.

I began as a single developer, writing all of my code on my laptop and pushing it to a bare metal virtual machine via FTP. The risks of this approach are obvious to a developer, and it only works if you are working on a project by yourself. The scope of the project dictated whether I used Visual Basic or PHP as a beginner. In my experience, one of my Visual Basic projects was limited to 65,000 records.

Java – For Backend

We use Java for a variety of reasons, but here are just a few.

  • The ability to perform a Static analysis and compilation of code which allows us to identify bugs before they are executed.
  • Static, well-defined types are a common language with the computer. You can’t just makeup words and expect it to understand you – compiler warnings and errors protect you from a variety of bugs.
  • The use of a shared mutable state is discouraged. As a result of Python’s lack of encapsulation or privacy mechanisms, public fields are as good as global variables

Java makes it much more difficult to make a mistake and accidentally shoot yourself in the head.

PostgreSQL, Mongo DB, Cassandra

Almost 98% of all my data-driven applications run on PostgreSQL, it is an open-source database that has all the critical features especially data types and backup, in rare instances I  may use Mongo DB for its flexibility especially on retail applications. I use Cassandra for mission-critical data

Apache Cassandra is an open-source NoSQL distributed database trusted by thousands of companies for scalability and high availability without compromising performance. Linear scalability and proven fault tolerance on commodity hardware or cloud infrastructure make it the perfect platform for mission-critical data.

IntelliJ Idea – Integrated Development Environment

The IntelliJ IDEA Ultimate Edition always makes me feel comfortable and at ease when working on my projects. First and foremost, it makes me more productive and efficient. With all the features and tools I need to complete a task seamlessly and more effectively, it’s like having a Swiss Army knife at my disposal! Additionally, it includes a wealth of code tips and a robust testing environment.

Git & GitHub – For Control Version

We use GitHub primarily to keep track of changes. All relevant information is neatly organized in the detailed changelog. Having a version history is essential when working on a project with another person. Even more so when there are more than ten participants.

Docker – for packaging

We now build and deploy all our applications in containerized environments. This ensures that applications run the same regardless of where they are or what computer or environment they are in

Kubernetes – For container orchestration

When we have applications running in more than 40 containers, we use Kubernetes to schedule and automate container deployment, networking, scalability, and availability.

Jenkins & spinnaker – For Continuous Delivery and Continuous Integration

With Jenkins, we can accelerate the software development process through automation. Jenkins integrates development life-cycle processes of all kinds, including build, document, test, package, stage, deploy, static analysis, and much more.

Maven – Build Tool

We use Maven to manage project build, reporting, and documentation from a central piece of information.

Prometheus & Grafana – For monitoring

These tools enable us to gain a thorough understanding of the data at hand as well as the events that led to its generation, allowing us to make more informed decisions. Data visualization, such as charts, graphs, and maps, aids us in comprehending complex data more straightforwardly and effectively. Grafana and Prometheus both assist us in dealing with complex data issues in a more straightforward manner.

Google Cloud – Deployment

We use GCP to build and run applications that leverage the power of hyper-scale data centers in some way: to reach users worldwide, borrow sophisticated analytics and AI functions, utilize massive data storage, and take advantage of cost efficiencies.

In the next blog, we will be dive deep into continuous delivery

×