<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nathan Rajkumar</title>
    <description>The latest articles on DEV Community by Nathan Rajkumar (@nathan_rajkumar_c7ab03fe8).</description>
    <link>https://dev.to/nathan_rajkumar_c7ab03fe8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1797942%2Fed9c624c-7ba0-4ea8-9285-1b63ba3ccd46.jpg</url>
      <title>DEV Community: Nathan Rajkumar</title>
      <link>https://dev.to/nathan_rajkumar_c7ab03fe8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nathan_rajkumar_c7ab03fe8"/>
    <language>en</language>
    <item>
      <title>Building a Scalable Microservices Application with Java Spring Boot and Angular</title>
      <dc:creator>Nathan Rajkumar</dc:creator>
      <pubDate>Wed, 30 Oct 2024 18:08:25 +0000</pubDate>
      <link>https://dev.to/nathan_rajkumar_c7ab03fe8/building-a-scalable-microservices-application-with-java-spring-boot-and-angular-2op9</link>
      <guid>https://dev.to/nathan_rajkumar_c7ab03fe8/building-a-scalable-microservices-application-with-java-spring-boot-and-angular-2op9</guid>
      <description>&lt;h2&gt;
  
  
  PART 2: Playing With Lego
&lt;/h2&gt;

&lt;p&gt;Make sure to check out &lt;a href="https://dev.to/nathan_rajkumar_c7ab03fe8/building-a-scalable-microservices-application-with-java-spring-boot-and-angular-1h8d"&gt;Part 1&lt;/a&gt; if your following along in our little adventure otherwise, tally ho!&lt;/p&gt;




&lt;p&gt;Okay, day one of the first day of sprint 1, and we are sitting in the boardroom with a whiteboard and a laptop. Where and how do we start?&lt;/p&gt;

&lt;p&gt;We need to keep in mind a few guiding principles when designing a new system to ensure that we follow design patterns and best practices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD4D22AQFYAQvJClceIQ%2Ffeedshare-shrink_800%2Ffeedshare-shrink_800%2F0%2F1707927268591%3Fe%3D1733356800%26v%3Dbeta%26t%3D4tSkO333qFOiHapTbcZCRkV4zFRhX5x-toeiub8ARnw" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD4D22AQFYAQvJClceIQ%2Ffeedshare-shrink_800%2Ffeedshare-shrink_800%2F0%2F1707927268591%3Fe%3D1733356800%26v%3Dbeta%26t%3D4tSkO333qFOiHapTbcZCRkV4zFRhX5x-toeiub8ARnw" alt="fry-why" width="800" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Each choice can make or break future decisions/processes in regards to maintainability, scalability, and fault tolerance. Plus, these are tried. tested and true software design concepts, so you know, there's that&lt;/p&gt;

&lt;h2&gt;
  
  
  The Big Question
&lt;/h2&gt;

&lt;p&gt;Will this cost money to build? Locally no, we will be using as many free tier options as we can. However, I should mention that if we want to make this application scalable for more traffic, then yeah, there will be costs involved. Leverage at your own discretion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay, lets start putting it together…
&lt;/h2&gt;

&lt;p&gt;Our first component should be our front end…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Angular front end:&lt;/strong&gt; Provides the user interface for shipping order creation, assignment, and notifications. Also, sends requests to the API Gateway.&lt;/p&gt;

&lt;p&gt;Which then routes to our API Gateway…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Gateway (Zuul):&lt;/strong&gt; Manages routing, authentication and load balancing. This uses our service discovery to dynamically locate our backend services.&lt;/p&gt;

&lt;p&gt;The new order shipping system, according to the CEO, should create orders, assign responsibilities to said orders to authorized users, and receive notifications on any status updates in real time. In other words…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Order Service:&lt;/strong&gt; Manages orders, including creation and assignment, and publishes OrderCreated events to Kafka.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Service:&lt;/strong&gt; Manages authentication, authorization, and user profiles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notification Service:&lt;/strong&gt; Listens to Kafka topics like order-created to trigger notifications.&lt;/p&gt;

&lt;p&gt;All of these services registers itself with our Service Discovery so other services can discover and connect to it without hardcoded endpoints. &lt;strong&gt;Why?&lt;/strong&gt; In the case a service cannot be reached at a URL or if the URL is changed at all for that service, it is a pain to have to manually change the URL especially in a large application. This can ultimately lead to scalability issues and cause headaches. So, we let our Service Discovery handle our service endpoints dynamically so we never run into the game of “what's the URL again?”&lt;/p&gt;

&lt;p&gt;We also need to add some services to help with our microservice architecture…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service Discovery (Eureka):&lt;/strong&gt; Central directory (think like a phone book) where each microservice registers itself upon startup. It also periodically checks service health which then de-registers any failed instances to prevent sending requests to down services. Popular choices include Eureka, Consul, and Spring Cloud Service Registry. We are using Eureka for this build. Why? Eureka is integrated into Spring Cloud, provides self registration, health monitoring and easy API based lookup.&lt;br&gt;
Kafka Broker: Manages topics for event-driven communication among microservices. What are Kafka topics? Kafka topics support asynchronous, event-driven interactions that reduce direct dependencies between services. What this means is that its a non blocking way to send data back and forth without waiting on any synchronous processes. Also, its event driven, which means its listening, queuing up its own messages within a “topic”, then releasing them every time the listening event is triggered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Centralized Logging and Monitoring (ELK Stack and Prometheus):&lt;/strong&gt; We are using the ELK (Elasticsearch, LogStash and Kibana) stack to consolidate all the logs from our services for easier debugging and troubleshooting. For monitoring, Prometheus by Grafana allows us to track real time system metrics where we can ensure our application stays performant and most importantly, available.&lt;/p&gt;

&lt;p&gt;So far, it should look like this…&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://lucid.app/documents/embedded/b725755a-2dc6-4702-9d23-806cecb065b3" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flucid.app%2Fdocuments%2Fthumb%2Fb725755a-2dc6-4702-9d23-806cecb065b3%2F0%2FSome%281077856%29%2FNULL%2F1024" height="800" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://lucid.app/documents/embedded/b725755a-2dc6-4702-9d23-806cecb065b3" rel="noopener noreferrer" class="c-link"&gt;
          
        &lt;/a&gt;
      &lt;/h2&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
        lucid.app
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Breakdown
&lt;/h2&gt;

&lt;p&gt;Lets take a look at some core principles and patterns:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single Responsibility Principle (SRP)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each microservice in this system has a focused responsibility:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Order Service&lt;/strong&gt; is only concerned with managing orders&lt;br&gt;
&lt;strong&gt;Notification Service&lt;/strong&gt; exclusively handles notifications&lt;br&gt;
&lt;strong&gt;User Service&lt;/strong&gt; is responsible for managing user data&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Here we want to make sure we separate our concerns. Why would we want to do this? We want to reduce interdependencies, ensuring that changes in one service have minimal impact on others. SRP aligns with modularity which simplifies testing and allows each service to scale independently if needed&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database per Service Pattern&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every service in this architecture has its own database:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The User Service uses a MySQL relational database to store structured user information&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Order Service leverages a NoSQL MongoDB database like for fast, flexible storage of order data&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Notification Service uses our message queue system in our published topics to send and receive notifications when triggered.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; This pattern provides data isolation which means we can enhance data resilience by eliminating shared database dependencies between services. Each service can choose the database type that best fits its needs, which is particularly helpful when thinking about scaling our application&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event-Driven Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An event-driven approach enables asynchronous communication between services. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When a new order is created, the Order Service publishes a OrderCreated event to a Kafka topic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Notification Service listens to this topic and responds by sending notifications to users&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; The whole point of microservices is keyed into the decoupling of services where we allow each component to work independently. With Kafka, we gain a high-throughput, scalable messaging platform that ensures data consistency while allowing non-blocking communication between services&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saga Pattern for Distributed Transactions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Saga pattern manages distributed transactions by breaking them into smaller, compensable transactions. For instance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When a new order is assigned, the Order Service first creates the order and publishes an OrderAssigned event&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Notification Service picks up this event and sends notifications to the relevant users&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the Notification Service encounters an error (e.g., a network issue), the Order Service can compensate by marking the task as “Incomplete” or retrying notifications&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; This approach to handling distributed transactions with compensating actions keeps data consistent without locking resources, which is ideal for a distributed architecture. What does compensating action mean? If there is ever a moment when a service returns a failure, returns something undesirable or unexpected, the action will abort and previous actions are reverted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Gateway Pattern&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The API Gateway acts as a single entry point for client requests, reducing the complexity of managing multiple endpoints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Centralized Authentication:&lt;/strong&gt; Authentication checks happen at the gateway level, so each service doesn’t need to implement its own.&lt;br&gt;
Routing and Load Balancing: Requests for orders, users, or notifications are routed to the correct microservice, balancing load and providing a single unified entry point for clients&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; The API Gateway not only simplifies the client’s experience but also provides a layer of control over security, traffic management, and monitoring&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Circuit Breaker Pattern&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For resilience, we will use the circuit breaker pattern to handle failures in dependencies. For example, if the Notification Service is down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The Order Service can use a circuit breaker to prevent further calls to the Notification Service until it is back up&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This isolates the failure to the Notification Service, preventing a ripple effect across other services&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Using tools like Resilience4J, we can implement circuit breakers to handle dependency failures gracefully and prevent cascading issues across the system&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Centralized Logging and Monitoring&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To maintain visibility into each service’s health, we use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ELK Stack (Elasticsearch, Logstash, and Kibana) for centralized logging&lt;/li&gt;
&lt;li&gt;Prometheus for real-time monitoring and alerting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; For monitoring we need a way to centralize logging so developers and operations teams can identify and resolve issues proactively by viewing logs, system metrics, and real-time data on service behavior&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fratxdkjfvqgbhs2n6oyk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fratxdkjfvqgbhs2n6oyk.gif" alt="okay-then" width="640" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Lets Put It All into Perspective
&lt;/h2&gt;

&lt;p&gt;Let’s consider a typical scenario, like creating a new order. Here’s how the architecture and design patterns work together:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Client Request:&lt;/strong&gt; A user creates an order through the frontend, which hits the API Gateway&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gateway and Order Service:&lt;/strong&gt; The API Gateway authenticates the user and routes the request to the Order Service&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Event Publication:&lt;/strong&gt; The Order Service stores the order in its database and publishes an OrderCreated event to Kafka&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notification Service:&lt;/strong&gt; The Notification Service listens for OrderCreated, sends notifications, and publishes a NotificationSent event&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Error Handling:&lt;/strong&gt; If the Notification Service fails, a Saga compensating action triggers the Order Service to handle the failure by either retrying or marking the order as incomplete&lt;/p&gt;

&lt;p&gt;Okay, day one completed, tomorrow we can start looking at the backend infrastructure and exploring and setting up event driven communication using Kafka.&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>designpatterns</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Building a Scalable Microservices Application with Java Spring Boot and Angular</title>
      <dc:creator>Nathan Rajkumar</dc:creator>
      <pubDate>Tue, 29 Oct 2024 16:23:05 +0000</pubDate>
      <link>https://dev.to/nathan_rajkumar_c7ab03fe8/building-a-scalable-microservices-application-with-java-spring-boot-and-angular-1h8d</link>
      <guid>https://dev.to/nathan_rajkumar_c7ab03fe8/building-a-scalable-microservices-application-with-java-spring-boot-and-angular-1h8d</guid>
      <description>&lt;h2&gt;
  
  
  PART 1 - The First Consultation
&lt;/h2&gt;




&lt;p&gt;Look, while I enjoy microservices as much as the next guy, do I think that they are a huge headache to deal with and debug? Yes. But, the microservice architecture is such a hot button topic amongst devs and recruiters that  I'd be amiss to not sandbox my own massive scalable project that's production ready while also keeping costs low or non existent cause hey, we're all broke. &lt;/p&gt;




&lt;h2&gt;
  
  
  The Scenario:
&lt;/h2&gt;

&lt;p&gt;Congratulations! You were hired at IceToMeetYou Inc. as a consultant and they are looking to upgrade their current shipping management software to a more custom solution. IceToMeetYou Inc. is a startup who just got about $3B dollars in funding for their product that sells imported ice cubes to one guy stuck in the desert. Their current task management software is too small and limited in its functionality to handle all the incoming shipments this one guy, lets call him Dennis, needs to keep his smoothie cold. They want to build some task management system that can handle multiple incoming orders from Dennis to completion, assign orders to their worker penguins delivering the ice, track the progress of said penguins and receive real time notifications of status updates. With this, the CEO says to please feel free to ask any questions that can help build this project. We are going to be doing just that as we start to think about the project build…&lt;/p&gt;




&lt;h2&gt;
  
  
  Tech Stack:
&lt;/h2&gt;

&lt;p&gt;For this project, we will use the following tech stack:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; Java Spring Boot due to it being a powerful framework for building REST APIs and microservices, offering a wide array of tools like service discovery, cloud deployments, and Kafka for event-driven systems.&lt;br&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Angular due to its robust front-end framework with NgRx for global state management&lt;br&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MySQL/PostgreSQL (for relational data), MongoDB (for task data)&lt;br&gt;
&lt;strong&gt;Real-time updates:&lt;/strong&gt; Kafka (for event streaming) and WebSockets&lt;br&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Docker and Kubernetes for orchestration&lt;br&gt;
&lt;strong&gt;Testing:&lt;/strong&gt; JUnit, Jest, and K6 (for load and performance testing)&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big Picture:
&lt;/h2&gt;

&lt;p&gt;The main purpose here is to demonstrate all the movable parts when thinking about a web application. While in no part is this list exhaustive, the goal is to cover a lot of bases in plain English so that this process is repeatable and a no brainer when thinking about enterprise applications. For each section, I will showcase each step from design to deployment to pass for a V1 MVP via deep dive blogs, code demonstrations, diagrams, thought processes and most importantly, always making sure we are solving the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Microservice Architecture:
&lt;/h2&gt;

&lt;p&gt; → &lt;strong&gt;Design Principles:&lt;/strong&gt; Understanding and implementing microservices principles such as service independence, scalability, and fault tolerance&lt;br&gt;
 → &lt;strong&gt;Service Isolation:&lt;/strong&gt; How to separate into its own areas of concern,&lt;br&gt;
 → &lt;strong&gt;Inter-Service Communication:&lt;/strong&gt; Choosing communication strategies (REST APIs, Kafka, WebSockets) and handling data consistency across services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backend Development With Spring Boot:
&lt;/h2&gt;

&lt;p&gt; → &lt;strong&gt;Service Development:&lt;/strong&gt; Implementing individual services using Spring Boot, handling RESTful endpoints, and ensuring proper isolation of concerns.&lt;br&gt;
 → &lt;strong&gt;Authentication &amp;amp; Security:&lt;/strong&gt; Using JWTs, OAuth, and Spring Security for secure user authentication and role-based access control.&lt;br&gt;
 → &lt;strong&gt;Database Management:&lt;/strong&gt; Setting up relational (MySQL/PostgreSQL) and NoSQL (MongoDB) databases, optimizing data storage for microservices, and handling data migrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frontend Development With Angular:
&lt;/h2&gt;

&lt;p&gt;→ &lt;strong&gt;User Interface Design:&lt;/strong&gt; Creating a seamless user experience using Angular&lt;br&gt;
 → &lt;strong&gt;State Management:&lt;/strong&gt; Handling application state with NgRx for consistent, reactive user interactions.&lt;br&gt;
 → &lt;strong&gt;API Integration:&lt;/strong&gt; Connecting the Angular front end to Spring Boot backend services via RESTful APIs and managing data transfer securely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Time Data Communication and Notifications:
&lt;/h2&gt;

&lt;p&gt;→ &lt;strong&gt;Websockets &amp;amp; Event Streaming:&lt;/strong&gt; Implementing WebSockets for instant updates and Kafka for reliable event streaming between services.&lt;br&gt;
 → &lt;strong&gt;Push Notifications:&lt;/strong&gt; Delivering real-time updates to users, ensuring efficient message distribution without overloading services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance Testing &amp;amp; Monitoring:
&lt;/h2&gt;

&lt;p&gt;→ &lt;strong&gt;Load Testing:&lt;/strong&gt; Using K6 to assess the system under load, identifying bottlenecks, and optimizing microservices for performance.&lt;br&gt;
 → &lt;strong&gt;Logging &amp;amp; Monitoring:&lt;/strong&gt; Implementing logging with ELK or alternative tools, tracking application health, and setting up alerts for critical failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment &amp;amp; Scaling:
&lt;/h2&gt;

&lt;p&gt;→ &lt;strong&gt;Containerization With Docker:&lt;/strong&gt; Building Docker images for each service, establishing a consistent runtime environment for easier scaling.&lt;br&gt;
 → &lt;strong&gt;Orchestration With Kubernetes:&lt;/strong&gt; Using Kubernetes to manage deployments, auto-scaling, load balancing, and resilience.&lt;br&gt;
 → &lt;strong&gt;Cloud Hosting:&lt;/strong&gt; Hosting services on cloud platforms (AWS, Azure, GCP), covering aspects like cost efficiency, security, and reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some Final Thoughts Before Show Time...
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGZpeGR5dWZnd3FvMDNoNHE5OGdsOTVydGV3ZWsyOGk1cXVtZmVibiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/PnTbJDFX0q9IDKnqyx/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExdGZpeGR5dWZnd3FvMDNoNHE5OGdsOTVydGV3ZWsyOGk1cXVtZmVibiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/PnTbJDFX0q9IDKnqyx/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For starters, its a sandbox so this project is built for learning and demonstration. Big note here: This is a 100% over engineered solution built from scratch by one guy sitting in a basement. It's not that serious. &lt;/p&gt;

&lt;p&gt;I will be updating and working on this project everyday so expect frequent updates! &lt;/p&gt;

&lt;p&gt;This is also an exercise in what development would be like within a team setting, so we will be working within "sprints" to hit our goals with retrospectives (with, I guess, myself?) to see what went right, what went wrong, what blockers did we come across and how can we solve them.  I will update doing a quick retro every 5 posts or so.&lt;/p&gt;

&lt;p&gt;ONE MORE THING…I am always ALWAYS hungry for feedback. If something doesn't make sense or is not clear enough, let me know in the comments. &lt;/p&gt;

&lt;p&gt;So, its getting late, Sprint 1 starts tomorrow, hold on to your hats, its going be a long day…&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>java</category>
      <category>angular</category>
      <category>microservices</category>
    </item>
  </channel>
</rss>
