<?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: Bladimir</title>
    <description>The latest articles on DEV Community by Bladimir (@blad90).</description>
    <link>https://dev.to/blad90</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%2F3663500%2F48f4eb6e-3a24-47c9-860b-f806e5ff2322.png</url>
      <title>DEV Community: Bladimir</title>
      <link>https://dev.to/blad90</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blad90"/>
    <language>en</language>
    <item>
      <title>The Golden Project: The One Demo That Serious Software Engineers Should Have In Their Portfolio</title>
      <dc:creator>Bladimir</dc:creator>
      <pubDate>Thu, 05 Mar 2026 13:22:27 +0000</pubDate>
      <link>https://dev.to/blad90/the-golden-project-the-one-demo-that-serious-software-engineers-should-have-in-their-portfolio-gfj</link>
      <guid>https://dev.to/blad90/the-golden-project-the-one-demo-that-serious-software-engineers-should-have-in-their-portfolio-gfj</guid>
      <description>&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%2Fh03ex19lzkiuqvqtwjb3.jpg" 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%2Fh03ex19lzkiuqvqtwjb3.jpg" alt="Laptop with code image" width="800" height="448"&gt;&lt;/a&gt;&lt;br&gt;
Some Software Engineers, specially when starting their careers, struggle having substantial projects to showcase since they just graduated from School and may only built 1-2 academic projects and have covered the theorical part of the IT field; similar situation occurs with self-taught developers. Even worse, there are scenarios in which there is nothing to show for it.&lt;/p&gt;

&lt;p&gt;In my case, back in the days I had some GitHub repositories that represented my portfolio of work related to generic already-known solutions to problems. They were built just to acquire technical skills, learn a new framework, pick up a programming language, be caught up with some related technology and acquire some hands-on experience. After a while, I realized that each of those software projects were too basic in terms of structure and organization which didn’t help much when preparing for job interviews that include a portfolio review, or to show it to a potential client.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem with Toy Projects
&lt;/h3&gt;

&lt;p&gt;One of the main problems of having just simple CRUD apps in the portfolio is their lack of structure and purpose. It is true that they perhaps can be used to demonstrate knowledge about a specific concept or enhance a skill, but this is not enough because in almost all cases they get thrown away and maybe left unfinished; unless someone develop them as a hobby while exploring new technologies or basic concepts.&lt;/p&gt;

&lt;p&gt;The main goal of a serious engineer should be building to learn. By learning, I mean “active learning”, which is different than just following tutorials or doing courses over and over. So, when developing a software project for demo purposes or diversify the portfolio it is important to apply the appropriate strategies in order to create something substantial so that it doesn’t feel the time was wasted. That is the “Golden Project”.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a Golden Project?
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;&lt;em&gt;Golden Project&lt;/em&gt;&lt;/strong&gt; is the best single production-grade personal demo which is polished, well structured, and a software anyone would use in real life. It demonstrates the full capabilities of a Software Engineer during the whole software lifecycle, from analysis and architecture to deployment and documentation. It can be considered a project that one can be proud of, like a lethal weapon for interviews, showcase to potential clients and other career opportunities. It is a work done with care.&lt;/p&gt;

&lt;p&gt;While some new software engineers don’t even have a single app to present, others publish around 5-7 small toy projects or CRUD apps to highlight a portfolio of demos that just fulfill content into their resumé when preparing for jobs; only few developers own solid demos. The major downside with this approach is that hiring managers when analyzing candidate profiles they immediately notice that these kind of projects just do not click and then quickly decide not move forward in a job application. Same happens when you try to present your previous work to new leads. So, a Golden Project solves all these issues by demonstrating the fundamental real skills and professionalism; more importantly, when done right, it shows determination and persistense.&lt;/p&gt;

&lt;h3&gt;
  
  
  Toy vs. Golden Projects
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Toy Project&lt;/strong&gt;: too simple, lacks of architectural and coding structure, sometimes considered throw-away experiments. Mostly built without a real purpose, just for job hunting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Golden Project&lt;/strong&gt;: complex, robust, shows well-defined planning, organization, architecture, reliable similar to a production-grade level. Built with a goal in mind.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Makes a Software Project “GOLDEN”?
&lt;/h3&gt;

&lt;p&gt;It is not about the bunch of trendy technologies or fancy tools you use. Everything relies on the motivation behind it and the standards applied throughout. It should have the following characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It solves a real problem&lt;/strong&gt;, it is not a project implemented with random ideas or unknown scope. It must have a reason to exist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It follows best software practices&lt;/strong&gt;, meaning it is crafted applying the highest possible standards to make it highly valuable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is live and works properly&lt;/strong&gt;, even if no one uses it, it is built as it would be used in real life so every possible error is handled properly following best practices. The users can explore its functionalities and provide feedback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is relevant to the field, realistic, secure&lt;/strong&gt;. It complies with the fundamentals security standards, even as a demo, similar to a production-level project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It includes the decision-making of relevant parts&lt;/strong&gt;, meaning not implementing features just for the sake of learning a particular framework or tool. The process of building a Golden Project should emphasize why a decision was made, it demonstrates architectural thinking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It is well documented&lt;/strong&gt;, so it’s easy for anyone to understand by including detailed instructions, descriptions and images.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Is It Worth It?
&lt;/h3&gt;

&lt;p&gt;Beginning to build a project of that magnitude could be intimidating at first because it is not something you can produce in one day, but in the long run it will be worth it. Obviously, when developing these kind of projects, there will be a lot of challenges and difficulties that certainly will arise. But there is an important takeaway, when you try to find a way to solve a particular problem and stay persistent especially in projects that big and complex, you’ll learn more than just following a happy-path tutorial. Not only does it give you a rewarding learning experience when finishing it, but also teaches you valuable things such as commitment, discipline and professional growth. Plus, you’ll own it forever and can be used as reference for other project ideas, or inspire others.&lt;/p&gt;

&lt;p&gt;Right now I’m in the middle of building my own Golden Project which is not live yet, but I’m polishing every aspect of it so it fullfil the minimum criteria that simulates a real production software. As soon as it’s ready I’ll drop the link here and show the results.&lt;/p&gt;

&lt;p&gt;If you already have or think to build one and want to share the details, you can share in the comments below, so I can give feedback.&lt;/p&gt;

&lt;p&gt;That’s it. I’ll end this post by adding this remark:&lt;/p&gt;

&lt;p&gt;| &lt;em&gt;The hardest part of a journey is starting. Once you begin, the rest gets easier.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If this article helped, share it with anyone in the field who’s stuck building toy projects!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>goldenproject</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Building a Secure Demo Banking App [Part 2]: Implementing the First Microservices</title>
      <dc:creator>Bladimir</dc:creator>
      <pubDate>Thu, 22 Jan 2026 17:25:24 +0000</pubDate>
      <link>https://dev.to/blad90/building-a-secure-demo-banking-app-part-2-implementing-the-first-microservices-2iam</link>
      <guid>https://dev.to/blad90/building-a-secure-demo-banking-app-part-2-implementing-the-first-microservices-2iam</guid>
      <description>&lt;p&gt;&lt;strong&gt;REVIEW FROM PART I&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In part I, I outlined the scope, architecture and overall project structure and some of the initial features for the DemoBanking App.&lt;/p&gt;

&lt;p&gt;Initially, while exploring the API Gateway layer, I considered AWS API Gateway to be integrated due to its convenient features. However, after hitting some roadblocks regarding the AWS costs and maintenance for a demo project I decided to go for Spring Gateway. Even though AWS offers a generous 12-month free tier, I’d already used mine for other hands-on labs and experimental projects.&lt;/p&gt;

&lt;p&gt;From the bright side, choosing Spring Gateway makes everything inside Spring ecosystem which eliminates extra configurations for making things compatible between two vendors tools. Also, it allows anyone that clones the project repo to run the app without this limitation.&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%2Fh0fi23utymlvbg2g1g3u.png" 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%2Fh0fi23utymlvbg2g1g3u.png" alt="DemoBank app logo" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TECHNOLOGY STACK:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; React, TypeScript, Tailwind CSS.&lt;br&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Spring Framework (Boot, Data, Gateway)&lt;br&gt;
&lt;strong&gt;Database:&lt;/strong&gt; PostgreSQL (for user, account and transaction microservices)&lt;br&gt;
&lt;strong&gt;Authentication:&lt;/strong&gt; OAuth2 / OpenID Connect&lt;br&gt;
&lt;strong&gt;Observability:&lt;/strong&gt; Apache Kafka, Prometheus, Grafana, OpenTelemetry, ElasticSearch&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Structure&lt;/strong&gt; (so far)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;demo-banking-app&lt;/code&gt; (project root)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/docs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/observability&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/tests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/docker-compose.yml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pom.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/services&lt;/code&gt; (detailed below)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inside &lt;code&gt;/services&lt;/code&gt; directory, the user, account and transaction microservices follow a similar structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/controller&lt;/code&gt;: it handles the relevant API endpoints.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/dto&lt;/code&gt;: as the acronym suggests, it is for managing “data transfer objects” without touching the JPA entities directly.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/entity&lt;/code&gt;: it represents the entity class for each microservice.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/repository&lt;/code&gt;: responsible for interacting or communicating with the database source using the Spring JpaRepository.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/service&lt;/code&gt;: this is where all the business logic is handled.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/exceptions&lt;/code&gt;: this will contain the classes for handling exceptions (pending to be implemented).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/utils&lt;/code&gt;: it includes any utility or common classes such as mappers to “map” from an entity to DTO, and viceversa.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;MICROSERVICES&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As I mentioned before, there are three microservices implemented at this stage so far.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice #1: User&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is considered to be one of the core microservices of the project since it is responsible to manage everything related to users.&lt;/p&gt;

&lt;p&gt;Key endpoints:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;8081/users&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;GET&lt;/strong&gt; &lt;code&gt;8081/users/all&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;GET&lt;/strong&gt; &lt;code&gt;8081/users/{id}&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;POST&lt;/strong&gt; &lt;code&gt;8081/users/create&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;PATCH&lt;/strong&gt; &lt;code&gt;8081/users/update/{id}&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;PATCH&lt;/strong&gt; &lt;code&gt;8081/users/disable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice #2: Account&lt;/strong&gt;&lt;br&gt;
Similarly, the account microservice handles every aspect related to bank accounts in this demo project.&lt;/p&gt;

&lt;p&gt;Key endpoints:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;8082/accounts&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;GET&lt;/strong&gt; &lt;code&gt;8082/accounts/all&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;POST&lt;/strong&gt; &lt;code&gt;8082/accounts/create&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;GET&lt;/strong&gt; &lt;code&gt;8082/accounts/{accountNumber}&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;PATCH&lt;/strong&gt; &lt;code&gt;8082/accounts/update/{accountNumber}&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;PATCH&lt;/strong&gt; &lt;code&gt;8082/accounts/inactivate/{accountNumber}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microservice #3: Transaction&lt;/strong&gt;&lt;br&gt;
Finally, there is the transaction microservice which handles the bank transactions.&lt;/p&gt;

&lt;p&gt;Key endpoints:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;8083/transactions&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;GET&lt;/strong&gt; &lt;code&gt;8083/transactions/all&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;POST&lt;/strong&gt; &lt;code&gt;8083/transactions/create/{type}&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;GET&lt;/strong&gt; &lt;code&gt;8083/transactions/{id}&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;PATCH&lt;/strong&gt; &lt;code&gt;8083/transactions/cancel/{id}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DOCKER SETUP: RUNNING LOCALLY WITH DOCKER COMPOSE&lt;/strong&gt;&lt;br&gt;
In order to make the project easy to run without manual configuration difficulties, the initial version uses a single docker-compose.yml file at the root. This will handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Spring Cloud Gateway (entry point, which is pending to be implemented)&lt;/li&gt;
&lt;li&gt;The three implemented microservices (User, Account, Transaction)&lt;/li&gt;
&lt;li&gt;A PostgreSQL instance (with separate schemas or databases per service)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each microservice has its own Dockerfile located in the root folder, using a multi-stage Maven build for efficiency:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Build stage:&lt;/strong&gt; Compiles the Spring Boot JAR with dependencies.&lt;br&gt;
&lt;strong&gt;2. Runtime stage:&lt;/strong&gt; Copies the slim JAR into a lightweight OpenJDK/JRE image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick start commands&lt;/strong&gt; (which is also included in the README):&lt;/p&gt;

&lt;p&gt;Clone&lt;br&gt;
&lt;code&gt;git clone https://github.com/blad90/demo-banking-app.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Build and start all services + DB&lt;br&gt;
&lt;code&gt;docker compose up -d --build&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Check logs for one service (e.g., user-service)&lt;br&gt;
&lt;code&gt;docker compose logs -f user-service&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Stop everything&lt;br&gt;
&lt;code&gt;docker compose down&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONSIDERATIONS AND REFINEMENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saga Pattern (orchestration vs. choreography):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is important to mention that initially, since the Saga Pattern was the design choice for the software architecture I analyzed which would be more appropriate for the project between the orchestration and choreography approach. While exploring about the two regarding the advantages and disadvantages according to the project scope, I concluded the Saga Orchestration is the right selection for the following reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It uses a main orchestrator, where it centralizes all the communications between microservices.&lt;/li&gt;
&lt;li&gt;For the level of complexity that will take this demo-banking application as it evolves, it facilitates the debugging process when anything goes wrong.&lt;/li&gt;
&lt;li&gt;The choreography approach may not fit in this project well since communication happens among microservices themselves, which could be a headache when the application grows in complexity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Relationships between entity models&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When completing the initial versions of each microservice (User, Account and Transaction), I started to wonder about how could be appropriate to handle the relationships among entities. For example, when Account requires to be linked to an User.&lt;/p&gt;

&lt;p&gt;Based on previous experiences in developing monolithic applications, for instance the ones based on Spring, I know that it is straightforward establishing relationships using JPA annotations to represent entity cardinalities such as &lt;code&gt;@OneToMany&lt;/code&gt;, &lt;code&gt;@OneToOne&lt;/code&gt;, and so on. However, when building more complex applications, specially those with an architecture based on microservices, I started to notice that it wasn’t the right approach because of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If two or more entities from distinct microservices references to each other, it produces a tight coupling issue.&lt;/li&gt;
&lt;li&gt;It is hard to maintain in the long run if entities or components tightly coupled.&lt;/li&gt;
&lt;li&gt;Tight coupling affects the microservices autonomy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a result, while exploring and researching alternatives, the &lt;em&gt;event-driven cache updates&lt;/em&gt; pattern came into play, which is great for performance and resilience in complex, distributed systems such as banking applications. This pattern allows data sharing between services through events keeping microservices independence. Each service keeps a cache version of the data received from another service. For instance, Account microservice stores User data on its own database schema, which is a cache version received from the User microservice, without impacting its database.&lt;/p&gt;

&lt;p&gt;Below is the updated architecture diagram, mostly about the switch between AWS API Gateway to Spring Gateway mentioned in the “&lt;em&gt;Review from Part I&lt;/em&gt;” section:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Original version&lt;/strong&gt;&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%2F2uodh6e2rroop26m6uo8.png" 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%2F2uodh6e2rroop26m6uo8.png" alt="Project Architecture first version" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Updated version&lt;/strong&gt;&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%2Fjy7uqr58r655xj8c0qjt.png" 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%2Fjy7uqr58r655xj8c0qjt.png" alt="Project Architecture second version" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WHAT’S NEXT?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’ll prioritize to complete the pending tasks and then add new features based on the actual architecture. It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exception handling and validation for each of the implemented microservice in this stage.&lt;/li&gt;
&lt;li&gt;Implement the API Gateway.&lt;/li&gt;
&lt;li&gt;Apply the event-driven cache updates pattern for communication among relevant services, using Apache Kafka.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For more&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Follow along on X [&lt;a href="https://x.com/bladbaez" rel="noopener noreferrer"&gt;@bladbaez&lt;/a&gt;], I’m open to feedback, suggestions or anything else.&lt;/p&gt;

</description>
      <category>springboot</category>
      <category>microservices</category>
      <category>eventdriven</category>
      <category>demobank</category>
    </item>
    <item>
      <title>Building a Secure Demo Banking App [Part 1]</title>
      <dc:creator>Bladimir</dc:creator>
      <pubDate>Tue, 06 Jan 2026 21:04:30 +0000</pubDate>
      <link>https://dev.to/blad90/building-a-secure-demo-banking-app-part-1-1amj</link>
      <guid>https://dev.to/blad90/building-a-secure-demo-banking-app-part-1-1amj</guid>
      <description>&lt;p&gt;When building software projects or applications, it is important to be aware of how quickly technology evolves over time. For development, it is said that some tools or programming languages get updated at most each six months approximately; so that we need to catch up with newer versions that may introduce new patterns or concepts, otherwise we fall behind.&lt;/p&gt;

&lt;p&gt;However,  no matter how fast technology changes, the foundational core concepts of software development almost always stay the same. Now, with the revolution of AI,  generic and simple software projects, such as CRUD apps, don't add the substantial value that we, as Software Engineers, expect to get in terms of knowledge and critical thinking. In order to build something powerful and reliable it should follow the best coding and security practices in each phase of the development cycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why the Demo Banking App project?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I decided to build a software related to fintech, for demo purposes, based on the following reasons:&lt;/li&gt;
&lt;li&gt;It deepens my skills in Full Stack mostly used in Fintech.&lt;/li&gt;
&lt;li&gt;It represents a substantial software application for  portfolio, that can be showcased publicly. The whole planning, development, deployment, I called it as "&lt;em&gt;The Golden Project&lt;/em&gt;", since it covers almost all the grounds in terms of planning, coding structure, security, architectural and design patterns, as well as CD/CI. For simplicity, the name of the software application will be "&lt;em&gt;Demo Banking App&lt;/em&gt;".&lt;/li&gt;
&lt;li&gt;I plan to document each important feature and component to reinforce my understanding and adapt my approach as roadblocks arise throughout the build. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Project Goals &amp;amp; Scope&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first version of the "&lt;em&gt;Demo Banking App&lt;/em&gt;" will include features noted below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User registration and authentication&lt;/li&gt;
&lt;li&gt;User profile&lt;/li&gt;
&lt;li&gt;Account dashboard&lt;/li&gt;
&lt;li&gt;Transaction history&lt;/li&gt;
&lt;li&gt;Payments&lt;/li&gt;
&lt;li&gt;Notifications&lt;/li&gt;
&lt;li&gt;Fraud-screening&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technology Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While deciding the stack to choose for this kind of software project, I took into consideration the relevance and usage in real-world fintech apps,  previous experience with some technologies and tools, and relevance of today's software best practices. Below the breakdown of the stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: React, TypeScript, Tailwind CSS.&lt;/li&gt;
&lt;li&gt;Backend: Spring Boot&lt;/li&gt;
&lt;li&gt;Database: PostgreSQL&lt;/li&gt;
&lt;li&gt;Authentication: OAuth2 / OpenID Connect&lt;/li&gt;
&lt;li&gt;Observability: Prometheus, Grafana, OpenTelemetry, ElasticSearch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The architecture pattern to be applied is based on microservices and the Saga Pattern. The reason behind this choice is due to the project complexity in order to ensure escalability and smoothness of all transactions, simulating a real-world banking app. &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%2Fg113ne4irqvallo4z85j.png" 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%2Fg113ne4irqvallo4z85j.png" alt="Demo bank application architecture" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security from the Beginning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even though it is a bank application for demo purposes, it is crucial and important to apply the best security practices. For version #1, some of them include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using environment variables instead of plain-text values&lt;/li&gt;
&lt;li&gt;CORS restriction&lt;/li&gt;
&lt;li&gt;Rate limiting on login routes&lt;/li&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;li&gt;Password encryption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Logo and Colors&lt;/strong&gt;&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%2Fwb9wvtl3twir9tcm6fci.png" 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%2Fwb9wvtl3twir9tcm6fci.png" alt="Demo bank app logo" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I designed the logo of the demo banking app in a simplistic way to emphasize minimalism and highlight the realistic corporative touch. &lt;/p&gt;

&lt;p&gt;The colors, intended to be used as color scheme for the whole app, were inspired by a German neobank.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's next!&lt;/strong&gt;&lt;br&gt;
I will post about the project progress as important features are completed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To reach me out:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow me on X (&lt;a href="https://x.com/bladbaez" rel="noopener noreferrer"&gt;@bladbaez&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Website/blog (&lt;a href="https://bladbaez.com" rel="noopener noreferrer"&gt;BLADBAEZ.COM&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>springboot</category>
      <category>react</category>
    </item>
  </channel>
</rss>
