<?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: Onatade Abdulmajeed</title>
    <description>The latest articles on DEV Community by Onatade Abdulmajeed (@onatade_abdulmajeed).</description>
    <link>https://dev.to/onatade_abdulmajeed</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3827021%2F0cdae3fa-7a62-4269-9860-a4cc0c6902b8.jpeg</url>
      <title>DEV Community: Onatade Abdulmajeed</title>
      <link>https://dev.to/onatade_abdulmajeed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/onatade_abdulmajeed"/>
    <language>en</language>
    <item>
      <title>Week 14 of #100DaysOfCode: Completing JUnit 5 and Starting a New Portfolio</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 20 Sep 2026 21:11:30 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/week-14-of-100daysofcode-completing-junit-5-and-starting-a-new-portfolio-4eeb</link>
      <guid>https://dev.to/onatade_abdulmajeed/week-14-of-100daysofcode-completing-junit-5-and-starting-a-new-portfolio-4eeb</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;This week was another productive part of my &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; journey, with a mix of learning, revision, and building.&lt;/p&gt;

&lt;p&gt;I started the week by going deeper into &lt;strong&gt;software testing with JUnit 5&lt;/strong&gt;, exploring advanced features such as &lt;strong&gt;dynamic tests, parameterized tests, test templates, dependency injection, and JUnit's Extension Model&lt;/strong&gt;. I also learned how JUnit 5 integrates with tools and frameworks like &lt;strong&gt;Mockito, Spring, Selenium, and Cucumber&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I then spent time revising &lt;strong&gt;test case design and testing management&lt;/strong&gt;, covering topics such as &lt;strong&gt;test planning, test fixtures, equivalence partitioning, boundary value analysis, code coverage, TDD, BDD, continuous integration, and testing pipelines&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One of the biggest highlights of the week was completing my &lt;strong&gt;Mastering Software Testing with JUnit 5&lt;/strong&gt; exam, where I scored &lt;strong&gt;70%&lt;/strong&gt;. It was a valuable learning experience, and I'm taking the lessons from the course forward as I continue improving my Java and backend development skills.&lt;/p&gt;

&lt;p&gt;After completing the course, I shifted my focus toward building. I started a &lt;strong&gt;new portfolio from scratch using Next.js, Tailwind CSS, and Motion&lt;/strong&gt;, where I worked on the &lt;strong&gt;Hero and About sections&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Alongside the portfolio work, I also started reading &lt;strong&gt;Introduction to Docker&lt;/strong&gt; and began refreshing my understanding of containerization.&lt;/p&gt;

&lt;p&gt;This week reminded me that growth as a developer isn't only about learning new technologies. It's also about &lt;strong&gt;revising what I've learned, putting it into practice, and continuing to build&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With only a few days left in the challenge, I'm focused on making the most of them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Great things are done by a series of small things brought together."&lt;/p&gt;

&lt;p&gt;— Vincent van Gogh&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Day 87: Going Deeper into JUnit 5
&lt;/h1&gt;

&lt;p&gt;As part of my #100DaysOfCode journey, I continued learning &lt;strong&gt;JUnit 5&lt;/strong&gt; and went deeper into how testing works and how JUnit helps developers write, organize, and maintain tests.&lt;/p&gt;

&lt;p&gt;At first, testing can seem straightforward: write some code, create a test, run it, and check whether it passes. But as applications grow, tests also need to be properly organized and managed.&lt;/p&gt;

&lt;p&gt;This was one of the things I started understanding better during this part of my JUnit 5 learning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Test Lifecycle
&lt;/h2&gt;

&lt;p&gt;One of the topics I explored was the &lt;strong&gt;JUnit 5 test lifecycle&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;JUnit provides annotations that allow us to run specific pieces of code before and after tests.&lt;/p&gt;

&lt;p&gt;Some of the annotations I worked with include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@BeforeEach&lt;/code&gt; — runs before each test method.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@AfterEach&lt;/code&gt; — runs after each test method.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@BeforeAll&lt;/code&gt; — runs once before all tests in a test class.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@AfterAll&lt;/code&gt; — runs once after all tests in a test class.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These annotations are useful when a test needs some setup or cleanup.&lt;/p&gt;

&lt;p&gt;For example, if multiple tests require a particular object or resource, instead of repeating the setup inside every test, the setup can be handled using &lt;code&gt;@BeforeEach&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This helps keep the tests cleaner and easier to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Instance Lifecycle
&lt;/h2&gt;

&lt;p&gt;I also learned about the &lt;strong&gt;test instance lifecycle&lt;/strong&gt; and the &lt;code&gt;@TestInstance&lt;/code&gt; annotation.&lt;/p&gt;

&lt;p&gt;JUnit 5 normally creates a new instance of the test class for each test method. However, &lt;code&gt;@TestInstance&lt;/code&gt; can be used to change this behavior.&lt;/p&gt;

&lt;p&gt;This becomes particularly useful when working with shared test state or when using lifecycle methods such as &lt;code&gt;@BeforeAll&lt;/code&gt; and &lt;code&gt;@AfterAll&lt;/code&gt; in certain situations.&lt;/p&gt;

&lt;p&gt;It was another example of how JUnit 5 gives developers more control over how their tests are executed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working with Assertions
&lt;/h2&gt;

&lt;p&gt;Assertions are one of the most important parts of writing tests because they allow us to verify whether the actual result matches what we expect.&lt;/p&gt;

&lt;p&gt;I worked with several JUnit 5 assertions, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;assertEquals&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assertThrows&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assertAll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assertTimeout&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, &lt;code&gt;assertEquals&lt;/code&gt; can be used to check whether two values are equal, while &lt;code&gt;assertThrows&lt;/code&gt; allows us to verify that a particular piece of code throws the expected exception.&lt;/p&gt;

&lt;p&gt;I found &lt;code&gt;assertAll&lt;/code&gt; particularly useful because it allows multiple assertions to be grouped together, while &lt;code&gt;assertTimeout&lt;/code&gt; can be used when the execution time of a test is important.&lt;/p&gt;

&lt;p&gt;Understanding these assertions helped me see that testing isn't only about checking whether a method returns the expected value. We can also test exceptions, multiple conditions, and execution time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Organizing Tests with &lt;code&gt;@Nested&lt;/code&gt; and &lt;code&gt;@Tag&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;As the number of tests in a project increases, organization becomes important.&lt;/p&gt;

&lt;p&gt;JUnit 5 provides annotations such as &lt;code&gt;@Nested&lt;/code&gt; and &lt;code&gt;@Tag&lt;/code&gt; to help with this.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@Nested&lt;/code&gt; allows related tests to be grouped together inside nested test classes. This can make larger test classes easier to understand.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@Tag&lt;/code&gt;, on the other hand, allows tests to be categorized.&lt;/p&gt;

&lt;p&gt;For example, tests could be tagged as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Tag&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"unit"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Tag&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"integration"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes it possible to organize tests based on their purpose and selectively run certain groups of tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conditional Test Execution and Assumptions
&lt;/h2&gt;

&lt;p&gt;Another interesting area was &lt;strong&gt;conditional test execution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sometimes, a test should only run under certain conditions. JUnit 5 provides ways to control this using conditions and assumptions.&lt;/p&gt;

&lt;p&gt;Assumptions are useful when a test depends on something that may not always be available.&lt;/p&gt;

&lt;p&gt;For example, a test might only make sense when a particular environment variable is present or when the application is running under a specific condition.&lt;/p&gt;

&lt;p&gt;Instead of simply allowing the test to fail, assumptions can tell JUnit that the test should be skipped when the required condition isn't met.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repeated Tests
&lt;/h2&gt;

&lt;p&gt;I also learned about &lt;code&gt;@RepeatedTest&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;As the name suggests, this allows a test to be executed multiple times.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@RepeatedTest&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;testSomething&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// test logic&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, JUnit will execute the test five times.&lt;/p&gt;

&lt;p&gt;This can be useful when we want to verify that a piece of functionality consistently produces the expected result across multiple executions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disabling Tests
&lt;/h2&gt;

&lt;p&gt;JUnit 5 also provides the &lt;code&gt;@Disabled&lt;/code&gt; annotation for temporarily disabling a test.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Disabled&lt;/span&gt;
&lt;span class="nd"&gt;@Test&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;testSomething&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// test logic&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There can be situations where a test is not ready, needs to be investigated, or should temporarily be excluded from execution.&lt;/p&gt;

&lt;p&gt;Rather than deleting the test completely, it can be disabled and revisited later.&lt;/p&gt;

&lt;h2&gt;
  
  
  JUnit 4 Migration Support
&lt;/h2&gt;

&lt;p&gt;Another topic I explored was &lt;strong&gt;JUnit 4 migration support&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;JUnit 5 introduced several changes compared to JUnit 4, so understanding how existing JUnit 4 tests can work with newer versions is important, especially when working on existing applications.&lt;/p&gt;

&lt;p&gt;This gave me a better understanding of how developers can gradually move from older testing approaches to JUnit 5 without necessarily having to rewrite everything at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;This part of my JUnit 5 learning helped me understand that writing tests is not just about creating assertions.&lt;/p&gt;

&lt;p&gt;There is also a lot that goes into managing a test suite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setting up and cleaning up test resources&lt;/li&gt;
&lt;li&gt;Controlling the test lifecycle&lt;/li&gt;
&lt;li&gt;Writing different types of assertions&lt;/li&gt;
&lt;li&gt;Grouping and organizing tests&lt;/li&gt;
&lt;li&gt;Running tests conditionally&lt;/li&gt;
&lt;li&gt;Repeating tests when necessary&lt;/li&gt;
&lt;li&gt;Temporarily disabling tests&lt;/li&gt;
&lt;li&gt;Supporting migration from older versions of JUnit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JUnit 5 provides a lot of flexibility for handling these situations, and I'm starting to understand why having a well-organized testing strategy becomes increasingly important as a project grows.&lt;/p&gt;

&lt;h1&gt;
  
  
  Day 88: Exploring Advanced JUnit 5 Features
&lt;/h1&gt;

&lt;p&gt;After going deeper into JUnit 5's testing fundamentals, I continued with &lt;strong&gt;Chapter 4: Simplifying Testing With Advanced JUnit Features&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This chapter introduced me to several features that make JUnit 5 more flexible and powerful, especially when tests need to be reused, generated dynamically, or executed with different sets of data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dependency Injection in JUnit 5
&lt;/h2&gt;

&lt;p&gt;One of the first concepts I explored was &lt;strong&gt;Dependency Injection&lt;/strong&gt; in JUnit 5.&lt;/p&gt;

&lt;p&gt;JUnit 5 supports dependency injection through its built-in &lt;strong&gt;parameter resolvers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of manually creating everything a test method needs, JUnit can provide certain parameters automatically when the test is executed.&lt;/p&gt;

&lt;p&gt;This was interesting to learn because dependency injection is something I've already encountered in backend development, particularly when working with frameworks like Spring.&lt;/p&gt;

&lt;p&gt;Seeing a similar concept being used within JUnit helped me understand how the framework manages test execution and dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic Tests
&lt;/h2&gt;

&lt;p&gt;One of the topics that stood out to me the most was &lt;strong&gt;Dynamic Tests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;JUnit 5 provides the &lt;code&gt;@TestFactory&lt;/code&gt; annotation for creating dynamic tests.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;@TestFactory&lt;/code&gt; method is different from a normal test method. It isn't itself a test. Instead, it acts as a &lt;strong&gt;factory that produces tests at runtime&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@TestFactory&lt;/span&gt;
&lt;span class="nc"&gt;Collection&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;DynamicTest&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;dynamicTests&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;asList&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
        &lt;span class="nc"&gt;DynamicTest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;dynamicTest&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Test 1"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// test logic&lt;/span&gt;
        &lt;span class="o"&gt;}),&lt;/span&gt;
        &lt;span class="nc"&gt;DynamicTest&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;dynamicTest&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Test 2"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// test logic&lt;/span&gt;
        &lt;span class="o"&gt;})&lt;/span&gt;
    &lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This approach can be useful when the tests need to be generated based on data or conditions that aren't known until runtime.&lt;/p&gt;

&lt;p&gt;It was one of those features that made me realize how much control JUnit 5 gives developers over test creation and execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sharing Test Semantics with Java Interfaces
&lt;/h2&gt;

&lt;p&gt;I also explored how &lt;strong&gt;Java interfaces can be used to share JUnit test semantics&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;JUnit 5 allows test-related annotations and behavior to be defined in interfaces and then reused by implementing classes.&lt;/p&gt;

&lt;p&gt;This can help reduce duplication when multiple test classes need to follow the same testing structure or conventions.&lt;/p&gt;

&lt;p&gt;It was another example of how Java's existing features can work together with JUnit to create reusable testing approaches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Templates
&lt;/h2&gt;

&lt;p&gt;Another feature I learned about was &lt;strong&gt;Test Templates&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A test template provides a way to define a test structure that can be invoked multiple times with different contexts or configurations.&lt;/p&gt;

&lt;p&gt;Unlike a normal test that runs in a fixed way, a test template provides a more reusable structure for tests that need to be executed under different conditions.&lt;/p&gt;

&lt;p&gt;This becomes especially useful when the same testing logic needs to be applied across different scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parameterized Tests
&lt;/h2&gt;

&lt;p&gt;I also spent time learning about &lt;strong&gt;Parameterized Tests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Parameterized tests allow the same test logic to be executed multiple times using different input values.&lt;/p&gt;

&lt;p&gt;Instead of writing separate test methods for every input, we can write one test and provide multiple arguments.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@ParameterizedTest&lt;/span&gt;
&lt;span class="nd"&gt;@ValueSource&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"Java"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"JUnit"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Spring"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;testSomething&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// test logic&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The test can then be executed using each value provided by &lt;code&gt;@ValueSource&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This can significantly reduce duplicated test code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Argument Providers
&lt;/h2&gt;

&lt;p&gt;JUnit 5 provides several ways to supply arguments to parameterized tests.&lt;/p&gt;

&lt;p&gt;Some of the argument sources I explored include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@ValueSource&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@EnumSource&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@MethodSource&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@CsvSource&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@CsvFileSource&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@ArgumentsSource&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each one provides a different way of supplying test data.&lt;/p&gt;

&lt;p&gt;For simple values, &lt;code&gt;@ValueSource&lt;/code&gt; can be enough.&lt;/p&gt;

&lt;p&gt;For more complex or reusable data, &lt;code&gt;@MethodSource&lt;/code&gt; or a custom &lt;code&gt;@ArgumentsSource&lt;/code&gt; can be useful.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@CsvSource&lt;/code&gt; and &lt;code&gt;@CsvFileSource&lt;/code&gt; also make it possible to provide multiple values in a CSV-style format.&lt;/p&gt;

&lt;p&gt;Understanding these different options helped me see how parameterized tests can make a test suite much more concise while still covering many different scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Argument Conversion
&lt;/h2&gt;

&lt;p&gt;Another area I explored was &lt;strong&gt;argument conversion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When using parameterized tests, the values provided to a test don't always have to be the exact same type as the method parameters.&lt;/p&gt;

&lt;p&gt;JUnit 5 can perform certain conversions automatically, and developers can also define custom conversions when necessary.&lt;/p&gt;

&lt;p&gt;This makes parameterized tests more flexible when working with different types of test data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Custom Parameterized Test Names
&lt;/h2&gt;

&lt;p&gt;I also learned that parameterized tests can have &lt;strong&gt;custom display names&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is useful because when many parameterized tests are executed, the output can become difficult to understand.&lt;/p&gt;

&lt;p&gt;Custom names can make it clearer which input values were used for a particular test execution.&lt;/p&gt;

&lt;p&gt;For example, instead of seeing several executions with a generic test name, we can include the supplied arguments in the display name.&lt;/p&gt;

&lt;p&gt;This makes test reports easier to read and understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Day 88 introduced me to some of the more advanced features of JUnit 5.&lt;/p&gt;

&lt;p&gt;The biggest takeaway for me was that JUnit isn't just about writing simple test methods and assertions. It provides tools for creating &lt;strong&gt;flexible, reusable, data-driven, and dynamic tests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The features I explored included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependency Injection and parameter resolvers&lt;/li&gt;
&lt;li&gt;Dynamic Tests with &lt;code&gt;@TestFactory&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sharing test semantics through Java interfaces&lt;/li&gt;
&lt;li&gt;Test Templates&lt;/li&gt;
&lt;li&gt;Parameterized Tests&lt;/li&gt;
&lt;li&gt;Different argument providers&lt;/li&gt;
&lt;li&gt;Argument conversion&lt;/li&gt;
&lt;li&gt;Custom parameterized test names&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm gradually getting a better understanding of how these features can be applied when building larger and more maintainable test suites.&lt;/p&gt;

&lt;p&gt;There is still more to learn, but each chapter is making JUnit 5 feel a lot less unfamiliar.&lt;/p&gt;

&lt;h1&gt;
  
  
  Day 89: Integrating JUnit 5 with External Frameworks
&lt;/h1&gt;

&lt;p&gt;After exploring JUnit 5's advanced testing features, I continued with &lt;strong&gt;Mastering Software Testing with JUnit 5&lt;/strong&gt;, focusing on how JUnit 5 integrates with external frameworks and tools.&lt;/p&gt;

&lt;p&gt;This part was interesting because it showed me that JUnit 5 doesn't have to work alone. Its &lt;strong&gt;Extension Model&lt;/strong&gt; allows it to integrate with different frameworks and provide additional functionality depending on what we're testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the JUnit 5 Extension Model
&lt;/h2&gt;

&lt;p&gt;One of the main concepts I explored was the &lt;strong&gt;JUnit 5 Extension Model&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Extensions provide a way to extend JUnit's behavior without modifying the JUnit framework itself.&lt;/p&gt;

&lt;p&gt;This allows external tools and frameworks to hook into the test lifecycle and provide additional features.&lt;/p&gt;

&lt;p&gt;Instead of having JUnit handle every testing requirement on its own, extensions allow other frameworks to work alongside it.&lt;/p&gt;

&lt;p&gt;This makes JUnit 5 flexible enough to support different testing scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mockito and Mocking
&lt;/h2&gt;

&lt;p&gt;I also learned about integrating JUnit 5 with &lt;strong&gt;Mockito&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Mockito is commonly used for &lt;strong&gt;mocking and stubbing&lt;/strong&gt; when testing Java applications.&lt;/p&gt;

&lt;p&gt;Mocking allows us to create fake versions of dependencies so that we can test a particular component without relying on its actual dependencies.&lt;/p&gt;

&lt;p&gt;For example, if a service depends on a database repository, we can mock the repository and control what it returns during a test.&lt;/p&gt;

&lt;p&gt;This allows us to focus on testing the service itself rather than involving the database every time the test runs.&lt;/p&gt;

&lt;p&gt;I also explored stubbing, which allows us to define how a mocked dependency should behave when certain methods are called.&lt;/p&gt;

&lt;p&gt;This helped me better understand how unit tests can isolate the component being tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  JUnit 5 and Spring
&lt;/h2&gt;

&lt;p&gt;Another important integration I explored was &lt;strong&gt;Spring's testing support&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Since I've been working with Spring and Spring Boot on the backend side, this was particularly useful for me.&lt;/p&gt;

&lt;p&gt;Spring provides testing features that allow JUnit tests to work with the Spring application context.&lt;/p&gt;

&lt;p&gt;This makes it possible to test components within an environment that is closer to how the actual application runs.&lt;/p&gt;

&lt;p&gt;It also showed me how JUnit and Spring complement each other rather than treating testing as a completely separate part of application development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Selenium and UI Testing
&lt;/h2&gt;

&lt;p&gt;I also looked at how JUnit 5 can work with &lt;strong&gt;Selenium&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Selenium is used for browser automation and testing web applications.&lt;/p&gt;

&lt;p&gt;JUnit can be used to organize and execute these tests while Selenium handles the browser interaction.&lt;/p&gt;

&lt;p&gt;This combination allows developers to automate scenarios such as opening a webpage, interacting with elements, submitting forms, and verifying results.&lt;/p&gt;

&lt;p&gt;It was interesting to see how the same testing framework can be used alongside tools that operate at different levels of an application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cucumber Integration
&lt;/h2&gt;

&lt;p&gt;Another framework I explored was &lt;strong&gt;Cucumber&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cucumber supports behavior-driven development (BDD), where application behavior can be described in a more human-readable format.&lt;/p&gt;

&lt;p&gt;JUnit 5 can integrate with Cucumber, allowing these scenarios to be executed as part of the testing process.&lt;/p&gt;

&lt;p&gt;This highlighted another important aspect of testing: tests don't always have to focus only on individual methods or classes. They can also describe and verify application behavior from a broader perspective.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing REST APIs
&lt;/h2&gt;

&lt;p&gt;I also explored different approaches to testing &lt;strong&gt;REST APIs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For backend development, API testing is particularly important because APIs are often the main way that different parts of an application communicate.&lt;/p&gt;

&lt;p&gt;JUnit can be used alongside other tools and libraries to verify things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP status codes&lt;/li&gt;
&lt;li&gt;Request and response data&lt;/li&gt;
&lt;li&gt;API behavior&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Different input scenarios&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is especially relevant to the kind of backend development I'm working toward, where building and testing reliable APIs is an important part of the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Docker Containers
&lt;/h2&gt;

&lt;p&gt;Another area covered was testing applications running in &lt;strong&gt;Docker containers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Docker makes it possible to package an application and its dependencies into a consistent environment.&lt;/p&gt;

&lt;p&gt;Testing containerized applications introduces additional considerations because we're no longer testing only the application code. We may also need to verify how the application behaves within its containerized environment.&lt;/p&gt;

&lt;p&gt;Learning about this connection between testing and Docker was useful as I'm also gradually learning more about containerization and deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Android Application Testing
&lt;/h2&gt;

&lt;p&gt;The chapter also introduced testing approaches for &lt;strong&gt;Android applications&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Although Android development isn't my primary focus at the moment, it was useful to see that JUnit 5 and its testing concepts can be applied across different types of software and environments.&lt;/p&gt;

&lt;p&gt;It reinforced the idea that testing principles aren't limited to backend applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Day 89 helped me understand the importance of JUnit 5's ability to work with other tools and frameworks.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Extension Model&lt;/strong&gt; provides a foundation for integrating JUnit with different technologies, while frameworks such as Mockito, Spring, Selenium, and Cucumber can address specific testing requirements.&lt;/p&gt;

&lt;p&gt;Some of the areas I explored included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JUnit 5's Extension Model&lt;/li&gt;
&lt;li&gt;Mocking and stubbing with Mockito&lt;/li&gt;
&lt;li&gt;Spring testing support&lt;/li&gt;
&lt;li&gt;Selenium integration&lt;/li&gt;
&lt;li&gt;Cucumber and BDD&lt;/li&gt;
&lt;li&gt;REST API testing&lt;/li&gt;
&lt;li&gt;Docker container testing&lt;/li&gt;
&lt;li&gt;Android application testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest takeaway for me is that testing doesn't happen in isolation.&lt;/p&gt;

&lt;p&gt;Depending on the application, developers may need different tools to test different parts of the system. JUnit 5 provides a foundation that can work with these tools and help bring the different testing approaches together.&lt;/p&gt;

&lt;p&gt;I'm getting closer to the end of this JUnit 5 learning journey, and I'm starting to see how the concepts I've learned can fit into real backend development.&lt;/p&gt;

&lt;h1&gt;
  
  
  Day 90: Revising Test Case Design and Testing Management
&lt;/h1&gt;

&lt;p&gt;As I got closer to completing my &lt;strong&gt;Mastering Software Testing with JUnit 5&lt;/strong&gt; course, Day 90 was focused mainly on revision.&lt;/p&gt;

&lt;p&gt;I went back through &lt;strong&gt;Chapters 6 and 7&lt;/strong&gt; to strengthen my understanding of the concepts before taking the exam the following day.&lt;/p&gt;

&lt;p&gt;The revision covered two major areas: &lt;strong&gt;test case design&lt;/strong&gt; and &lt;strong&gt;testing management&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Revisiting Test Case Design
&lt;/h2&gt;

&lt;p&gt;The first part of my revision focused on &lt;strong&gt;test case design&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Writing tests isn't simply about creating a test method and checking whether it passes. A good testing process starts with understanding what needs to be tested and designing test cases that can effectively identify potential problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Planning
&lt;/h3&gt;

&lt;p&gt;I revisited the importance of &lt;strong&gt;test planning&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Before writing tests, it's important to understand the requirements, identify what needs to be tested, determine the appropriate testing approach, and consider the resources and conditions required.&lt;/p&gt;

&lt;p&gt;Good planning provides a foundation for the testing process and helps ensure that important scenarios aren't overlooked.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Fixtures
&lt;/h3&gt;

&lt;p&gt;I also reviewed &lt;strong&gt;test fixtures&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A test fixture refers to the setup and state required for a test to run.&lt;/p&gt;

&lt;p&gt;This includes things such as creating objects, preparing test data, initializing resources, and cleaning up after tests.&lt;/p&gt;

&lt;p&gt;This connected nicely with some of the JUnit 5 concepts I had already learned, particularly the test lifecycle annotations such as &lt;code&gt;@BeforeEach&lt;/code&gt; and &lt;code&gt;@AfterEach&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Equivalence Partitioning
&lt;/h3&gt;

&lt;p&gt;Another test case design technique I revisited was &lt;strong&gt;equivalence partitioning&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is to divide input data into groups, or partitions, where the values in each group are expected to behave similarly.&lt;/p&gt;

&lt;p&gt;Instead of testing every possible input, we can select representative values from each partition.&lt;/p&gt;

&lt;p&gt;For example, if an application accepts ages from 18 to 60, we could divide the inputs into categories such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Below 18&lt;/li&gt;
&lt;li&gt;18–60&lt;/li&gt;
&lt;li&gt;Above 60&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than testing every possible age, we can select representative values from each group.&lt;/p&gt;

&lt;p&gt;This can help reduce the number of test cases while still providing useful coverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Boundary Value Analysis
&lt;/h2&gt;

&lt;p&gt;I also revisited &lt;strong&gt;boundary value analysis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This technique focuses on the edges of valid and invalid input ranges.&lt;/p&gt;

&lt;p&gt;Using the same example of an age range from 18 to 60, instead of only testing values in the middle of the range, we would pay particular attention to values such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;17&lt;/li&gt;
&lt;li&gt;18&lt;/li&gt;
&lt;li&gt;19&lt;/li&gt;
&lt;li&gt;59&lt;/li&gt;
&lt;li&gt;60&lt;/li&gt;
&lt;li&gt;61&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Boundary values are important because errors often occur around the limits of accepted input.&lt;/p&gt;

&lt;p&gt;This was a good reminder that choosing test data carefully can be just as important as writing the test itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Coverage
&lt;/h2&gt;

&lt;p&gt;Another topic I reviewed was &lt;strong&gt;code coverage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Code coverage helps us understand how much of our code is being executed by our tests.&lt;/p&gt;

&lt;p&gt;There are different types of coverage, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Line coverage&lt;/li&gt;
&lt;li&gt;Branch coverage&lt;/li&gt;
&lt;li&gt;Method coverage&lt;/li&gt;
&lt;li&gt;Condition coverage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, high code coverage doesn't automatically mean that an application is well tested.&lt;/p&gt;

&lt;p&gt;A test suite could execute a large percentage of the code while still failing to properly verify important behaviors.&lt;/p&gt;

&lt;p&gt;For me, this was an important distinction: &lt;strong&gt;coverage is a useful measurement, but it isn't the same thing as test quality.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Testing Management
&lt;/h1&gt;

&lt;p&gt;The second major area I revised was &lt;strong&gt;testing management&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This section moved beyond individual test cases and looked at how testing fits into the wider software development process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test-Driven Development
&lt;/h2&gt;

&lt;p&gt;I revisited &lt;strong&gt;Test-Driven Development (TDD)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;TDD follows a cycle commonly described as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Red → Green → Refactor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The developer first writes a test that fails, then writes enough code to make the test pass, and finally improves the implementation while keeping the tests passing.&lt;/p&gt;

&lt;p&gt;The idea isn't simply to write more tests. It's about using tests as part of the development process itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Behavior-Driven Development
&lt;/h2&gt;

&lt;p&gt;I also reviewed &lt;strong&gt;Behavior-Driven Development (BDD)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;BDD focuses more on describing how a system should behave from a user's or business perspective.&lt;/p&gt;

&lt;p&gt;This can make requirements easier for developers, testers, and non-technical stakeholders to understand and discuss.&lt;/p&gt;

&lt;p&gt;It also connected with what I learned earlier about &lt;strong&gt;Cucumber&lt;/strong&gt; and its approach to describing application behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuous Integration
&lt;/h2&gt;

&lt;p&gt;Another important topic was &lt;strong&gt;Continuous Integration (CI)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of waiting until the end of development to run tests, CI allows tests to be executed automatically whenever changes are integrated into a shared codebase.&lt;/p&gt;

&lt;p&gt;This can help developers detect problems earlier.&lt;/p&gt;

&lt;p&gt;For example, a typical pipeline might:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pull the latest code.&lt;/li&gt;
&lt;li&gt;Build the application.&lt;/li&gt;
&lt;li&gt;Run automated tests.&lt;/li&gt;
&lt;li&gt;Generate test reports.&lt;/li&gt;
&lt;li&gt;Report failures.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This connects testing directly with the development workflow rather than treating it as a separate final step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Pipelines
&lt;/h2&gt;

&lt;p&gt;I also revised &lt;strong&gt;testing pipelines&lt;/strong&gt; and how automated testing can become part of a larger software delivery process.&lt;/p&gt;

&lt;p&gt;A testing pipeline can include different stages depending on the project, such as unit tests, integration tests, API tests, and other automated checks.&lt;/p&gt;

&lt;p&gt;The goal is to provide continuous feedback about the health of the application as changes are introduced.&lt;/p&gt;

&lt;p&gt;This is particularly relevant to backend development and deployment, where automated testing can help catch problems before new code reaches production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Reporting and Defect Tracking
&lt;/h2&gt;

&lt;p&gt;Finally, I looked at tools and practices for &lt;strong&gt;test reporting and defect tracking&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Writing and running tests is only part of the testing process. Teams also need ways to understand test results, document failures, and track defects through to resolution.&lt;/p&gt;

&lt;p&gt;Test reports can provide useful information about what passed, what failed, and where problems occurred.&lt;/p&gt;

&lt;p&gt;Defect tracking systems then help teams record and manage those issues as part of the development workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Day 90 was less about learning completely new concepts and more about connecting everything I had already studied.&lt;/p&gt;

&lt;p&gt;I revisited:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Test planning&lt;/li&gt;
&lt;li&gt;Test fixtures&lt;/li&gt;
&lt;li&gt;Equivalence partitioning&lt;/li&gt;
&lt;li&gt;Boundary value analysis&lt;/li&gt;
&lt;li&gt;Code coverage&lt;/li&gt;
&lt;li&gt;TDD&lt;/li&gt;
&lt;li&gt;BDD&lt;/li&gt;
&lt;li&gt;Continuous integration&lt;/li&gt;
&lt;li&gt;Testing pipelines&lt;/li&gt;
&lt;li&gt;Test reporting&lt;/li&gt;
&lt;li&gt;Defect tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of my biggest takeaways from the revision was that &lt;strong&gt;effective software testing involves much more than writing assertions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There is the design of the test cases, the quality of the test data, the development process, automation, reporting, and how testing fits into the overall software delivery lifecycle.&lt;/p&gt;

&lt;p&gt;After spending the previous days exploring JUnit 5 and its integrations, this revision helped bring many of the concepts together.&lt;/p&gt;

&lt;h1&gt;
  
  
  Day 91: Completing My JUnit 5 Journey
&lt;/h1&gt;

&lt;p&gt;After several days of learning, practicing, and revising, I finally completed my &lt;strong&gt;Mastering Software Testing with JUnit 5&lt;/strong&gt; exam.&lt;/p&gt;

&lt;p&gt;I scored &lt;strong&gt;70%&lt;/strong&gt;. 🎉&lt;/p&gt;

&lt;p&gt;It was a good way to wrap up the learning experience and see how much I had picked up throughout the course.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Throughout the course, I explored different areas of software testing, starting from the fundamentals and gradually moving into more advanced JUnit 5 concepts.&lt;/p&gt;

&lt;p&gt;Some of the major topics I covered include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software testing fundamentals&lt;/li&gt;
&lt;li&gt;Test case design&lt;/li&gt;
&lt;li&gt;JUnit 5 features and test lifecycle&lt;/li&gt;
&lt;li&gt;Assertions and parameterized tests&lt;/li&gt;
&lt;li&gt;Dynamic tests and test templates&lt;/li&gt;
&lt;li&gt;JUnit 5's Extension Model&lt;/li&gt;
&lt;li&gt;Mocking and stubbing with Mockito&lt;/li&gt;
&lt;li&gt;Spring testing support&lt;/li&gt;
&lt;li&gt;REST API testing&lt;/li&gt;
&lt;li&gt;Testing management&lt;/li&gt;
&lt;li&gt;TDD and BDD&lt;/li&gt;
&lt;li&gt;Continuous integration and testing pipelines&lt;/li&gt;
&lt;li&gt;Test reporting and defect tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing I appreciated about the course was that it went beyond simply teaching me how to write JUnit tests.&lt;/p&gt;

&lt;p&gt;It helped me understand where testing fits into the &lt;strong&gt;software development lifecycle&lt;/strong&gt; and how different testing tools and practices can work together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;Although the course is now completed, I don't see this as the end of learning about software testing.&lt;/p&gt;

&lt;p&gt;There are still concepts I want to practice through real projects, especially writing meaningful tests for backend applications and APIs.&lt;/p&gt;

&lt;p&gt;I'm taking what I've learned forward as I continue improving my &lt;strong&gt;Java and backend development skills&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With the exam completed, I can now shift more of my attention toward building and applying what I've learned.&lt;/p&gt;

&lt;p&gt;And with &lt;strong&gt;9 days left in the #100DaysOfCode challenge&lt;/strong&gt;, there's still more work to do.&lt;/p&gt;

&lt;h1&gt;
  
  
  Day 92: Starting a New Portfolio
&lt;/h1&gt;

&lt;p&gt;With my JUnit 5 learning journey completed, I decided to shift my focus back toward building.&lt;/p&gt;

&lt;p&gt;For Day 92, I started working on a &lt;strong&gt;new portfolio website from scratch&lt;/strong&gt; using &lt;strong&gt;Next.js, Tailwind CSS, and Motion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I've built a portfolio before, but this time I wanted to start fresh and create something that better represents my current skills, projects, and growth as a developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting with the Foundation
&lt;/h2&gt;

&lt;p&gt;I started by setting up the project and working on the first major sections of the portfolio.&lt;/p&gt;

&lt;p&gt;The first sections I worked on were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hero Section&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;About Section&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Hero section is the first thing visitors will see, so I wanted it to clearly communicate who I am and what I do.&lt;/p&gt;

&lt;p&gt;For the About section, I'm working on presenting my background and development journey in a simple way.&lt;/p&gt;

&lt;p&gt;I'm still early in the build, so there is a lot more to come.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next.js and Tailwind CSS
&lt;/h2&gt;

&lt;p&gt;For this portfolio, I'm using &lt;strong&gt;Next.js&lt;/strong&gt; as the main framework and &lt;strong&gt;Tailwind CSS&lt;/strong&gt; for styling.&lt;/p&gt;

&lt;p&gt;I've worked with React before, but using Next.js for the project gives me another opportunity to strengthen my understanding of the framework while building something I'll actually use.&lt;/p&gt;

&lt;p&gt;Tailwind CSS is also helping me move quickly while keeping the styling within the components.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Motion
&lt;/h2&gt;

&lt;p&gt;I'm also using &lt;strong&gt;Motion&lt;/strong&gt; to add animations and interactions to the portfolio.&lt;/p&gt;

&lt;p&gt;I don't want the animations to simply exist for the sake of animation. I'm experimenting with how subtle movement can make sections feel more interactive without taking attention away from the actual content.&lt;/p&gt;

&lt;p&gt;This is something I'll continue refining as the portfolio develops.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting Docker
&lt;/h2&gt;

&lt;p&gt;Alongside the portfolio work, I also started reading &lt;strong&gt;Introduction to Docker&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After spending so much time learning about backend development, testing, and different parts of the software development lifecycle, I want to become more comfortable with &lt;strong&gt;containerization and deployment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Docker is an important part of modern development workflows, so I'm taking some time to understand the fundamentals before moving into more practical usage.&lt;/p&gt;

&lt;p&gt;For now, I'm focusing on understanding the concepts rather than trying to rush through everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;The portfolio is still a work in progress.&lt;/p&gt;

&lt;p&gt;There are several sections I still want to build, improve, and connect before I consider it finished.&lt;/p&gt;

&lt;p&gt;I'll also continue learning Docker alongside the development work.&lt;/p&gt;

&lt;p&gt;One thing I've noticed throughout this challenge is that learning doesn't always happen through one activity.&lt;/p&gt;

&lt;p&gt;Sometimes I'm reading.&lt;/p&gt;

&lt;p&gt;Sometimes I'm building.&lt;/p&gt;

&lt;p&gt;Sometimes I'm debugging.&lt;/p&gt;

&lt;p&gt;And sometimes I'm going back to something I've already learned and applying it in a different way.&lt;/p&gt;

&lt;p&gt;Day 92 was a combination of all three.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 days left in the challenge.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for Week 15
&lt;/h2&gt;

&lt;p&gt;As I move into &lt;strong&gt;Week 15&lt;/strong&gt;, my focus will shift toward &lt;strong&gt;building, improving my portfolio, and strengthening my understanding of Docker&lt;/strong&gt;, while continuing to develop my backend engineering skills.&lt;/p&gt;

&lt;p&gt;Here are my goals for Week 15:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Continue building my &lt;strong&gt;new portfolio&lt;/strong&gt; with &lt;strong&gt;Next.js, Tailwind CSS, and Motion&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Complete and improve the main sections of my &lt;strong&gt;portfolio website&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continue learning the fundamentals of &lt;strong&gt;Docker and containerization&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Strengthen my understanding of &lt;strong&gt;Java and backend development&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apply what I've learned through &lt;strong&gt;practical projects and hands-on development&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practice &lt;strong&gt;LeetCode&lt;/strong&gt; when I have available time&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continue applying for &lt;strong&gt;backend engineering opportunities&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stay consistent with &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; and continue documenting my progress&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With the challenge getting closer to the finish line, I want to make the most of this week by &lt;strong&gt;building more, applying what I've learned, and strengthening the skills I need as a backend-focused full-stack developer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm looking forward to making progress on my portfolio while continuing to learn Docker and improve my development workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect With Me
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>testing</category>
      <category>backend</category>
      <category>ai</category>
    </item>
    <item>
      <title>Week 13 of #100DaysOfCode: Completing Spring Microservices and Starting JUnit 5</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 13 Sep 2026 23:09:04 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/week-13-of-100daysofcode-completing-spring-microservices-and-starting-junit-5-50pd</link>
      <guid>https://dev.to/onatade_abdulmajeed/week-13-of-100daysofcode-completing-spring-microservices-and-starting-junit-5-50pd</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This week was another challenging but rewarding part of my &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; journey.&lt;/p&gt;

&lt;p&gt;I started the week by learning about &lt;strong&gt;Docker and containerized Microservices&lt;/strong&gt;, exploring how containers differ from Virtual Machines, how Docker images and containers work, and how Docker helps package applications and their dependencies consistently.&lt;/p&gt;

&lt;p&gt;I then moved into &lt;strong&gt;scaling Dockerized Microservices&lt;/strong&gt;, where I learned about &lt;strong&gt;autoscaling, container orchestration, Apache Mesos, Marathon, resource allocation, and managing Microservices at scale&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One of the biggest highlights of the week was completing my &lt;strong&gt;Building Spring with Microservices&lt;/strong&gt; course and writing the exam. After months of learning topics such as &lt;strong&gt;Spring Boot, Spring Cloud, Microservices, reactive programming, service discovery, API gateways, logging, monitoring, Docker, and scaling&lt;/strong&gt;, I was happy to finish the course with a score of &lt;strong&gt;85%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After completing the course, I started a new chapter by learning &lt;strong&gt;software testing with JUnit 5&lt;/strong&gt;. I began with the fundamentals of &lt;strong&gt;software quality, Verification and Validation, software defects, testing levels, static analysis, and the role of JUnit in Java testing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This week reminded me that backend engineering goes beyond writing code. It also involves understanding &lt;strong&gt;how applications are packaged, deployed, scaled, tested, and maintained reliably&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm glad to have completed one major learning milestone and started another area that will help me become a better engineer.&lt;/p&gt;

&lt;p&gt;Still learning. Still building. Still showing up. 💙&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Great things are done by a series of small things brought together."&lt;/p&gt;

&lt;p&gt;— Vincent van Gogh&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 80: Beginning Docker and Containerized Microservices
&lt;/h2&gt;

&lt;p&gt;On Day 80, I started Chapter 14, &lt;strong&gt;Containerizing Microservices with Docker&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What containers are and how they provide operating system virtualization&lt;/li&gt;
&lt;li&gt;The difference between Virtual Machines (VMs) and containers&lt;/li&gt;
&lt;li&gt;The benefits of containers, including scalability, portability, reusability, and immutability&lt;/li&gt;
&lt;li&gt;How containers support Microservices architecture&lt;/li&gt;
&lt;li&gt;An introduction to Docker as a platform for building, shipping, and running containers&lt;/li&gt;
&lt;li&gt;The two main Docker components: the &lt;strong&gt;Docker Daemon&lt;/strong&gt; and the &lt;strong&gt;Docker Client&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that became much clearer to me was the difference between VMs and containers. While VMs provide isolation through a guest operating system, containers are much lighter because they share the host operating system. This makes them faster to start and more efficient for running Microservices.&lt;/p&gt;

&lt;p&gt;I also started to understand why containers are useful when working with Microservices. Instead of worrying about differences between environments, applications and their dependencies can be packaged together and run consistently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 81: Containerizing Microservices with Docker
&lt;/h2&gt;

&lt;p&gt;On Day 81, I continued learning about Docker and completed the chapter on &lt;strong&gt;Containerizing Microservices with Docker&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker Images&lt;/strong&gt; — read-only templates containing the OS libraries, applications, and their dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Containers&lt;/strong&gt; — running instances of Docker images&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Registry&lt;/strong&gt; — where Docker images are published and downloaded&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Hub&lt;/strong&gt; — Docker's central registry&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Trusted Registry (DTR)&lt;/strong&gt; — used for setting up local or on-premise registries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dockerfiles&lt;/strong&gt; — files containing instructions for building Docker images&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding these fundamentals is helping me see how Docker packages applications and their dependencies so they can be built, shipped, and run consistently.&lt;/p&gt;

&lt;p&gt;With this chapter completed, I now have a better understanding of the role Docker plays in containerizing and deploying Microservices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 82: Scaling Dockerized Microservices with Mesos and Marathon
&lt;/h2&gt;

&lt;p&gt;On Day 82, I started Chapter 15, &lt;strong&gt;Scaling Dockerized Microservices with Mesos and Marathon&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Different approaches to autoscaling&lt;/li&gt;
&lt;li&gt;Scaling based on resource usage, time periods, queue length, and business parameters&lt;/li&gt;
&lt;li&gt;Predictive autoscaling&lt;/li&gt;
&lt;li&gt;Why Docker alone isn't enough for managing Microservices at scale&lt;/li&gt;
&lt;li&gt;The importance of container orchestration&lt;/li&gt;
&lt;li&gt;How orchestration helps with resource allocation, deployments, scalability, health, and service availability&lt;/li&gt;
&lt;li&gt;Different orchestration tools, including Docker Swarm, Kubernetes, Mesos, Marathon, Nomad, and Fleet&lt;/li&gt;
&lt;li&gt;Apache Mesos architecture and its Master, Agents, ZooKeeper, Scheduler, and Executor&lt;/li&gt;
&lt;li&gt;Marathon and how it manages long-running applications and Docker containers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that stood out to me is that as the number of Microservices grows, manually managing containers becomes difficult. Container orchestration provides the abstraction and automation needed to manage these systems more efficiently.&lt;/p&gt;

&lt;p&gt;This chapter also helped me understand that scaling isn't only about running more containers. There needs to be a system that can manage resources, monitor services, handle failures, and make sure the required number of instances are running.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 83/100
&lt;/h2&gt;

&lt;p&gt;Today, I officially completed my &lt;strong&gt;Building Spring with Microservices&lt;/strong&gt; course and wrote my exam.&lt;/p&gt;

&lt;p&gt;I scored &lt;strong&gt;85%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A few months ago, when I started learning and practicing Spring concepts, I thought there was too much for me to know. Microservices, Spring Boot, Spring Cloud, reactive programming, service discovery, API gateways, logging, monitoring, Docker, scaling, and a lot more.&lt;/p&gt;

&lt;p&gt;There were days when learning felt tiring. I had to go back, reread concepts, practice them, fix bugs, and prepare seriously for the exam.&lt;/p&gt;

&lt;p&gt;Today, seeing &lt;strong&gt;85%&lt;/strong&gt; on that result reminded me that the effort was worth it.&lt;/p&gt;

&lt;p&gt;I’m really happy to finally say that I’m done with the course.&lt;/p&gt;

&lt;p&gt;I'm grateful to &lt;a href="https://www.linkedin.com/in/oyerohab/" rel="noopener noreferrer"&gt;&lt;strong&gt;Habibulah Oyero&lt;/strong&gt;&lt;/a&gt; and everyone following along for the support, guidance, and encouragement throughout this journey. Your push to keep learning, building, and sharing my progress has made a real difference.&lt;/p&gt;

&lt;p&gt;This is another milestone in my journey to becoming a better backend engineer.&lt;/p&gt;

&lt;p&gt;I'm not stopping here. There are still plenty of things I need to learn, build, break, fix, and improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 84/100
&lt;/h2&gt;

&lt;p&gt;New chapter, new area to learn.&lt;/p&gt;

&lt;p&gt;Today, I started &lt;strong&gt;Mastering Software Testing with JUnit 5&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I started with the basics of software quality, quality engineering, Verification and Validation, software defects, and software testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Quality Planning, Quality Assurance, and Post-QA&lt;/li&gt;
&lt;li&gt;Verification &amp;amp; Validation&lt;/li&gt;
&lt;li&gt;The software defect chain: &lt;strong&gt;Error → Fault → Failure → Incidence&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Testing levels: &lt;strong&gt;Unit, Integration, System, and Acceptance&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Black-box, White-box, and Grey-box testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After spending the last few weeks learning about Microservices and distributed systems, I'm looking forward to getting deeper into software testing and understanding how to write better and more reliable code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 85: Going Deeper into Software Testing with JUnit 5
&lt;/h2&gt;

&lt;p&gt;On Day 85, I continued learning &lt;strong&gt;Mastering Software Testing with JUnit 5&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I went deeper into the first chapter, focusing on &lt;strong&gt;software quality, Verification and Validation (V&amp;amp;V), software testing, static analysis&lt;/strong&gt;, and the role of &lt;strong&gt;JUnit&lt;/strong&gt; in Java testing.&lt;/p&gt;

&lt;p&gt;I also took a quiz on the chapter to test how well I understood what I had studied.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Software quality&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verification and Validation (V&amp;amp;V)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Software testing&lt;/li&gt;
&lt;li&gt;Static analysis&lt;/li&gt;
&lt;li&gt;The role of &lt;strong&gt;JUnit&lt;/strong&gt; in Java testing&lt;/li&gt;
&lt;li&gt;The importance of testing software against its requirements and expected behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that stood out to me is that software testing isn't just about finding bugs. It's part of the bigger process of building software that actually &lt;strong&gt;meets its requirements and user expectations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm gradually getting a deeper understanding of software testing and how it fits into the software development process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for Week 14
&lt;/h2&gt;

&lt;p&gt;As I move into &lt;strong&gt;Week 14&lt;/strong&gt;, my main focus will be on continuing my learning journey with &lt;strong&gt;software testing and JUnit 5&lt;/strong&gt;, while also strengthening the backend concepts I have already covered.&lt;/p&gt;

&lt;p&gt;Here are my goals for Week 14:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continue learning &lt;strong&gt;Software Testing with JUnit 5&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Deepen my understanding of &lt;strong&gt;software quality, testing concepts, and test automation&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Start applying &lt;strong&gt;JUnit 5&lt;/strong&gt; concepts through practical examples&lt;/li&gt;
&lt;li&gt;Continue reviewing and strengthening my &lt;strong&gt;Java and backend development&lt;/strong&gt; knowledge&lt;/li&gt;
&lt;li&gt;Practice &lt;strong&gt;LeetCode&lt;/strong&gt; when I have available time&lt;/li&gt;
&lt;li&gt;Continue applying for &lt;strong&gt;backend engineering opportunities&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Stay consistent with &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; and continue documenting my progress&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This week, I want to focus on &lt;strong&gt;building a stronger understanding of software testing and writing better, more reliable Java code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After completing my Microservices course, I'm looking forward to applying what I've learned while continuing to develop the skills I need to become a better backend engineer.&lt;/p&gt;

&lt;p&gt;Still learning. Still building. Still showing up. 💙&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect With Me
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>spring</category>
      <category>microservices</category>
      <category>testing</category>
    </item>
    <item>
      <title>Week 12 of #100DaysOfCode: Exploring Spring Cloud and Microservices Infrastructure</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 06 Sep 2026 22:08:38 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/week-12-of-100daysofcode-exploring-spring-cloud-and-microservices-infrastructure-3neo</link>
      <guid>https://dev.to/onatade_abdulmajeed/week-12-of-100daysofcode-exploring-spring-cloud-and-microservices-infrastructure-3neo</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This week was another challenging but rewarding part of my &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; journey.&lt;/p&gt;

&lt;p&gt;I continued going deeper into &lt;strong&gt;Microservices with Spring Boot&lt;/strong&gt;, this time exploring how different &lt;strong&gt;Spring Cloud components&lt;/strong&gt; help manage distributed systems.&lt;/p&gt;

&lt;p&gt;I learned about &lt;strong&gt;Spring Cloud Config, Eureka, Zuul, Spring Cloud Stream, RabbitMQ, security, and JUnit testing&lt;/strong&gt;. I also started exploring &lt;strong&gt;logging and monitoring Microservices&lt;/strong&gt;, including centralized logging, distributed tracing, Prometheus, Spring Boot Actuator, and fault-tolerance concepts like the Circuit Breaker pattern.&lt;/p&gt;

&lt;p&gt;These topics helped me understand that building Microservices is not just about creating separate services. You also need to think about &lt;strong&gt;configuration, service discovery, communication, security, monitoring, and reliability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Some of the concepts were challenging, but I'm gradually connecting the different pieces and getting a better understanding of how modern backend systems are designed and managed.&lt;/p&gt;

&lt;p&gt;Still learning. Still building. Still showing up. 💙&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Great things are done by a series of small things brought together."&lt;/p&gt;

&lt;p&gt;— Vincent van Gogh&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 73: Starting Spring Cloud
&lt;/h2&gt;

&lt;p&gt;On day 73, I started the &lt;strong&gt;Scale Microservices with Spring Cloud Components&lt;/strong&gt; chapter and began exploring how Spring Cloud helps handle common challenges in distributed systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Spring Cloud&lt;/strong&gt; and how it provides tools for working with distributed systems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Spring Cloud Config&lt;/strong&gt; and how it helps externalize and manage configuration across different services and environments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How &lt;strong&gt;profiles&lt;/strong&gt; can be used to manage different configurations for different environments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to set up a &lt;strong&gt;Config Server&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This chapter is taking me deeper into the practical side of building and scaling Microservices. Instead of only learning what Microservices are, I'm now getting into the tools that help manage them in real-world systems.&lt;/p&gt;

&lt;p&gt;Another day of learning and getting a better understanding of how these architectural components work together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 74: Exploring Spring Cloud Config and Service Discovery
&lt;/h2&gt;

&lt;p&gt;On Day 74, I continued learning about &lt;strong&gt;Spring Cloud Config&lt;/strong&gt; and how configuration can be managed across Microservices.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Understanding the &lt;strong&gt;Config Server URL&lt;/strong&gt; using application name, profile, and label&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accessing the &lt;strong&gt;Config Server from clients&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handling configuration changes using &lt;code&gt;/refresh&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;strong&gt;Spring Cloud Bus&lt;/strong&gt; to propagate configuration changes across multiple instances&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setting up &lt;strong&gt;high availability&lt;/strong&gt; for the Config Server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Monitoring &lt;strong&gt;Config Server health&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;strong&gt;Eureka&lt;/strong&gt; for service registration and discovery&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Understanding how &lt;strong&gt;Ribbon&lt;/strong&gt; can dynamically change service instances&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm starting to see how &lt;strong&gt;Spring Cloud&lt;/strong&gt; helps solve some of the challenges that come with managing, communicating with, and scaling distributed systems.&lt;/p&gt;

&lt;p&gt;Another day of learning and getting a deeper understanding of how Microservices work in real-world environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 75: Exploring Service Discovery and API Gateways
&lt;/h2&gt;

&lt;p&gt;On Day 75, I continued learning about &lt;strong&gt;Microservices with Spring Cloud&lt;/strong&gt;, focusing on service discovery, API gateways, and testing.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic service registration and discovery&lt;/strong&gt; with Eureka&lt;/li&gt;
&lt;li&gt;Setting up a &lt;strong&gt;Eureka Server&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Configuring &lt;strong&gt;high availability&lt;/strong&gt; for Eureka&lt;/li&gt;
&lt;li&gt;Using &lt;strong&gt;Zuul as an API Gateway&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Started learning &lt;strong&gt;JUnit testing&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm beginning to understand how tools like &lt;strong&gt;Eureka and Zuul&lt;/strong&gt; help Microservices communicate, discover services, and manage requests in distributed systems.&lt;/p&gt;

&lt;p&gt;I also started exploring &lt;strong&gt;JUnit&lt;/strong&gt;, which is helping me understand the importance of testing when building reliable backend applications.&lt;/p&gt;

&lt;p&gt;Another day of learning and getting closer to building more &lt;strong&gt;reliable and maintainable backend systems&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 76: Completing Spring Cloud Components
&lt;/h2&gt;

&lt;p&gt;On Day 76, I completed the &lt;strong&gt;Spring Cloud Components&lt;/strong&gt; chapter and learned how different Spring Cloud tools work together to build, communicate, and secure distributed systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zuul as an API Gateway&lt;/strong&gt; and its different filters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High availability&lt;/strong&gt; with Zuul and Eureka&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spring Cloud Stream&lt;/strong&gt; with RabbitMQ, Redis, and Kafka&lt;/li&gt;
&lt;li&gt;The concept of &lt;strong&gt;Sources and Sinks&lt;/strong&gt; in messaging&lt;/li&gt;
&lt;li&gt;Protecting Microservices with &lt;strong&gt;Spring Cloud Security&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consumer-driven gateways&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This chapter gave me a better understanding of how different &lt;strong&gt;Spring Cloud components work together&lt;/strong&gt; to build and secure distributed applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 77: Exploring Logging and Monitoring Microservices
&lt;/h2&gt;

&lt;p&gt;On Day 77, I started &lt;strong&gt;Chapter 13: Logging and Monitoring Microservices&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What &lt;strong&gt;logs&lt;/strong&gt; are and the challenges of managing them across Microservices&lt;/li&gt;
&lt;li&gt;Popular Java logging frameworks: &lt;strong&gt;Log4j, Logback, and SLF4J&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Why &lt;strong&gt;centralized logging&lt;/strong&gt; is important&lt;/li&gt;
&lt;li&gt;Collecting and analyzing logs from multiple sources&lt;/li&gt;
&lt;li&gt;Tracking transactions &lt;strong&gt;end-to-end&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Keeping logs for &lt;strong&gt;long-term analysis and forecasting&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Reducing dependency on &lt;strong&gt;local disk storage&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As Microservices grow, managing logs across multiple services becomes more challenging. &lt;strong&gt;Centralized logging&lt;/strong&gt; helps bring everything together and makes it easier to understand what's happening across the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 78: Completing Logging and Monitoring Microservices
&lt;/h2&gt;

&lt;p&gt;On Day 78, I completed &lt;strong&gt;Chapter 13: Logging and Monitoring Microservices&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This chapter covered a lot around keeping distributed systems observable and reliable.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Selecting and designing logging solutions&lt;/li&gt;
&lt;li&gt;Log shippers, stream processors, storage, and dashboards&lt;/li&gt;
&lt;li&gt;Distributed tracing with &lt;strong&gt;Spring Cloud Sleuth&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Monitoring challenges in Microservices&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;APM, Synthetic Monitoring, and Real User Monitoring&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Monitoring tools like &lt;strong&gt;Prometheus&lt;/strong&gt; and &lt;strong&gt;Spring Boot Actuator&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hystrix&lt;/strong&gt; and the &lt;strong&gt;Circuit Breaker&lt;/strong&gt; pattern for fault tolerance&lt;/li&gt;
&lt;li&gt;Aggregating Hystrix streams with &lt;strong&gt;Turbine&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Using &lt;strong&gt;Data Lakes&lt;/strong&gt; to handle fragmented data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that stood out to me is that building Microservices isn't enough. You also need to understand what's happening across the entire system and be able to detect, trace, and respond to problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for Week 13
&lt;/h2&gt;

&lt;p&gt;As I move into Week 13, my main focus will be on &lt;strong&gt;preparing for my exams while maintaining my #100DaysOfCode progress&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here are my goals for Week 13:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prepare thoroughly for my &lt;strong&gt;exams&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Review the &lt;strong&gt;Microservices and Spring Cloud concepts&lt;/strong&gt; I've covered so far&lt;/li&gt;
&lt;li&gt;Continue with my current &lt;strong&gt;Spring Boot and Microservices studies&lt;/strong&gt; where possible&lt;/li&gt;
&lt;li&gt;Review &lt;strong&gt;Java and key backend concepts&lt;/strong&gt; for my exams&lt;/li&gt;
&lt;li&gt;Continue practicing &lt;strong&gt;LeetCode&lt;/strong&gt; when I have available time&lt;/li&gt;
&lt;li&gt;Keep applying for &lt;strong&gt;backend engineering opportunities&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Stay consistent with &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; and continue documenting my journey&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This week, my priority is &lt;strong&gt;balance&lt;/strong&gt;. With exams coming up, I don't want to overload myself with too many new topics or projects.&lt;/p&gt;

&lt;p&gt;Instead, I want to focus on &lt;strong&gt;understanding what I've already learned, preparing well for my exams, and maintaining steady progress&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After the exams, I can return to deeper practice and building with the Microservices concepts I've been learning.&lt;/p&gt;

&lt;p&gt;Still learning. Still building. Still showing up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect With Me
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>java</category>
      <category>spring</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Week 11 of #100DaysOfCode: Learning and Building Microservices with Spring Boot</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 30 Aug 2026 19:12:54 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/week-11-of-100daysofcode-learning-and-building-microservices-with-spring-boot-274e</link>
      <guid>https://dev.to/onatade_abdulmajeed/week-11-of-100daysofcode-learning-and-building-microservices-with-spring-boot-274e</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This week has been another challenging but rewarding part of my &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; journey.&lt;/p&gt;

&lt;p&gt;I moved from learning &lt;strong&gt;Microservices Architecture&lt;/strong&gt; and related architectural styles into the more practical side of &lt;strong&gt;building Microservices with Spring Boot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I explored &lt;strong&gt;Spring WebFlux, Reactive Streams, RabbitMQ, OAuth2, CORS, Swagger, and Spring Boot Actuator&lt;/strong&gt;, while also learning about security, messaging, monitoring, and asynchronous communication.&lt;/p&gt;

&lt;p&gt;I also started building and testing a simple Spring Boot Microservice, which helped me connect the theory I had been learning with practical implementation.&lt;/p&gt;

&lt;p&gt;Some of these concepts were challenging, but they are helping me understand that backend engineering is not just about writing code. It's also about understanding &lt;strong&gt;architecture, scalability, security, communication, and monitoring&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm still learning, building, applying, and looking for opportunities to grow. One step at a time. 💙&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Great things are done by a series of small things brought together."&lt;/p&gt;

&lt;p&gt;— Vincent van Gogh&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 66: Exploring Related Architecture Styles
&lt;/h2&gt;

&lt;p&gt;On day 66, I continued the &lt;strong&gt;Related Architecture Styles and Use Cases&lt;/strong&gt; chapter and explored how different architectural approaches are used in modern software systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lambda Architecture&lt;/strong&gt; and its applications in Big Data and IoT&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How &lt;strong&gt;DevOps, Cloud, and Containers&lt;/strong&gt; work together with Microservices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reactive Microservices&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conway's Law&lt;/strong&gt; and the connection between organizational structure and software architecture&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monolithic migration&lt;/strong&gt; as a common Microservices use case&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One concept that stood out to me was &lt;strong&gt;Conway's Law&lt;/strong&gt;. It made me think about how the way teams and organizations are structured can influence the architecture of the software they build.&lt;/p&gt;

&lt;p&gt;This section helped me understand that software architecture isn't only about technology. Organizational structure, development practices, and the way systems are deployed can also have a major influence on how applications are designed.&lt;/p&gt;

&lt;p&gt;Another day of learning and getting a better understanding of how these architectural concepts connect in real-world systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 67: Starting Microservices with Spring Boot
&lt;/h2&gt;

&lt;p&gt;On day 67, I started a new chapter: &lt;strong&gt;Building Microservices with Spring Boot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This chapter moves from the Microservices theory I've been learning into more practical implementation using Spring Boot.&lt;/p&gt;

&lt;p&gt;I didn't get to do much today, but I went through the beginning of the chapter and looked at what I'll be covering, including:&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Building &lt;strong&gt;RESTful Microservices&lt;/strong&gt; with Spring Boot&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Spring WebFlux&lt;/strong&gt; and reactive Microservices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Securing Microservices with &lt;strong&gt;Spring Security and OAuth2&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Documenting Microservices with &lt;strong&gt;Swagger&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;strong&gt;Spring Boot Actuator&lt;/strong&gt; for production-ready applications&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've already worked with some of these technologies before, so I'm looking forward to seeing how they come together when building actual Microservices.&lt;/p&gt;

&lt;p&gt;This chapter feels like a shift from simply understanding what Microservices are to actually learning how to build them with Spring Boot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 68: Building My First Spring Boot Microservice
&lt;/h2&gt;

&lt;p&gt;On day 68, I continued the &lt;strong&gt;Building Microservices with Spring Boot&lt;/strong&gt; chapter and started getting more hands-on.&lt;/p&gt;

&lt;p&gt;I set up my Spring Boot development environment and started building and testing a simple Spring Boot microservice.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How &lt;code&gt;@SpringBootApplication&lt;/code&gt; brings together &lt;strong&gt;configuration, auto-configuration, and component scanning&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to test a Spring Boot microservice using tools such as &lt;strong&gt;curl and Postman&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;HATEOAS&lt;/strong&gt; and how it can be used to include navigation links in REST responses&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;HAL&lt;/strong&gt;, a JSON-based format for representing hyperlinks between resources&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was a good step from the Microservices theory I've been learning into actually building with Spring Boot.&lt;/p&gt;

&lt;p&gt;I'm looking forward to going deeper into the practical side of Microservices as I continue through the chapter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 69: Exploring Reactive Microservices
&lt;/h2&gt;

&lt;p&gt;On day 69, I continued the &lt;strong&gt;Building Microservices with Spring Boot&lt;/strong&gt; chapter, focusing on &lt;strong&gt;Reactive Spring Boot Microservices&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How reactive principles can improve &lt;strong&gt;resource efficiency and scalability&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Building reactive microservices with &lt;strong&gt;Spring WebFlux&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using messaging servers such as &lt;strong&gt;RabbitMQ&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WebFlux's &lt;strong&gt;annotation-based and functional programming&lt;/strong&gt; approaches&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How &lt;strong&gt;Mono&lt;/strong&gt; fits into reactive request handling&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gave me a better understanding of how modern backend systems can handle &lt;strong&gt;asynchronous and non-blocking operations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm continuing to connect the concepts I've learned about reactive systems with practical Microservices development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 70: Reactive Streams and Microservice Security
&lt;/h2&gt;

&lt;p&gt;On day 70, I continued the &lt;strong&gt;Building Microservices with Spring Boot&lt;/strong&gt; chapter, focusing on &lt;strong&gt;Reactive Streams and securing Microservices&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The four Reactive Streams interfaces: &lt;strong&gt;Publisher, Subscriber, Subscription, and Processor&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How &lt;strong&gt;RabbitMQ&lt;/strong&gt; can be used for messaging in Microservices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Securing Microservices with &lt;strong&gt;Basic Security&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;strong&gt;OAuth2&lt;/strong&gt; to secure protected resources&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that stood out to me was how OAuth2 separates the responsibility of &lt;strong&gt;authenticating clients from protecting resources&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm gradually getting a better understanding of how reactive communication and security fit into Microservices architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 71: CORS, Actuator, and Monitoring
&lt;/h2&gt;

&lt;p&gt;On day 71, I continued the &lt;strong&gt;Building Microservices with Spring Boot&lt;/strong&gt; chapter and focused on &lt;strong&gt;CORS and monitoring Microservices&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enabling &lt;strong&gt;CORS&lt;/strong&gt; for cross-origin communication using &lt;code&gt;@CrossOrigin&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using &lt;strong&gt;Spring Boot Actuator&lt;/strong&gt; to monitor and manage Microservices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exploring Actuator endpoints such as &lt;code&gt;health&lt;/code&gt;, &lt;code&gt;metrics&lt;/code&gt;, &lt;code&gt;mappings&lt;/code&gt;, &lt;code&gt;info&lt;/code&gt;, and &lt;code&gt;dump&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Monitoring applications using &lt;strong&gt;JConsole and SSH&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Creating &lt;strong&gt;custom health checks and metrics&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This section helped me understand that building an application is only part of the job. Monitoring its health, performance, and behavior is also important, especially when running services in production.&lt;/p&gt;

&lt;p&gt;Another step forward in understanding the practical side of building and managing Microservices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for Week 12
&lt;/h2&gt;

&lt;p&gt;As I move into Week 12, I want to focus more on &lt;strong&gt;turning the Microservices concepts I've been learning into practical skills&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here are my goals for Week 12:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Continue building and practicing &lt;strong&gt;Spring Boot Microservices&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deepen my understanding of &lt;strong&gt;Spring Security and OAuth2&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practice &lt;strong&gt;Reactive Programming with Spring WebFlux&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Learn more about &lt;strong&gt;RabbitMQ and asynchronous communication&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practice using &lt;strong&gt;Spring Boot Actuator&lt;/strong&gt; for monitoring and observability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continue practicing &lt;strong&gt;LeetCode&lt;/strong&gt; and improving my problem-solving skills&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continue with &lt;strong&gt;mock technical interviews&lt;/strong&gt; and improve how I explain my solutions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep applying for &lt;strong&gt;backend engineering opportunities&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review &lt;strong&gt;Java, Data Structures, and Algorithms&lt;/strong&gt; for technical interviews&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continue improving and revisiting my existing projects&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stay consistent with &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; and continue documenting my journey&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This past week, I moved further from understanding Microservices only from an architectural perspective to exploring how they can actually be &lt;strong&gt;built and managed with Spring Boot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I worked with concepts around &lt;strong&gt;reactive programming, messaging, security, CORS, and monitoring&lt;/strong&gt;, while also getting hands-on with building a simple Spring Boot Microservice.&lt;/p&gt;

&lt;p&gt;There's still a lot for me to understand, but I'm gradually connecting the different pieces and becoming more comfortable with backend system design.&lt;/p&gt;

&lt;p&gt;Going forward, I want to focus more on &lt;strong&gt;building, practicing, and applying what I learn&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Still learning. Still building. Still showing up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's keep building. 💙&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect With Me
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>java</category>
      <category>microservices</category>
      <category>springboot</category>
    </item>
    <item>
      <title>Week 10 of #100DaysOfCode: Exploring Microservices and Modern Architecture</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 23 Aug 2026 16:27:11 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/week-10-of-100daysofcode-exploring-microservices-and-modern-architecture-4a9c</link>
      <guid>https://dev.to/onatade_abdulmajeed/week-10-of-100daysofcode-exploring-microservices-and-modern-architecture-4a9c</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This has been one of the &lt;strong&gt;toughest weeks&lt;/strong&gt; I've experienced since starting this challenge.&lt;/p&gt;

&lt;p&gt;There were moments when I &lt;strong&gt;doubted myself&lt;/strong&gt;, questioned my progress, and wondered whether all the effort and consistency would eventually pay off.&lt;/p&gt;

&lt;p&gt;While I was trying to keep learning, improving my skills, and looking for new opportunities, my &lt;strong&gt;phone also got damaged&lt;/strong&gt;, making things even more difficult. For a while, I couldn't properly connect to the internet or keep up with everything I needed to do.&lt;/p&gt;

&lt;p&gt;I found myself asking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will I ever get an opportunity? Will all this effort and consistency eventually pay off?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Despite those thoughts, I kept going.&lt;/p&gt;

&lt;p&gt;On the learning side, I continued going deeper into &lt;strong&gt;software architecture and backend system design&lt;/strong&gt;. This week, I completed &lt;strong&gt;Concurrency Design Patterns&lt;/strong&gt; and started exploring &lt;strong&gt;Microservices Architecture&lt;/strong&gt; and related concepts such as &lt;strong&gt;SOA, Twelve-Factor Apps, Cloud-Native Applications, Serverless Computing, DevOps, and Reactive Microservices&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These topics challenged me technically, but the challenges outside of learning also reminded me why &lt;strong&gt;consistency matters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm learning that &lt;strong&gt;#100DaysOfCode isn't just about writing code every day&lt;/strong&gt;. It's also about showing up when things don't go according to plan, continuing when progress feels slow, and trusting the process even when the outcome isn't clear.&lt;/p&gt;

&lt;p&gt;I'm leaving the rest in &lt;strong&gt;God's hands&lt;/strong&gt; and praying that everything works out for the best.&lt;/p&gt;

&lt;p&gt;For now, I'll keep learning, keep applying, keep improving, and keep showing up. 💙&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Success is the sum of small efforts, repeated day in and day out."&lt;/p&gt;

&lt;p&gt;— Robert Collier&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 59: Completing Concurrency Patterns
&lt;/h2&gt;

&lt;p&gt;On day 59, I completed the remaining parts of the &lt;strong&gt;Implementing Concurrency Patterns&lt;/strong&gt; chapter.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Half-Sync/Half-Async Pattern&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Leader/Follower Pattern&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Reactor Pattern&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thread-Specific Storage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;ExecutorService&lt;/code&gt; and thread pools&lt;/li&gt;
&lt;li&gt;Best practices for building concurrent applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that became clearer to me was how concurrency patterns help structure applications that need to handle multiple tasks or requests at the same time.&lt;/p&gt;

&lt;p&gt;I also learned that concurrency isn't just about creating multiple threads. Different patterns exist to manage how tasks are scheduled, synchronized, and executed while keeping applications efficient and reliable.&lt;/p&gt;

&lt;p&gt;Another chapter completed, and another step toward understanding how &lt;strong&gt;multithreaded applications are designed and managed&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 60: Starting Microservices
&lt;/h2&gt;

&lt;p&gt;On Day 60, I started Chapter 9: &lt;strong&gt;Demystifying Microservices&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What &lt;strong&gt;Microservices&lt;/strong&gt; are&lt;/li&gt;
&lt;li&gt;The business demands that contributed to their evolution&lt;/li&gt;
&lt;li&gt;How technology influenced the evolution of Microservices&lt;/li&gt;
&lt;li&gt;The evolution of imperative architecture&lt;/li&gt;
&lt;li&gt;How Microservices organize applications around autonomous, self-contained, and loosely coupled business capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was the beginning of my journey into Microservices, and it helped me start understanding why this architectural style evolved and the problems it aims to solve in modern software systems.&lt;/p&gt;

&lt;p&gt;There was still a lot more to explore, but this gave me a foundation for the sections that followed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 61: Understanding Microservices Architecture
&lt;/h2&gt;

&lt;p&gt;On &lt;strong&gt;Day 61&lt;/strong&gt;, I continued learning about &lt;strong&gt;Microservices Architecture&lt;/strong&gt; and went deeper into what makes a microservice different from simply splitting an application into smaller services.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;honeycomb analogy&lt;/strong&gt; for understanding Microservices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Single responsibility&lt;/strong&gt; and service autonomy&lt;/li&gt;
&lt;li&gt;Key &lt;strong&gt;characteristics of Microservices&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Lightweight and &lt;strong&gt;polyglot architecture&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The importance of &lt;strong&gt;automation and supporting ecosystems&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How services can be &lt;strong&gt;distributed and dynamic&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Antifragility&lt;/strong&gt;, fail-fast, and self-healing systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This section helped me understand that Microservices is not simply about having many small services. The services need to be &lt;strong&gt;autonomous, loosely coupled, resilient, and capable of evolving independently&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It also made me realize that designing distributed systems involves many considerations beyond writing the actual business logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 62: Understanding the Benefits of Microservices
&lt;/h2&gt;

&lt;p&gt;On &lt;strong&gt;Day 62&lt;/strong&gt;, I continued learning about &lt;strong&gt;Microservices&lt;/strong&gt; and focused on the benefits of adopting a microservices architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Supporting &lt;strong&gt;polyglot architecture&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enabling experimentation and innovation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Selective and elastic scalability&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Allowing substitution of services&lt;/li&gt;
&lt;li&gt;Helping manage &lt;strong&gt;technology debt&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Supporting different versions of services&lt;/li&gt;
&lt;li&gt;Supporting self-organizing systems&lt;/li&gt;
&lt;li&gt;Enabling &lt;strong&gt;event-driven architecture&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enabling DevOps practices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also learned about the &lt;strong&gt;Scale Cube&lt;/strong&gt;, which describes three approaches to scaling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;X-axis:&lt;/strong&gt; Horizontally cloning the application&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Y-axis:&lt;/strong&gt; Splitting different functionality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Z-axis:&lt;/strong&gt; Partitioning or sharding data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Microservices isn't just about breaking an application into smaller services. There are specific architectural benefits and trade-offs behind the approach, especially when it comes to &lt;strong&gt;scalability, flexibility, and independent evolution&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm continuing to build my understanding of not just &lt;em&gt;what&lt;/em&gt; Microservices are, but &lt;strong&gt;why organizations choose this architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 63: Exploring Related Architecture Styles
&lt;/h2&gt;

&lt;p&gt;On &lt;strong&gt;Day 63&lt;/strong&gt;, I started a new chapter: &lt;strong&gt;Related Architecture Styles and Use Cases&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;p&gt;I was introduced to several architecture styles and concepts, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Service-Oriented Architecture (SOA)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Twelve-Factor Apps&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Serverless Computing&lt;/li&gt;
&lt;li&gt;Lambda Architectures&lt;/li&gt;
&lt;li&gt;DevOps&lt;/li&gt;
&lt;li&gt;Cloud &amp;amp; Containers&lt;/li&gt;
&lt;li&gt;Reactive Microservices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also started learning about &lt;strong&gt;Service-Oriented Architecture (SOA)&lt;/strong&gt; and how it approaches software development through services and business capabilities.&lt;/p&gt;

&lt;p&gt;It's still early in the chapter, but I'm looking forward to understanding how these different architectural approaches relate to modern software systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 64: Exploring Related Architecture Styles and Use Cases
&lt;/h2&gt;

&lt;p&gt;On day 64, I continued learning about &lt;strong&gt;Related Architecture Styles and Use Cases&lt;/strong&gt;, exploring how different architectural approaches support modern software systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Service-oriented integration&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legacy modernization&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service-oriented applications&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monolithic migration using SOA&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Twelve-Factor App methodology&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloud-native applications&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serverless computing&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also explored several &lt;strong&gt;Twelve-Factor App principles&lt;/strong&gt;, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single codebase&lt;/li&gt;
&lt;li&gt;Bundled dependencies&lt;/li&gt;
&lt;li&gt;Externalized configuration&lt;/li&gt;
&lt;li&gt;Addressable backing services&lt;/li&gt;
&lt;li&gt;Separation of build, release, and run&lt;/li&gt;
&lt;li&gt;Stateless processes&lt;/li&gt;
&lt;li&gt;Port binding&lt;/li&gt;
&lt;li&gt;Concurrency for scaling&lt;/li&gt;
&lt;li&gt;Disposability&lt;/li&gt;
&lt;li&gt;Development/production parity&lt;/li&gt;
&lt;li&gt;Externalized logs&lt;/li&gt;
&lt;li&gt;Admin processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm beginning to understand how these principles help make applications more &lt;strong&gt;scalable, maintainable, and suitable for modern cloud environments&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for Week 11
&lt;/h2&gt;

&lt;p&gt;As I move into Week 11, I want to become more intentional about turning the concepts I've been learning into practical skills.&lt;/p&gt;

&lt;p&gt;Here are my goals for Week 11:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practice &lt;strong&gt;LeetCode&lt;/strong&gt; consistently and improve my problem-solving skills&lt;/li&gt;
&lt;li&gt;Continue doing &lt;strong&gt;mock technical interviews&lt;/strong&gt; and work on explaining my thought process&lt;/li&gt;
&lt;li&gt;Keep applying for &lt;strong&gt;backend engineering opportunities&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Continue learning and practicing &lt;strong&gt;Spring Security&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Build practical examples using the Spring concepts I've studied&lt;/li&gt;
&lt;li&gt;Review &lt;strong&gt;Java, Data Structures, and Algorithms&lt;/strong&gt; for technical interviews&lt;/li&gt;
&lt;li&gt;Continue learning &lt;strong&gt;Python&lt;/strong&gt; for scripting and fast prototyping&lt;/li&gt;
&lt;li&gt;Improve and revisit some of my existing projects&lt;/li&gt;
&lt;li&gt;Stay consistent with &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; and continue documenting my journey&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This past week, I continued going deeper into &lt;strong&gt;software architecture and backend system design&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I completed &lt;strong&gt;Concurrency Design Patterns&lt;/strong&gt; and started exploring &lt;strong&gt;Microservices Architecture&lt;/strong&gt;, learning about its evolution, characteristics, benefits, scalability, and the principles behind building autonomous and loosely coupled services.&lt;/p&gt;

&lt;p&gt;I also began exploring related architecture styles and concepts, including &lt;strong&gt;Service-Oriented Architecture (SOA), Twelve-Factor Apps, Cloud-Native Applications, Serverless Computing, DevOps, and Reactive Microservices&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A lot of these topics challenged me to think beyond simply writing code and start understanding &lt;strong&gt;how larger systems are structured, scaled, modernized, and designed to evolve independently&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Going forward, I want to spend more time &lt;strong&gt;building practical projects, applying the architectural concepts I'm learning, and testing my understanding&lt;/strong&gt; instead of only consuming information. I also want to continue improving my problem-solving skills, preparing for technical interviews, and actively looking for backend engineering opportunities.&lt;/p&gt;

&lt;p&gt;I'm still working toward becoming a stronger backend engineer, and there's still a lot to learn. But I'm taking it &lt;strong&gt;one step at a time and continuing to show up.&lt;/strong&gt; 💙&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's keep building. 💙&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>spring</category>
      <category>microservices</category>
      <category>software</category>
    </item>
    <item>
      <title>Week 9 of #100DaysOfCode: A Week of Deep Spring Learning</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 16 Aug 2026 19:23:22 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/week-9-of-100daysofcode-a-week-of-deep-spring-learning-4d57</link>
      <guid>https://dev.to/onatade_abdulmajeed/week-9-of-100daysofcode-a-week-of-deep-spring-learning-4d57</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This week, I decided to slow down and go deeper into the &lt;strong&gt;Spring Framework&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of focusing heavily on building new features, I spent most of my time understanding what happens behind the scenes in the framework I use to build backend applications.&lt;/p&gt;

&lt;p&gt;I explored concepts around &lt;strong&gt;Spring AOP, JDBC, Caching, Reactive Programming, and Concurrency&lt;/strong&gt;, learning not just how to use these features, but the problems they are designed to solve.&lt;/p&gt;

&lt;p&gt;Alongside my learning, I continued applying for &lt;strong&gt;backend engineering opportunities&lt;/strong&gt;, preparing myself for technical interviews, and staying consistent with my &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; journey.&lt;/p&gt;

&lt;p&gt;Some of these topics were challenging and unfamiliar, but they gave me a much better perspective on how modern backend applications can be designed to be more &lt;strong&gt;efficient, responsive, scalable, and maintainable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here’s a look at what I learned throughout the week.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Success is the sum of small efforts, repeated day in and day out."&lt;/p&gt;

&lt;p&gt;— Robert Collier&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 52: Understanding Spring Caching
&lt;/h2&gt;

&lt;p&gt;Today, I started learning &lt;strong&gt;Spring Caching&lt;/strong&gt; and how caching can be used to improve application performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What caching is and where it can be used&lt;/li&gt;
&lt;li&gt;How &lt;strong&gt;Spring's Cache Abstraction&lt;/strong&gt; works&lt;/li&gt;
&lt;li&gt;The role of &lt;code&gt;Cache&lt;/code&gt; and &lt;code&gt;CacheManager&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Different cache providers&lt;/li&gt;
&lt;li&gt;How caching can reduce repeated executions and unnecessary database calls&lt;/li&gt;
&lt;li&gt;How Spring uses the &lt;strong&gt;Proxy Pattern&lt;/strong&gt; to apply caching behavior&lt;/li&gt;
&lt;li&gt;How caching can be enabled using annotations or XML configuration&lt;/li&gt;
&lt;li&gt;The different caching annotations, including &lt;code&gt;@Cacheable&lt;/code&gt;, &lt;code&gt;@CachePut&lt;/code&gt;, &lt;code&gt;@CacheEvict&lt;/code&gt;, &lt;code&gt;@Caching&lt;/code&gt;, and &lt;code&gt;@CacheConfig&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;How Spring uses &lt;strong&gt;AOP and Around Advice&lt;/strong&gt; to implement caching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that stood out to me was that caching is another example of how Spring uses &lt;strong&gt;AOP to separate cross-cutting concerns from business logic&lt;/strong&gt;. Instead of putting caching logic directly inside my business methods, Spring can apply it around those methods through proxies.&lt;/p&gt;

&lt;p&gt;I'm also beginning to understand that caching isn't simply about storing data. The application needs to decide &lt;strong&gt;what should be cached, how the cache should be configured, and when cached data should be updated or removed&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;The main challenge was understanding how the different parts of Spring's caching abstraction work together, especially the relationship between the cache, &lt;code&gt;CacheManager&lt;/code&gt;, proxies, and AOP.&lt;/p&gt;

&lt;p&gt;I also had to differentiate between the responsibilities of annotations such as &lt;code&gt;@Cacheable&lt;/code&gt;, &lt;code&gt;@CachePut&lt;/code&gt;, and &lt;code&gt;@CacheEvict&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 53: Complete reading Spring Caching
&lt;/h2&gt;

&lt;p&gt;Today, I continued learning &lt;strong&gt;Spring Caching&lt;/strong&gt;, building on what I learned the previous day.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;How to enable Spring's caching abstraction using &lt;code&gt;@EnableCaching&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The roles of &lt;code&gt;@Cacheable&lt;/code&gt;, &lt;code&gt;@CachePut&lt;/code&gt;, and &lt;code&gt;@CacheEvict&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;How to configure cache storage&lt;/li&gt;
&lt;li&gt;Caching best practices&lt;/li&gt;
&lt;li&gt;How Spring uses &lt;strong&gt;AOP and Around Advice&lt;/strong&gt; to apply caching behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that became clearer to me was how Spring handles caching behind the scenes. Instead of adding caching logic directly into business methods, Spring uses AOP to apply the caching behavior through proxies.&lt;/p&gt;

&lt;p&gt;This helped me connect caching with what I previously learned about &lt;strong&gt;cross-cutting concerns and Spring AOP&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 54: Getting Started with Reactive Design Patterns
&lt;/h2&gt;

&lt;p&gt;Today, I started learning &lt;strong&gt;Reactive Design Patterns&lt;/strong&gt; in Spring and focused on why reactive programming has become important for modern applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Why reactive programming is needed&lt;/li&gt;
&lt;li&gt;The difference between &lt;strong&gt;blocking and non-blocking calls&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The principles of reactive systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Responsiveness, resilience, scalability, and message-driven architecture&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;How reactive systems are designed to handle large numbers of concurrent requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What stood out to me was that modern applications need to handle much higher traffic and concurrency than traditional systems were designed for. Reactive programming provides an approach for building systems that can remain responsive and efficient under these conditions.&lt;/p&gt;

&lt;p&gt;This was mainly an introduction to the reactive programming model, and it gave me a foundation for understanding how Spring supports reactive applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 55: Understanding Reactive Streams and Spring Web Reactive
&lt;/h2&gt;

&lt;p&gt;Today, I continued learning &lt;strong&gt;Reactive Programming with Spring&lt;/strong&gt;, going deeper into how reactive applications handle asynchronous data and concurrent requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What &lt;strong&gt;Reactive Streams&lt;/strong&gt; are&lt;/li&gt;
&lt;li&gt;The concept of &lt;strong&gt;back-pressure&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Reactor&lt;/strong&gt; framework&lt;/li&gt;
&lt;li&gt;The four Reactive Streams interfaces: &lt;code&gt;Publisher&lt;/code&gt;, &lt;code&gt;Subscriber&lt;/code&gt;, &lt;code&gt;Subscription&lt;/code&gt;, and &lt;code&gt;Processor&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Spring's &lt;strong&gt;Web Reactive&lt;/strong&gt; module&lt;/li&gt;
&lt;li&gt;The differences between &lt;strong&gt;Spring MVC and Spring Web Reactive&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How blocking and non-blocking request handling differ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One concept that stood out to me was &lt;strong&gt;back-pressure&lt;/strong&gt;. It allows a consumer to control how much data it can handle from a producer, helping prevent the system from becoming overloaded.&lt;/p&gt;

&lt;p&gt;I also learned that Spring Web Reactive is designed around non-blocking request processing, which makes it suitable for applications that need to handle many concurrent operations efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 56: Completing Reactive Design Patterns
&lt;/h2&gt;

&lt;p&gt;Today, I completed the &lt;strong&gt;Reactive Design Patterns&lt;/strong&gt; chapter and went deeper into how Spring builds reactive web applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;functional programming model&lt;/strong&gt; for reactive applications&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RouterFunction&lt;/code&gt; and &lt;code&gt;HandlerFunction&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Working with &lt;code&gt;Mono&lt;/code&gt; and &lt;code&gt;Flux&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Creating reactive servers using &lt;strong&gt;Reactor and Tomcat&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Using &lt;strong&gt;Spring WebClient&lt;/strong&gt; for reactive client-side communication&lt;/li&gt;
&lt;li&gt;Reactive request and response body conversion using &lt;strong&gt;Encoder and Decoder&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How Spring supports both &lt;strong&gt;annotation-based and functional programming models&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How reactive applications handle data using non-blocking streams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Completing this chapter helped me connect the different concepts I had learned over the past few days, from reactive systems and back-pressure to Reactive Streams, Reactor, and Spring Web Reactive.&lt;/p&gt;

&lt;p&gt;It was one of the more unfamiliar areas I've studied so far, but I now have a much better understanding of how Spring approaches &lt;strong&gt;asynchronous and non-blocking applications&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 57: Getting Started with Concurrency Design Patterns
&lt;/h2&gt;

&lt;p&gt;Today, I started learning &lt;strong&gt;Concurrency Design Patterns&lt;/strong&gt; in Spring, focusing on how these patterns help applications handle multiple tasks and requests concurrently.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What concurrency means in software development&lt;/li&gt;
&lt;li&gt;How concurrency patterns relate to &lt;strong&gt;multithreaded applications&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Active Object Pattern&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Monitor Object Pattern&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How concurrency patterns help manage concurrent method execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Active Object and Monitor Object patterns introduced me to different approaches for managing concurrent operations and synchronizing access to objects.&lt;/p&gt;

&lt;p&gt;This was just the beginning of the chapter, but it gave me a foundation for understanding how applications can handle multiple operations at the same time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for Week 10
&lt;/h2&gt;

&lt;p&gt;As I move into Week 10, I want to become more intentional about turning the concepts I've been learning into practical skills.&lt;/p&gt;

&lt;p&gt;Here are my goals for Week 10:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practice &lt;strong&gt;LeetCode&lt;/strong&gt; consistently and improve my problem-solving skills&lt;/li&gt;
&lt;li&gt;Continue doing &lt;strong&gt;mock technical interviews&lt;/strong&gt; and work on explaining my thought process&lt;/li&gt;
&lt;li&gt;Keep applying for &lt;strong&gt;backend engineering opportunities&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Continue learning and practicing &lt;strong&gt;Spring Security&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Build practical examples using the Spring concepts I've studied&lt;/li&gt;
&lt;li&gt;Review &lt;strong&gt;Java, Data Structures, and Algorithms&lt;/strong&gt; for technical interviews&lt;/li&gt;
&lt;li&gt;Continue learning &lt;strong&gt;Python&lt;/strong&gt; for scripting and fast prototyping&lt;/li&gt;
&lt;li&gt;Improve and revisit some of my existing projects&lt;/li&gt;
&lt;li&gt;Stay consistent with &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; and continue documenting my journey&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This past week, I continued my Spring learning by studying &lt;strong&gt;Spring Caching, Reactive Design Patterns, and Concurrency Design Patterns&lt;/strong&gt;. I also completed the Reactive Design Patterns chapter and started exploring how concurrency patterns help applications handle multiple operations and requests.&lt;/p&gt;

&lt;p&gt;A lot of these topics have challenged me to think beyond simply writing code and start understanding what happens behind the scenes in modern applications.&lt;/p&gt;

&lt;p&gt;Going forward, I want to spend more time &lt;strong&gt;building, practicing, and testing my understanding&lt;/strong&gt; instead of only consuming information. I also want to use active recall more consistently so I can actually remember and explain the concepts I'm learning.&lt;/p&gt;

&lt;p&gt;I'm still working toward becoming a stronger backend engineer, improving my problem-solving skills, and becoming more confident when facing technical interviews.&lt;/p&gt;

&lt;p&gt;There is still a lot to learn, but I'm taking it one step at a time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's keep building. 💙&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>java</category>
      <category>spring</category>
      <category>backend</category>
    </item>
    <item>
      <title>Week 8 of #100DaysOfCode: Grinding for Exams</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 09 Aug 2026 20:41:25 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/week-8-of-100daysofcode-grinding-for-exams-17e9</link>
      <guid>https://dev.to/onatade_abdulmajeed/week-8-of-100daysofcode-grinding-for-exams-17e9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Instead of building a new project, I decided to go back to the fundamentals. I spent most of the week learning more about the Spring Framework, especially concepts like &lt;strong&gt;Spring AOP, Dependency Injection, the IoC Container, Spring Security, logging, and software design principles&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I also spent a good part of the week preparing for my upcoming exams while staying consistent with my #100DaysOfCode challenge. Alongside that, I updated my CV, continued applying for backend roles, and even tried an AI-powered mock interview. Let's just say it was a good reminder that I still have a lot to improve when it comes to technical interviews.&lt;/p&gt;

&lt;p&gt;Although I didn't ship a new project this week, I don't see it as a slow week. Understanding the concepts behind the framework I use every day is just as important as writing code. The better I understand how Spring works, the better I'll be able to build secure, scalable, and maintainable applications.&lt;/p&gt;

&lt;p&gt;This week was less about showing what I built and more about strengthening the foundation I'm building on.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The more I learn, the more I realize how much I don't know."&lt;/p&gt;

&lt;p&gt;— Albert Einstein&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 45: Moving from In-Memory to Database Authentication
&lt;/h2&gt;

&lt;p&gt;On day 45, I continued learning &lt;strong&gt;Spring Security&lt;/strong&gt; by moving from in-memory authentication to database-backed authentication.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Created a user database for authentication&lt;/li&gt;
&lt;li&gt;Implemented a custom &lt;code&gt;UserDetailsService&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Created a custom &lt;code&gt;UserPrincipal&lt;/code&gt; by implementing the &lt;code&gt;UserDetails&lt;/code&gt; interface&lt;/li&gt;
&lt;li&gt;Configured a &lt;code&gt;DaoAuthenticationProvider&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Connected Spring Security to my user repository&lt;/li&gt;
&lt;li&gt;Learned more about how Spring Security retrieves user information and authenticates users behind the scenes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm still following a tutorial, but I'm trying to understand what is happening under the hood instead of simply getting the code to work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;I ran into some issues while configuring Spring Security, particularly around version compatibility and the changes in newer versions of Spring Security. This helped me understand that the way Spring Security is configured can change between versions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;snippet of the code.&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fssm662jztlqlcg4gcphh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fssm662jztlqlcg4gcphh.png" alt="Snippet of the code" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 46: Learning Spring AOP
&lt;/h2&gt;

&lt;p&gt;Today, I learned how &lt;strong&gt;Spring AOP (Aspect-Oriented Programming)&lt;/strong&gt; helps keep applications clean and maintainable.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What Spring AOP is and why it is useful&lt;/li&gt;
&lt;li&gt;How &lt;strong&gt;cross-cutting concerns&lt;/strong&gt; can be separated from business logic&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Proxy Pattern&lt;/strong&gt; in Spring&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Decorator Pattern&lt;/strong&gt; and how it relates to Spring AOP&lt;/li&gt;
&lt;li&gt;How Spring uses proxies to apply concerns such as logging, security, and transaction management without directly modifying business logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main idea I took away today is that not every piece of code belongs inside business logic. Concerns like logging, security, and transaction management can be handled separately using AOP, making applications easier to maintain and extend.&lt;/p&gt;

&lt;p&gt;Today was mostly focused on understanding the concepts and design patterns behind Spring AOP. I didn't build anything practical yet, but understanding these concepts is helping me see how Spring works behind the scenes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AOP process diagram&lt;/p&gt;
&lt;/blockquote&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpbdbypp5zuqaoblnq2f3.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpbdbypp5zuqaoblnq2f3.webp" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 47: Understanding Spring AOP Proxies
&lt;/h2&gt;

&lt;p&gt;Today, I continued learning &lt;strong&gt;Spring AOP&lt;/strong&gt; and explored how Spring uses proxies to implement Aspect-Oriented Programming behind the scenes.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The difference between &lt;strong&gt;JDK Dynamic Proxy&lt;/strong&gt; and &lt;strong&gt;CGLIB Proxy&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;When Spring uses JDK proxies and when it uses CGLIB proxies&lt;/li&gt;
&lt;li&gt;How AOP helps solve &lt;strong&gt;code tangling&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How AOP helps solve &lt;strong&gt;code scattering&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How Spring AOP uses proxies to separate cross-cutting concerns from business logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing I found particularly interesting is that Spring doesn't modify the original classes directly. Instead, it creates proxy objects that can intercept method calls and apply cross-cutting concerns such as logging, security, and transaction management without changing the business logic itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;I didn't encounter any major technical errors today. The main challenge was understanding how JDK Dynamic Proxies and CGLIB proxies work and how they fit into Spring AOP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 48: Understanding Spring AOP
&lt;/h2&gt;

&lt;p&gt;Today, I continued learning &lt;strong&gt;Spring AOP (Aspect-Oriented Programming)&lt;/strong&gt; and gained a much better understanding of how Spring handles cross-cutting concerns behind the scenes while preparing for my exam.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Why Spring AOP exists and the problems it solves&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-cutting concerns&lt;/strong&gt;, code tangling, and code scattering&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The five types of Spring AOP advice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Before&lt;/li&gt;
&lt;li&gt;After&lt;/li&gt;
&lt;li&gt;After Returning&lt;/li&gt;
&lt;li&gt;After Throwing&lt;/li&gt;
&lt;li&gt;Around&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The relationship between &lt;strong&gt;Advice, Join Points, Pointcuts, and Aspects&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How &lt;strong&gt;weaving&lt;/strong&gt; combines aspects with business logic using proxies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to define pointcuts with annotations to determine where advice should be applied&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing I've realized is that Spring AOP isn't just about logging or security. It's about keeping business logic clean by separating concerns that would otherwise be repeated throughout an application.&lt;/p&gt;

&lt;p&gt;Understanding what's happening behind the scenes has given me a much greater appreciation for how the Spring Framework is designed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;I didn't encounter any major technical errors today. The main challenge was remembering how the different AOP concepts—especially advice, join points, pointcuts, aspects, and weaving—fit together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 49: Getting Started with Spring JDBC
&lt;/h2&gt;

&lt;p&gt;Today, I continued learning &lt;strong&gt;Spring JDBC&lt;/strong&gt; and &lt;code&gt;JdbcTemplate&lt;/code&gt;, focusing on how Spring simplifies database access.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;How Spring approaches data persistence&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Template Design Pattern&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Problems with traditional JDBC&lt;/li&gt;
&lt;li&gt;How &lt;code&gt;JdbcTemplate&lt;/code&gt; reduces boilerplate code&lt;/li&gt;
&lt;li&gt;How Spring handles &lt;strong&gt;data-access exceptions&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Different &lt;code&gt;DataSource&lt;/code&gt; implementations&lt;/li&gt;
&lt;li&gt;The importance of &lt;strong&gt;database connection pooling&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Using the &lt;strong&gt;Builder Pattern&lt;/strong&gt; to create an embedded data source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing I'm starting to understand is that Spring's abstractions aren't just there to make development easier. They help remove repetitive work and allow developers to focus more on the actual application logic.&lt;/p&gt;

&lt;p&gt;Understanding the patterns behind these features is also helping me see how many of Spring's tools are designed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;I didn't encounter any major technical errors today. The main challenge was understanding how the Template and Builder patterns fit into Spring's approach to database access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 50: Halfway There
&lt;/h2&gt;

&lt;p&gt;50 days down. 50 to go. 💙&lt;/p&gt;

&lt;p&gt;Honestly, reaching Day 50 feels different.&lt;/p&gt;

&lt;p&gt;When I started this challenge, I knew I wanted to learn, build, and become better at software engineering. But I don't think I fully understood how much work, confusion, frustration, and self-doubt would come with it.&lt;/p&gt;

&lt;p&gt;There have been days when things made sense, days when I felt completely lost, and days when I wondered if I was actually improving. But somehow, I kept showing up.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;How the &lt;strong&gt;DAO pattern&lt;/strong&gt; abstracts database access&lt;/li&gt;
&lt;li&gt;How &lt;code&gt;JdbcTemplate&lt;/code&gt; simplifies database operations&lt;/li&gt;
&lt;li&gt;How &lt;code&gt;RowMapper&lt;/code&gt;, &lt;code&gt;RowCallbackHandler&lt;/code&gt;, and &lt;code&gt;ResultSetExtractor&lt;/code&gt; are used when working with query results&lt;/li&gt;
&lt;li&gt;Best practices for configuring and using Spring JDBC&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;I didn't encounter any major technical errors today. The main focus was understanding how these different components work together and why Spring provides these abstractions in the first place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Halfway Reflection
&lt;/h3&gt;

&lt;p&gt;More than anything, Day 50 is a reminder that I'm still on the journey.&lt;/p&gt;

&lt;p&gt;I still have a lot to learn. There are things I struggle to remember, concepts I have to revisit, and areas where I don't feel confident yet. But I'm beginning to understand more than I did when I started.&lt;/p&gt;

&lt;p&gt;I'm also really grateful for the people who have supported me along the way.&lt;/p&gt;

&lt;p&gt;To everyone who has liked my posts, commented, shared them, encouraged me, or simply followed my journey—&lt;strong&gt;thank you&lt;/strong&gt;. I genuinely appreciate it.&lt;/p&gt;

&lt;p&gt;And a special thank you to my mentor, &lt;strong&gt;Habibulah Oyero&lt;/strong&gt;, for the guidance, encouragement, and support that have helped me get this far. I'm truly grateful for everything you've done for me.&lt;/p&gt;

&lt;p&gt;I'm halfway through the challenge, but the journey is far from over.&lt;/p&gt;

&lt;p&gt;I pray God continues to guide me, give me strength, and lead me to the right opportunities as I keep putting in the work.&lt;/p&gt;

&lt;p&gt;For now, I'll keep learning, building, making mistakes, and trying again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;50 days down. 50 more to go. Let's keep building. 💙&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Goals for Week 9
&lt;/h1&gt;

&lt;p&gt;With my exams almost behind me, I'm looking forward to shifting some of my focus back to building, improving my technical skills, and preparing for backend engineering opportunities.&lt;/p&gt;

&lt;p&gt;Here are my goals for Week 9:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practice &lt;strong&gt;LeetCode&lt;/strong&gt; consistently to improve my problem-solving skills&lt;/li&gt;
&lt;li&gt;Do more &lt;strong&gt;mock technical interviews&lt;/strong&gt; to build my confidence&lt;/li&gt;
&lt;li&gt;Continue applying for &lt;strong&gt;backend engineering roles&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Continue learning &lt;strong&gt;Spring Security&lt;/strong&gt; and complete database-backed authentication&lt;/li&gt;
&lt;li&gt;Build practical examples around the Spring concepts I've been studying&lt;/li&gt;
&lt;li&gt;Review core &lt;strong&gt;Data Structures and Algorithms&lt;/strong&gt; for coding interviews&lt;/li&gt;
&lt;li&gt;Resume learning &lt;strong&gt;Python&lt;/strong&gt; alongside my Java backend journey&lt;/li&gt;
&lt;li&gt;Improve my existing projects whenever I have the time&lt;/li&gt;
&lt;li&gt;Stay consistent with &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; and continue documenting what I learn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This week, I went deeper into &lt;strong&gt;Spring AOP, dependency injection, Spring Security, logging, and Spring JDBC&lt;/strong&gt;. A lot of what I learned wasn't immediately visible in an application, but it helped me understand more about what happens behind the scenes.&lt;/p&gt;

&lt;p&gt;As my exams come to an end, I'm excited to get back to building and also start putting more effort into interview preparation.&lt;/p&gt;

&lt;p&gt;I want to become better at solving problems, writing clean code, understanding the systems I build, and most importantly, being able to explain my thought process when I'm in an interview.&lt;/p&gt;

&lt;p&gt;I'm still learning. I'm still figuring things out. But I'm making progress, one day at a time.&lt;/p&gt;

&lt;p&gt;If you're also learning, building, or growing in tech, I'd love to connect and follow your journey too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's keep building. 💙&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>spring</category>
      <category>java</category>
      <category>backend</category>
    </item>
    <item>
      <title>Week 7 of #100DaysOfCode: Back to the Fundamentals</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 02 Aug 2026 20:31:34 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/week-7-of-100daysofcode-back-to-the-fundamentals-3b73</link>
      <guid>https://dev.to/onatade_abdulmajeed/week-7-of-100daysofcode-back-to-the-fundamentals-3b73</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;After two busy weeks of building &lt;strong&gt;VeriFund&lt;/strong&gt;, deploying projects, participating in my first hackathon, and attending &lt;strong&gt;APIConf 2026&lt;/strong&gt;, this week was much quieter.&lt;/p&gt;

&lt;p&gt;Instead of building a new project, I decided to go back to the fundamentals. I spent most of the week learning more about the Spring Framework, especially concepts like &lt;strong&gt;Spring AOP, Dependency Injection, the IoC Container, Spring Security, logging, and software design principles&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I also started preparing for my upcoming exams while staying consistent with my #100DaysOfCode challenge. Alongside that, I updated my CV, continued applying for backend roles, and even tried an AI-powered mock interview. Let's just say it was a reminder that I still have a lot to improve when it comes to technical interviews.&lt;/p&gt;

&lt;p&gt;Although I didn't ship a new project this week, I don't see it as a slow week. Understanding the concepts behind the framework I use every day is just as important as writing code. The better I understand how Spring works, the better I'll be able to build secure, scalable, and maintainable applications.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The more I learn, the more I realize how much I don't know."&lt;/p&gt;

&lt;p&gt;— Albert Einstein&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 38: Exploring Core Spring Concepts
&lt;/h2&gt;

&lt;p&gt;With my exams approaching, I shifted my focus from building projects to strengthening my understanding of the Spring Framework. I revised core concepts such as POJOs, Dependency Injection, Programming to Interfaces, Spring AOP, the major Spring modules, and some of the improvements introduced in Spring 5, including WebFlux. It reminded me that understanding the ideas behind the framework is just as important as knowing how to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 39: Learning Logging in Spring Boot
&lt;/h2&gt;

&lt;p&gt;As I continued strengthening my understanding of the Spring Framework, I spent the day learning how logging works in Spring Boot.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What a Logger is and why it's important&lt;/li&gt;
&lt;li&gt;Using LoggerFactory to create loggers&lt;/li&gt;
&lt;li&gt;Logging application events instead of relying on System.out.println()&lt;/li&gt;
&lt;li&gt;Why logging is essential for debugging, monitoring, and maintaining applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of my time was spent reading my Spring notes and understanding how Spring Boot handles logging behind the scenes. Although I didn't build anything new, I gained a much better appreciation for why proper logging is considered a best practice in production applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;There weren't any major technical challenges today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 40: Exploring Spring Security and Software Design Principles
&lt;/h2&gt;

&lt;p&gt;I continued learning the concepts that make Spring Boot applications more secure, maintainable, and scalable.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Different types of AOP advice:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@AfterReturning&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@AfterThrowing&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@After (Finally)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;An introduction to Spring Security&lt;/li&gt;
&lt;li&gt;Authentication vs Authorization&lt;/li&gt;
&lt;li&gt;Password hashing with BCrypt&lt;/li&gt;
&lt;li&gt;An overview of OAuth2&lt;/li&gt;
&lt;li&gt;The Gang of Four (GoF) Design Patterns&lt;/li&gt;
&lt;li&gt;Dependency Injection&lt;/li&gt;
&lt;li&gt;The SOLID Principles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of the day was spent studying these concepts and putting some of them into practice with small code examples. Writing code alongside the theory helped me understand how concepts like AOP advice, Spring Security, and Dependency Injection are actually applied in Spring Boot applications. It reinforced the idea that understanding the principles behind the framework makes it much easier to build secure, maintainable, and scalable applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;The biggest challenge today was understanding how all these concepts relate to one another. Topics like Spring Security, OAuth2, GoF Design Patterns, and the SOLID Principles are broad on their own, and it took time to connect the theory with the small examples I was writing. Even though I was able to practice some of them in code, I know there's still a lot more to explore before I can confidently apply them in larger real-world projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 41: Understanding Dependency Injection in Spring
&lt;/h2&gt;

&lt;p&gt;I continued learning about &lt;strong&gt;Dependency Injection&lt;/strong&gt; in Spring and gained a better understanding of how the framework manages objects behind the scenes.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Constructor-based Dependency Injection&lt;/li&gt;
&lt;li&gt;Setter-based Dependency Injection&lt;/li&gt;
&lt;li&gt;Advantages and disadvantages of each approach&lt;/li&gt;
&lt;li&gt;Best practices for constructor and setter injection&lt;/li&gt;
&lt;li&gt;A high-level overview of the Spring IoC Container&lt;/li&gt;
&lt;li&gt;Different ways to configure Spring applications:

&lt;ul&gt;
&lt;li&gt;Java-based configuration&lt;/li&gt;
&lt;li&gt;Annotation-based configuration&lt;/li&gt;
&lt;li&gt;XML-based configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was another theory-focused day. I spent time understanding the different approaches to Dependency Injection and why constructor injection is generally preferred in modern Spring applications. Learning how the IoC container creates and manages beans gave me a much clearer picture of what happens behind the scenes whenever I use Spring.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;The biggest challenge today was comparing the different configuration approaches and understanding when each one is appropriate. Although annotation-based configuration is the most common today, learning about Java-based and XML-based configuration helped me appreciate how Spring has evolved over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 42: Learning Spring Annotations and Preparing for Opportunities
&lt;/h2&gt;

&lt;p&gt;Today was a mix of learning and career growth.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Worked On
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Updated and improved my CV&lt;/li&gt;
&lt;li&gt;Followed up on a previous job application&lt;/li&gt;
&lt;li&gt;Continued learning Dependency Injection in Spring&lt;/li&gt;
&lt;li&gt;Explored Annotation-based Configuration in more depth&lt;/li&gt;
&lt;li&gt;Learned how annotations such as:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@Component&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Service&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Repository&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Controller&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Autowired&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@Qualifier&lt;/code&gt;
help Spring create, manage, and inject beans automatically&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also spent time understanding the role each stereotype annotation plays within a Spring Boot application. Before now, I had been using many of these annotations without fully understanding why they existed or what happened behind the scenes. Learning how Spring scans classes, creates beans, and injects dependencies gave me a much clearer picture of how the framework works internally.&lt;/p&gt;

&lt;p&gt;Outside of studying, I updated my CV to better reflect the projects and experience I've gained over the past few weeks and followed up on one of my job applications. As much as I'm focused on learning, I'm also actively preparing myself for backend engineering opportunities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;There weren't any major technical challenges today, but understanding how all the different annotations work together required careful reading and experimentation. It was easy to memorize what each annotation does, but my goal was to understand &lt;strong&gt;when&lt;/strong&gt; and &lt;strong&gt;why&lt;/strong&gt; each one should be used in a real Spring Boot application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 43: Practicing Spring Security
&lt;/h2&gt;

&lt;p&gt;After spending the previous few days learning the theory behind Spring Security and Dependency Injection, I decided it was time to put those concepts into practice.&lt;/p&gt;

&lt;p&gt;Rather than just reading, I followed a Spring Security tutorial and built the application alongside the instructor. As I worked through it, I adapted it to the newer Spring Security approach, replacing some of the older implementation with the modern configuration style.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Worked On
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built a Spring Security application by following a hands-on tutorial&lt;/li&gt;
&lt;li&gt;Learned how &lt;code&gt;UserDetailsService&lt;/code&gt; is used to load users during authentication&lt;/li&gt;
&lt;li&gt;Explored how Spring Security performs in-memory authentication&lt;/li&gt;
&lt;li&gt;Practiced using &lt;code&gt;@Autowired&lt;/code&gt; with:

&lt;ul&gt;
&lt;li&gt;Field Injection&lt;/li&gt;
&lt;li&gt;Setter Injection&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Understood how Spring automatically injects dependencies into managed beans&lt;/li&gt;
&lt;li&gt;Updated parts of the tutorial code to use the newer Spring Security configuration instead of the older approach&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Writing the code myself made a huge difference. Reading about Spring Security helped me understand the concepts, but actually implementing them showed me how all the pieces fit together during the authentication process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;The biggest challenge was understanding the differences between the instructor's implementation and the newer version of Spring Security. Some parts of the tutorial had changed because newer versions of Spring recommend different approaches. Instead of following the old code exactly, I spent time understanding the changes and updating the implementation to match the current best practices.&lt;/p&gt;

&lt;p&gt;I wasn't able to complete the database integration for custom authentication yet, but I now have a much clearer understanding of how Spring Security authenticates users before connecting it to a real database. That will be my next step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for Week 8
&lt;/h2&gt;

&lt;p&gt;With my exams almost behind me, it's time to shift my focus back to building, improving my technical skills, and preparing for backend engineering opportunities.&lt;/p&gt;

&lt;p&gt;Here are my goals for Week 8:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practice &lt;strong&gt;LeetCode&lt;/strong&gt; consistently to strengthen my problem-solving skills&lt;/li&gt;
&lt;li&gt;Take more &lt;strong&gt;mock technical interviews&lt;/strong&gt; to improve my interview confidence&lt;/li&gt;
&lt;li&gt;Continue applying for &lt;strong&gt;backend engineering roles&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Continue learning Spring Security and complete database-backed authentication&lt;/li&gt;
&lt;li&gt;Build practical examples using the Spring concepts I've been studying&lt;/li&gt;
&lt;li&gt;Review core &lt;strong&gt;Data Structures and Algorithms&lt;/strong&gt; for coding interviews&lt;/li&gt;
&lt;li&gt;Resume learning Python alongside my Java backend journey&lt;/li&gt;
&lt;li&gt;Continue improving my existing projects whenever I have the time&lt;/li&gt;
&lt;li&gt;Stay consistent with &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; and keep documenting what I learn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Week 7 reminded me that progress isn't always measured by the number of features you build or projects you deploy. Sometimes, the biggest growth comes from slowing down, revisiting the fundamentals, and understanding how the technologies you use actually work.&lt;/p&gt;

&lt;p&gt;From Spring AOP and Dependency Injection to Spring Security, logging, and software design principles, this week helped me build a stronger foundation that I'll carry into future projects.&lt;/p&gt;

&lt;p&gt;As my exams come to an end, I'm excited to get back to building while also preparing myself for technical interviews. My goal is not just to become a better backend engineer, but also to become more confident in solving problems, writing clean code, and communicating my thought process during interviews.&lt;/p&gt;

&lt;p&gt;If you're also learning, building, or growing in tech, I'd love to connect and follow your journey too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's keep building. 💙&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>java</category>
      <category>springboot</category>
      <category>backend</category>
    </item>
    <item>
      <title># Week 5 &amp; 6 of #100DaysOfCode: Shipping Projects, Building VeriFund, and Lessons from My First Hackathon</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 26 Jul 2026 19:50:00 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/-week-5-6-of-100daysofcode-shipping-projects-building-verifund-and-lessons-from-my-first-2ce5</link>
      <guid>https://dev.to/onatade_abdulmajeed/-week-5-6-of-100daysofcode-shipping-projects-building-verifund-and-lessons-from-my-first-2ce5</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Weeks 5 and 6 have been the busiest and most rewarding weeks since I started my #100DaysOfCode challenge.&lt;/p&gt;

&lt;p&gt;I couldn't publish my Week 5 recap because I was completely focused on the APIConf × Monnify Hackathon. My teammate and I were trying to get everything done before the submission deadline, spending most of our time building features, fixing bugs, integrating APIs, deploying the application, and preparing our demo. By the time we submitted, there wasn't enough time to sit down and write an article.&lt;/p&gt;

&lt;p&gt;Now that the hackathon is over, I want to look back at everything I accomplished over the past two weeks.&lt;/p&gt;

&lt;p&gt;During Weeks 5 and 6, I started and completed my first hackathon project, &lt;strong&gt;VeriFund&lt;/strong&gt;, deployed my &lt;strong&gt;JobPost&lt;/strong&gt; application, continued learning Spring by exploring &lt;strong&gt;Aspect-Oriented Programming (AOP)&lt;/strong&gt; , and attended &lt;strong&gt;APIConf 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's how the last two weeks went.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 23: Improving My Job Posting Application
&lt;/h2&gt;

&lt;p&gt;Before the hackathon began, I continued improving my Job Posting Application.&lt;/p&gt;

&lt;p&gt;I focused on refining the frontend by improving the overall user interface and spacing, adding a loading spinner for a smoother user experience, and implementing an empty search state to handle cases where no jobs matched a user's search. I also made several smaller UI improvements to make the application feel more polished.&lt;/p&gt;

&lt;p&gt;I also deployed the React frontend to Netlify. Although the backend hadn't been deployed yet, it was a big step toward turning the project into a fully functional full-stack application.&lt;/p&gt;

&lt;p&gt;Seeing the frontend live motivated me to keep working toward connecting it with the backend, which I completed later during these two weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 25: Completing My Job Posting Application
&lt;/h2&gt;

&lt;p&gt;I continued working on my Job Posting Application with the goal of getting it ready for deployment.&lt;/p&gt;

&lt;p&gt;One of the biggest improvements was completing the &lt;strong&gt;Job Details&lt;/strong&gt; page, allowing users to view complete information about each job posting. I also added an &lt;strong&gt;Apply Now&lt;/strong&gt; feature that supports both external application links and email addresses, making the application more practical for real-world use.&lt;/p&gt;

&lt;p&gt;On the backend, I extended my Spring Boot API by adding an &lt;code&gt;applicationLink&lt;/code&gt; field to the &lt;code&gt;JobPost&lt;/code&gt; model and updated the React frontend to consume the new data correctly. I also refactored parts of the frontend to pass complete job objects between components instead of individual props, making the codebase cleaner and easier to maintain.&lt;/p&gt;

&lt;p&gt;A good part of the day was spent debugging integration issues between the frontend and backend. After fixing request validation problems and testing the complete workflow, I successfully verified that users could create job posts, search for jobs, and view job details seamlessly.&lt;/p&gt;

&lt;p&gt;By the end of the day, the application was functioning as a complete full-stack project and was finally ready for deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo:&lt;/strong&gt; &lt;a href="https://jobposting-app.netlify.app/" rel="noopener noreferrer"&gt;https://jobposting-app.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source Code Frontend&lt;/strong&gt;: &lt;a href="https://github.com/Spider1201/job-post" rel="noopener noreferrer"&gt;https://github.com/Spider1201/job-post&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzcyqhm909wiekitkyz05.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzcyqhm909wiekitkyz05.png" alt=" " width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 26: Preparing for My First Hackathon
&lt;/h2&gt;

&lt;p&gt;After wrapping up my Job Posting Application, I shifted my focus to the &lt;strong&gt;APIConf Lagos 2026 × Monnify Developer Challenge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Since it was my first hackathon, I wanted to understand what I was getting myself into before writing any code.&lt;/p&gt;

&lt;p&gt;I spent the day reading through the information on the official &lt;strong&gt;APIConf&lt;/strong&gt; website, going through the challenge requirements and judging criteria, joining the hackathon community, and introducing myself to other participants. I also spent some time researching ideas that could solve real problems using Monnify's APIs.&lt;/p&gt;

&lt;p&gt;One thing I also did was read a few articles on how to prepare for hackathons. A piece of advice that stayed with me was to build something simple that you can actually finish instead of trying to build everything at once.&lt;/p&gt;

&lt;p&gt;I didn't have a final project idea by the end of the day, but I felt much more confident about how I wanted to approach the challenge.&lt;/p&gt;

&lt;p&gt;Looking back now, this was the day the journey that eventually became &lt;strong&gt;VeriFund&lt;/strong&gt; started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Official Event Website:&lt;/strong&gt; &lt;a href="https://apiconf.net/" rel="noopener noreferrer"&gt;https://apiconf.net/&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgysqqi9rexydf6m3qkt9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgysqqi9rexydf6m3qkt9.png" alt=" " width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 27: Planning VeriFund
&lt;/h2&gt;

&lt;p&gt;With the research out of the way, it was finally time to start planning our hackathon project.&lt;/p&gt;

&lt;p&gt;My teammate and I officially began working on what would later become &lt;strong&gt;VeriFund&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We spent time discussing the problem we wanted to solve and how we wanted the application to work. We talked through different ideas before settling on a crowdfunding platform that would make fundraising more transparent through campaign verification.&lt;/p&gt;

&lt;p&gt;Most of the day was spent planning the backend. We identified the core features we wanted to build, including user authentication, campaign creation and verification, donations, payment processing with Monnify, and email notifications. We also discussed how the Spring Boot backend would communicate with the Next.js frontend and sketched out the API endpoints we would need.&lt;/p&gt;

&lt;p&gt;We spent the entire day planning. No code, just conversations about the product, the features we wanted, and how we would build them.&lt;/p&gt;

&lt;p&gt;By the end of the day, we had a solid roadmap and were ready to start building VeriFund.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 28: Integrating Monnify into VeriFund
&lt;/h2&gt;

&lt;p&gt;With our project plan in place, I decided to start with the Monnify integration before building the rest of the donation workflow.&lt;/p&gt;

&lt;p&gt;I intentionally chose to tackle authentication first because I knew payment gateway integrations usually require a fair amount of setup and debugging. My thinking was simple: if I could get authentication and payment initialization working early, I'd have enough time to resolve any issues before connecting the rest of the application.&lt;/p&gt;

&lt;p&gt;That decision turned out to be the right one.&lt;/p&gt;

&lt;p&gt;One of the biggest milestones was successfully authenticating with Monnify, implementing payment initialization, and generating my very first checkout URL from the backend. Seeing a real payment gateway respond to my API instead of just returning dummy data was a great feeling.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Worked On
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Set up Monnify Sandbox authentication&lt;/li&gt;
&lt;li&gt;Implemented payment initialization in the Spring Boot backend&lt;/li&gt;
&lt;li&gt;Successfully generated my first Monnify checkout URL&lt;/li&gt;
&lt;li&gt;Configured Spring Security for the payment flow&lt;/li&gt;
&lt;li&gt;Tested the payment initialization endpoint using Swagger&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;The integration definitely wasn't straightforward.&lt;/p&gt;

&lt;p&gt;The first issue I ran into was Maven and JDK configuration problems, which prevented the project from building correctly. Once that was fixed, Spring Security kept returning &lt;code&gt;403 Forbidden&lt;/code&gt; responses while I was testing my endpoints.&lt;/p&gt;

&lt;p&gt;After resolving that, I discovered that my Monnify requests were still failing because my request payload and configuration weren't right. I spent a lot of time comparing my implementation with the Monnify documentation, checking my environment variables, authentication headers, and API requests until I finally got a successful response.&lt;/p&gt;

&lt;p&gt;Getting that first checkout URL felt like a huge win because it meant the backend was finally communicating with Monnify successfully.&lt;/p&gt;

&lt;p&gt;By the end of the day, payment initialization was working, and I had a much better understanding of Spring Security, REST API integration, and how payment gateways work behind the scenes.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8j6vvjepolcdgyvmxz7o.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8j6vvjepolcdgyvmxz7o.png" alt=" " width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 29: Building Authentication for VeriFund
&lt;/h2&gt;

&lt;p&gt;After getting Monnify integration working, my next focus was authentication.&lt;/p&gt;

&lt;p&gt;Since VeriFund would have different types of users, I wanted to build authentication before moving on to campaign management and authorization.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Worked On
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implemented user registration&lt;/li&gt;
&lt;li&gt;Added BCrypt password hashing for secure password storage&lt;/li&gt;
&lt;li&gt;Built JWT authentication from scratch&lt;/li&gt;
&lt;li&gt;Implemented user login with JWT token generation&lt;/li&gt;
&lt;li&gt;Tested registration and login endpoints using Swagger&lt;/li&gt;
&lt;li&gt;Continued improving the backend architecture of VeriFund&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;Building authentication involved more than just generating a JWT.&lt;/p&gt;

&lt;p&gt;I spent a good amount of time configuring Spring Security correctly, making sure requests were authenticated as expected, and verifying that JWTs were being generated and returned after a successful login.&lt;/p&gt;

&lt;p&gt;There were a few configuration issues along the way, and I had to repeatedly test my endpoints in Swagger until registration, password hashing, and login all worked together correctly.&lt;/p&gt;

&lt;p&gt;By the end of the day, users could register successfully, passwords were securely stored using BCrypt, and a valid JWT was returned after authentication—a major milestone for VeriFund.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgy19z8q6glxghm2ok6yd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgy19z8q6glxghm2ok6yd.png" alt=" " width="799" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 30: Completing the Donation Module
&lt;/h2&gt;

&lt;p&gt;The Donation Module was one of the biggest features in VeriFund, and today I finally completed it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Worked On
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implemented the complete donation workflow&lt;/li&gt;
&lt;li&gt;Restricted donations to approved campaigns only&lt;/li&gt;
&lt;li&gt;Automatically updated each campaign's amount raised after a successful donation&lt;/li&gt;
&lt;li&gt;Generated a unique payment reference for every donation&lt;/li&gt;
&lt;li&gt;Added endpoints to retrieve donations for a campaign&lt;/li&gt;
&lt;li&gt;Added an admin endpoint to retrieve all donations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;Most of the donation functionality worked as expected, but I ran into an issue with JWT authentication while testing protected endpoints in Swagger.&lt;/p&gt;

&lt;p&gt;Even with a valid token, some endpoints weren't being authorized correctly. After tracing through the security configuration and testing different requests, I was able to identify the problem and update the JWT authentication flow so the protected endpoints worked as expected in Swagger.&lt;/p&gt;

&lt;p&gt;With that resolved, I was finally able to test the complete donation workflow from end to end.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv5zltxxxly1rjo77xhyb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv5zltxxxly1rjo77xhyb.png" alt=" " width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 31: Deploying VeriFund
&lt;/h2&gt;

&lt;p&gt;After Implementing the core features in place, I decided to put VeriFund online.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Worked On
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deployed the Spring Boot backend to Render&lt;/li&gt;
&lt;li&gt;Connected the application to MongoDB Atlas&lt;/li&gt;
&lt;li&gt;Configured production environment variables&lt;/li&gt;
&lt;li&gt;Tested the live API using Swagger&lt;/li&gt;
&lt;li&gt;Shared the deployed backend with my teammate so frontend integration could begin&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;Deploying the application wasn't as simple as pushing the code to Render.&lt;/p&gt;

&lt;p&gt;I ran into a few issues along the way, including build failures, missing environment variables, and problems connecting to MongoDB Atlas from the deployed application. At one point, the application deployed successfully but still couldn't communicate with the database because of configuration issues.&lt;/p&gt;

&lt;p&gt;I spent a good amount of time checking deployment logs, verifying my environment variables, and updating the MongoDB network settings until everything finally worked.&lt;/p&gt;

&lt;p&gt;Seeing the API come online and successfully respond to requests from the deployed environment made all the debugging worth it. It was my first time deploying a backend for a hackathon project, and it gave me a much better understanding of what it takes to move an application from local development to production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live API:&lt;/strong&gt; &lt;a href="https://verifund-mmwl.onrender.com/swagger-ui/index.html" rel="noopener noreferrer"&gt;https://verifund-mmwl.onrender.com/swagger-ui/index.html&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9fl4ll60jaxzibq23vel.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9fl4ll60jaxzibq23vel.png" alt=" " width="799" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 32: Frontend Integration and Deployment Fixes
&lt;/h2&gt;

&lt;p&gt;With the backend deployed, the next step was making sure everything worked together.&lt;/p&gt;

&lt;p&gt;My teammate and I spent the day connecting the frontend to the live backend and fixing the issues that came up during integration. Most of the work wasn't about building new features, it was about making the existing ones work reliably in a deployed environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Worked On
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Updated and redeployed the Spring Boot backend after fixing integration issues&lt;/li&gt;
&lt;li&gt;Configured CORS to allow communication between the frontend and backend&lt;/li&gt;
&lt;li&gt;Worked with my teammate to connect the frontend to the live APIs&lt;/li&gt;
&lt;li&gt;Fixed the Monnify payment verification flow&lt;/li&gt;
&lt;li&gt;Resolved authentication and API access issues&lt;/li&gt;
&lt;li&gt;Completed the backend README documentation&lt;/li&gt;
&lt;li&gt;Tested the application with my teammate to make sure the core features worked as expected&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;Once the frontend started communicating with the deployed backend, a few issues that didn't appear during local development started showing up.&lt;/p&gt;

&lt;p&gt;I had to update my backend configuration, redeploy the application a couple of times, and troubleshoot CORS, authentication, and payment verification until everything worked correctly.&lt;/p&gt;

&lt;p&gt;By the end of the day, the frontend and backend were communicating successfully, and VeriFund felt much closer to being ready for the hackathon submission.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqzgjxf8gkxavpidl1vpb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqzgjxf8gkxavpidl1vpb.png" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 33: Submitting VeriFund
&lt;/h2&gt;

&lt;p&gt;Submission day had finally arrived.&lt;/p&gt;

&lt;p&gt;Before submitting the project, I spent some time making sure everything was ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Worked On
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Finalized the backend API documentation&lt;/li&gt;
&lt;li&gt;Recorded the project demo&lt;/li&gt;
&lt;li&gt;Reviewed the deployed application one final time&lt;/li&gt;
&lt;li&gt;Completed the hackathon submission form&lt;/li&gt;
&lt;li&gt;Submitted &lt;strong&gt;VeriFund&lt;/strong&gt; for the APIConf × Monnify Hackathon&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;The biggest challenge on submission day was recording the demo video.&lt;/p&gt;

&lt;p&gt;Our original plan was to demonstrate the application through the frontend, but we ran into frontend issues close to the submission deadline. Instead of spending more time trying to fix everything, I decided to record the demo using the backend APIs in Swagger so we could still showcase the core functionality of VeriFund.&lt;/p&gt;

&lt;p&gt;Preparing the demo, making last-minute checks, and recording everything took longer than we expected, and because of that, we ended up submitting our project later than we had planned.&lt;/p&gt;

&lt;p&gt;Even though things didn't go exactly as we hoped, we still managed to submit a working project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://verifund-f.vercel.app/" rel="noopener noreferrer"&gt;https://verifund-f.vercel.app/&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgsr0vxfojohrd8vok812.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgsr0vxfojohrd8vok812.png" alt=" " width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 34: Shipping My JobPost Application
&lt;/h2&gt;

&lt;p&gt;After submitting &lt;strong&gt;VeriFund&lt;/strong&gt; for the hackathon, I decided to return to one of my personal projects and finally ship it.&lt;/p&gt;

&lt;p&gt;I had been working on my &lt;strong&gt;JobPost&lt;/strong&gt; application for a while, and this felt like the perfect time to deploy it and make it accessible online.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Worked On
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deployed the Spring Boot backend to Render&lt;/li&gt;
&lt;li&gt;Connected the backend to MongoDB Atlas&lt;/li&gt;
&lt;li&gt;Deployed the React frontend&lt;/li&gt;
&lt;li&gt;Configured CORS for seamless frontend-backend communication&lt;/li&gt;
&lt;li&gt;Added Docker support&lt;/li&gt;
&lt;li&gt;Wrote professional README files for both the frontend and backend repositories&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;Deploying the application wasn't completely straightforward.&lt;/p&gt;

&lt;p&gt;I had to configure production environment variables, update my MongoDB Atlas settings, and fix CORS issues before the frontend could communicate with the deployed backend successfully. I also Dockerized the backend to make it easier to run and deploy consistently.&lt;/p&gt;

&lt;p&gt;By the end of the day, the application was fully deployed and available online. It felt good to finally ship another project after spending the previous week focused on the hackathon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://jobposting-app.netlify.app/" rel="noopener noreferrer"&gt;https://jobposting-app.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend API:&lt;/strong&gt; &lt;a href="https://job-post-api.onrender.com/swagger-ui/index.html" rel="noopener noreferrer"&gt;https://job-post-api.onrender.com/swagger-ui/index.html&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsnhmlr2kji4ht88zrozi.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsnhmlr2kji4ht88zrozi.png" alt=" " width="799" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 35: Learning Spring AOP
&lt;/h2&gt;

&lt;p&gt;After spending the past few days building and deploying projects, I decided to slow down and focus on learning something.&lt;/p&gt;

&lt;p&gt;Today's focus was &lt;strong&gt;Spring AOP (Aspect-Oriented Programming)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I wanted to understand how Spring keeps business logic clean by separating concerns like logging, security, validation, and exception handling instead of scattering the same code throughout an application.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What Aspect-Oriented Programming (AOP) is&lt;/li&gt;
&lt;li&gt;Cross-cutting concerns&lt;/li&gt;
&lt;li&gt;Aspects&lt;/li&gt;
&lt;li&gt;Advice and the different annotations:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@Before&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@After&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@AfterReturning&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@AfterThrowing&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Around&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  My Thoughts
&lt;/h3&gt;

&lt;p&gt;One thing I enjoyed while learning AOP was realizing that many of the features I've already used in Spring Boot are powered by concepts like this behind the scenes.&lt;/p&gt;

&lt;p&gt;The more I understand how Spring works internally, the more comfortable I become using it. Instead of just knowing &lt;em&gt;what&lt;/em&gt; Spring does, I'm starting to understand &lt;em&gt;how&lt;/em&gt; it does it, and that makes learning the framework much more interesting.&lt;/p&gt;

&lt;p&gt;The next step is to stop reading and start writing my own aspects so I can see these concepts in action.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flxt8a97bbt0pz8f0ozfo.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flxt8a97bbt0pz8f0ozfo.png" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 36: Attending APIConf 2026
&lt;/h2&gt;

&lt;p&gt;After weeks of building, debugging, deploying, and submitting &lt;strong&gt;VeriFund&lt;/strong&gt;, it was finally time for &lt;strong&gt;APIConf 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This was my first time attending a tech conference, and I genuinely enjoyed the experience. The event was well organized, and it was exciting to be surrounded by developers and engineers.&lt;/p&gt;

&lt;p&gt;One of my favorite sessions was &lt;strong&gt;"Software Is Going Headless: What the API Becomes When Agents Run Everything"&lt;/strong&gt; by &lt;strong&gt;Joel Olawanle&lt;/strong&gt;. One statement that really stayed with me was the idea that &lt;code&gt;APIs are no longer just a feature they're becoming the product itself&lt;/code&gt;. That completely changed the way I think about backend development and API design.&lt;/p&gt;

&lt;p&gt;I also attended sessions on AI, agent-ready APIs, and Kubernetes, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Software Is Going Headless: What the API Becomes When Agents Run Everything&lt;/strong&gt; — Joel Olawanle&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Can Write Code. But It Doesn't Know Your System&lt;/strong&gt; — Chigozie Madubuko&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Are Your APIs Ready for Agents?&lt;/strong&gt; — Auwal MS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What API Designers Can Learn from the Kubernetes API&lt;/strong&gt; — Somtochi Onyekwere&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Listening to these talks made me realize that while AI can generate code, understanding systems, APIs, architecture, and how everything works together is what makes someone a good software engineer.&lt;/p&gt;

&lt;p&gt;Last night, the hackathon results were finally released.&lt;/p&gt;

&lt;p&gt;Out of &lt;strong&gt;105 project submissions&lt;/strong&gt;, only &lt;strong&gt;72 projects were ranked&lt;/strong&gt;, and &lt;strong&gt;VeriFund finished 22nd&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Honestly, I was really happy with that result.&lt;/p&gt;

&lt;p&gt;Looking back, I know our project wasn't complete. We still had features we wanted to implement, like the &lt;strong&gt;disbursement workflow&lt;/strong&gt;, and we also ran into frontend issues before submission, which meant I had to record the demo using &lt;strong&gt;Swagger&lt;/strong&gt; instead of the frontend we originally planned to showcase. On top of that, I was balancing school while preparing for my first hackathon, so time wasn't exactly on our side.&lt;/p&gt;

&lt;p&gt;Even with those challenges, finishing &lt;strong&gt;22nd&lt;/strong&gt; gave me a lot of confidence. It showed me that our idea had potential and that the work we put into building the backend was recognized.&lt;/p&gt;

&lt;p&gt;More importantly, it taught me an important lesson: it's better to have a few features working perfectly than many features that are only partially complete. That's something I'll definitely carry into my next hackathon.&lt;/p&gt;

&lt;p&gt;APIConf also introduced me to technologies and ideas I want to explore further. One of my goals after the conference is to spend more time learning &lt;strong&gt;Python&lt;/strong&gt; alongside my backend journey.&lt;/p&gt;

&lt;p&gt;One thing I wish I had done better was networking. I was only able to interact with one person during the event. Next time, I want to meet more developers, have more conversations, and build stronger connections within the tech community.&lt;/p&gt;

&lt;p&gt;Looking back, attending APIConf made me feel like a real developer.&lt;/p&gt;

&lt;p&gt;Sitting in the same room with experienced engineers, One of the special guests at the event had &lt;strong&gt;24 years of experience&lt;/strong&gt;, it made me realize how much there is still to learn. It motivated me, and made me feel like I'm finally on the path I've always wanted to be on.&lt;/p&gt;

&lt;p&gt;I'm already looking forward to attending APIConf again, participating in another hackathon, meeting more people, and coming back with an even better project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Images:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1gtss688h6vsvcmiytgk.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1gtss688h6vsvcmiytgk.jpeg" alt=" " width="731" height="1280"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rukdwhrfrshtt7can29.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rukdwhrfrshtt7can29.jpeg" alt=" " width="720" height="1280"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftwjeztz7wsewuxcfu719.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftwjeztz7wsewuxcfu719.png" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Goals for Week 7
&lt;/h1&gt;

&lt;p&gt;With the hackathon behind me, it's time to balance learning with preparing for my upcoming exams.&lt;/p&gt;

&lt;p&gt;Here are my goals for Week 7:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start preparing for my exams while maintaining consistency with #100DaysOfCode&lt;/li&gt;
&lt;li&gt;Continue learning Spring AOP by building practical examples&lt;/li&gt;
&lt;li&gt;Explore more advanced Spring Boot concepts&lt;/li&gt;
&lt;li&gt;Begin learning Python alongside my Java backend journey&lt;/li&gt;
&lt;li&gt;Improve my existing projects whenever I have the time&lt;/li&gt;
&lt;li&gt;Keep documenting my progress and sharing what I learn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The past two weeks were some of the busiest of my journey so far. I built VeriFund for my first hackathon, deployed multiple applications, attended my first tech conference, and learned a lot about building, deploying, and presenting real-world software. Those experiences pushed me outside my comfort zone and gave me a clearer picture of the kind of engineer I want to become.&lt;/p&gt;

&lt;p&gt;For now, my priority is preparing for my exams while continuing to learn consistently. Progress may be a little slower, but I don't intend to stop showing up every day.&lt;/p&gt;

&lt;p&gt;If you're also learning, building, or growing in tech, I'd love to connect and follow your journey too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's keep building. 💙&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>hackathon</category>
      <category>api</category>
      <category>backend</category>
    </item>
    <item>
      <title>My Fourth Week of #100DaysOfCode: Turning a Backend Project into a Full-Stack Application</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 12 Jul 2026 19:28:49 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/my-fourth-week-of-100daysofcode-turning-a-backend-project-into-a-full-stack-application-2mbd</link>
      <guid>https://dev.to/onatade_abdulmajeed/my-fourth-week-of-100daysofcode-turning-a-backend-project-into-a-full-stack-application-2mbd</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I'm currently in the fourth week of my &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; challenge, and this week has been one of the most exciting so far.&lt;/p&gt;

&lt;p&gt;After spending the previous weeks strengthening my backend skills with Spring Boot and MongoDB, this week was all about bringing everything together by building the frontend of my Job Posting Application with React.&lt;/p&gt;

&lt;p&gt;I focused on building the user interface one component at a time instead of rushing through it. From designing the navigation bar and hero section to building the job cards, job list, and search functionality, every step helped me understand React better and how it communicates with a Spring Boot backend.&lt;/p&gt;

&lt;p&gt;Of course, it wasn't without challenges. I spent time debugging integration issues, dealing with MongoDB Atlas connection problems, and figuring out how to connect the frontend to the backend properly. But after working through those issues, I was finally able to fetch and display real job data from MongoDB in my React application.&lt;/p&gt;

&lt;p&gt;Looking back, this week reminded me that building software isn't just about writing code. It's about connecting different pieces together, solving unexpected problems, and staying patient until everything finally works.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The only way to do great work is to love what you do. &lt;/p&gt;

&lt;p&gt;– Steve Jobs&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 17: A Day of Debugging, Not Building
&lt;/h2&gt;

&lt;p&gt;I had planned to continue working on my Job Posting API, but the day turned out very differently from what I expected.&lt;/p&gt;

&lt;p&gt;I spent most of the day debugging issues that had started the previous day. One of my school projects suddenly stopped working as well, so the entire day became a debugging session.&lt;/p&gt;

&lt;p&gt;Although I wasn't able to make visible progress on the application itself, Every problem solved improves my understanding of how the technologies actually work.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learnt and Explored
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Troubleshooting MongoDB Atlas SSL connection issues&lt;/li&gt;
&lt;li&gt;Debugging Spring Boot and MongoDB integration&lt;/li&gt;
&lt;li&gt;Understanding the difference between IDE warnings and actual runtime errors&lt;/li&gt;
&lt;li&gt;Comparing Spring Boot 3.x and 4.x while investigating dependency compatibility&lt;/li&gt;
&lt;li&gt;Restoring MongoDB Atlas Search functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;The biggest challenge wasn't writing code—it was identifying the real source of the problem.&lt;/p&gt;

&lt;p&gt;At first, IntelliJ's warning that &lt;code&gt;MongoTemplate&lt;/code&gt; couldn't be autowired made it seem like my configuration was incorrect. However, after testing the application and examining the stack traces, I realized that the warning was unrelated to the actual failure. The application itself was fine; the connection to MongoDB Atlas was the real issue.&lt;/p&gt;

&lt;p&gt;While troubleshooting, I also compared Spring Boot 3.x and 4.x to understand whether dependency compatibility was contributing to the issue. After several hours of testing different possibilities, checking configurations, and verifying my dependencies, I eventually restored the connection and got MongoDB Atlas Search working again.&lt;/p&gt;

&lt;p&gt;This experience reminded me that error messages and IDE warnings should always be investigated carefully instead of accepted at face value. Sometimes the first thing that looks wrong isn't the actual cause of the problem.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwejjlbq9ous17hm9ushl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwejjlbq9ous17hm9ushl.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although I didn't build any new features that day, I walked away with a much better understanding of Spring Boot, MongoDB Atlas, SSL connections, and the debugging process itself.&lt;/p&gt;

&lt;p&gt;By the end of the day, the application was running again, MongoDB Atlas Search was working, and I had gained valuable experience that I know will help me solve similar problems much faster in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 18: Started the Frontend of My Job Posting Application
&lt;/h2&gt;

&lt;p&gt;After spending the previous days building the backend of my Job Posting Application with Spring Boot and MongoDB, I finally started the frontend.&lt;/p&gt;

&lt;p&gt;I decided to build the frontend with React because I wanted to strengthen my frontend skills while learning how a React application communicates with a Spring Boot backend through REST APIs.&lt;/p&gt;

&lt;p&gt;Instead of jumping straight into building the user interface, I spent the day setting up the project properly and understanding how the frontend would consume data from the backend. I wanted to build the application on a solid foundation before adding features.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learnt and Explored
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Creating a React project with Vite&lt;/li&gt;
&lt;li&gt;Organizing a React project structure for scalability&lt;/li&gt;
&lt;li&gt;Understanding how React consumes REST APIs&lt;/li&gt;
&lt;li&gt;Learning how the frontend communicates with a Spring Boot backend&lt;/li&gt;
&lt;li&gt;Preparing the application for backend integration&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftgmffl8zv6rnf1gubkp1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftgmffl8zv6rnf1gubkp1.png" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 19: School Presentation Day
&lt;/h2&gt;

&lt;p&gt;On Day 19, I had the opportunity to present my team's &lt;strong&gt;Air Reservation Application&lt;/strong&gt; at school.&lt;/p&gt;

&lt;p&gt;The application was built using &lt;strong&gt;React Native (Expo), Spring Boot, PostgreSQL, and Supabase&lt;/strong&gt;, and was designed to make searching, booking, and managing flight reservations easier.&lt;/p&gt;

&lt;p&gt;Although the presentation itself went well, I was able to explain what the application does, how it solves a problem, and how users interact with it.&lt;/p&gt;

&lt;p&gt;Watching people ask questions and engage with the project also gave me a better appreciation for communicating technical ideas to different audiences.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learnt and Explored
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Presenting a software project to an audience&lt;/li&gt;
&lt;li&gt;Explaining the purpose and value of an application&lt;/li&gt;
&lt;li&gt;Communicating technical concepts in a simple way&lt;/li&gt;
&lt;li&gt;Observing how people interact with a software product during a presentation&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx7l1jjlqq0slmxwwir1b.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx7l1jjlqq0slmxwwir1b.jpeg" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the presentation, it was time to shift my focus back to my Job Posting Application and continue building.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 20: Building the Foundation of My React Frontend
&lt;/h2&gt;

&lt;p&gt;After learning how React communicates with a Spring Boot backend, it was finally time to start building the frontend of my Job Posting Application.&lt;/p&gt;

&lt;p&gt;Rather than rushing into creating every page, I decided to take my time and build the application one component at a time. I wanted the project to have a clean structure that would be easy to maintain as more features were added.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Built
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Created the React project using Vite&lt;/li&gt;
&lt;li&gt;Organized the project structure&lt;/li&gt;
&lt;li&gt;Built a responsive navigation bar using React Icons&lt;/li&gt;
&lt;li&gt;Designed and implemented the hero section&lt;/li&gt;
&lt;li&gt;Improved the overall layout and styling using plain CSS&lt;/li&gt;
&lt;li&gt;Planned the component structure to make the application easier to scale&lt;/li&gt;
&lt;/ul&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fskcr6jf875m75jkdjaa5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fskcr6jf875m75jkdjaa5.png" alt=" " width="799" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also spent some time improving my interview skills by reading an article by Wes Kao about telling better stories during interviews. One lesson that stood out to me was to keep the &lt;strong&gt;Situation&lt;/strong&gt; in the STAR method short so you have more time to explain your actions, results, and the impact you made.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Article:&lt;/strong&gt; &lt;a href="https://newsletter.weskao.com/p/in-job-interviews-keep-your-backstory" rel="noopener noreferrer"&gt;https://newsletter.weskao.com/p/in-job-interviews-keep-your-backstory&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By the end of the day, I had the foundation of the frontend in place and a clear plan for the remaining components before connecting everything to my Spring Boot backend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 21: Building the Core of the Frontend
&lt;/h2&gt;

&lt;p&gt;I continued working on the frontend of my Job Posting Application by focusing on the components that users will interact with the most.&lt;/p&gt;

&lt;p&gt;Instead of trying to build every section at once, I concentrated on creating reusable components that will make the application easier to maintain and extend as development continues.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Built
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Designed the Job Card component&lt;/li&gt;
&lt;li&gt;Built the Job List component&lt;/li&gt;
&lt;li&gt;Continued improving the overall frontend structure&lt;/li&gt;
&lt;li&gt;Focused on creating reusable UI components for future features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although I couldn't spend as much time coding as I had planned because of other commitments, I still made steady progress.&lt;/p&gt;

&lt;p&gt;One thing I've come to appreciate while building this project is that frontend development isn't just about making an application look good. It's also about organizing components in a way that keeps the codebase clean and makes adding new features much easier.&lt;/p&gt;

&lt;p&gt;By the end of the day, the foundation of the application's user interface was taking shape, and I was ready to begin connecting the React frontend to my Spring Boot backend.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4awgc3k1nrx5mae958jl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4awgc3k1nrx5mae958jl.png" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 22: Connected the Frontend to the Backend
&lt;/h2&gt;

&lt;p&gt;After spending the previous days building the user interface, it was finally time to connect everything together.&lt;/p&gt;

&lt;p&gt;I replace dummy data with real data from my Spring Boot backend and MongoDB database.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Built
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Connected the React frontend to my Spring Boot backend&lt;/li&gt;
&lt;li&gt;Fetched and displayed real job data from MongoDB&lt;/li&gt;
&lt;li&gt;Connected the search functionality to the backend&lt;/li&gt;
&lt;li&gt;Fixed integration issues that came up during development&lt;/li&gt;
&lt;li&gt;Made improvements to the user interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seeing the application display real data instead of hardcoded information completely changed how the project felt. It was no longer just a collection of frontend components—it had become a working full-stack application.&lt;/p&gt;

&lt;p&gt;Like every integration, there were a few issues to work through before everything functioned correctly, but solving them gave me a much better understanding of how React, Spring Boot, and MongoDB communicate with each other.&lt;/p&gt;

&lt;p&gt;By the end of the day, I had a working frontend connected to a real backend. The remaining work was to polish the application, implement the job application feature, and deploy it so other people could use it.&lt;/p&gt;

&lt;p&gt;Based on what you've completed in Week 4, your Week 5 goals should naturally build on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for Week 5
&lt;/h2&gt;

&lt;p&gt;As I head into &lt;strong&gt;Week 5&lt;/strong&gt; of this journey, these are the goals I've set for myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete the remaining features of my Job Posting Application&lt;/li&gt;
&lt;li&gt;Implement the job application functionality&lt;/li&gt;
&lt;li&gt;Polish the user interface and improve the overall user experience&lt;/li&gt;
&lt;li&gt;Deploy the frontend and backend so the application is live&lt;/li&gt;
&lt;li&gt;Learn more about deploying Spring Boot and React applications&lt;/li&gt;
&lt;li&gt;Continue strengthening my skills&lt;/li&gt;
&lt;li&gt;Keep documenting my journey and sharing what I learn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Week 4 showed me what it takes to bring a full-stack application together. From building the frontend with React to connecting it to my Spring Boot backend and MongoDB database, every step helped me understand how different parts of an application work together.&lt;/p&gt;

&lt;p&gt;There's still plenty to improve, but seeing the project evolve from an idea into a working application has been incredibly motivating.&lt;/p&gt;

&lt;p&gt;I know there's still a long way to go, but I'll keep building, learning, and improving one day at a time.&lt;/p&gt;

&lt;p&gt;If you're also learning, building, or growing in tech, I'd love to connect and follow your journey too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's keep building. 💙&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>spring</category>
      <category>react</category>
      <category>mongodb</category>
    </item>
    <item>
      <title>My Third Week of #100DaysOfCode: Learning, Building, and Trusting the Process</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 05 Jul 2026 22:19:35 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/my-third-week-of-100daysofcode-learning-building-and-trusting-the-process-l5a</link>
      <guid>https://dev.to/onatade_abdulmajeed/my-third-week-of-100daysofcode-learning-building-and-trusting-the-process-l5a</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I'm currently in the third week of my #100DaysOfCode challenge, and this week has been different from the previous ones.&lt;/p&gt;

&lt;p&gt;When I started this challenge, I had one goal: to become a better software engineer by showing up every day, learning consistently, and building real projects that would prepare me for opportunities.&lt;/p&gt;

&lt;p&gt;I spent part of the week applying for jobs but didn't receive any responses. For a moment, I found myself questioning whether all the time and effort I was investing in learning, building, and improving myself would eventually lead to the opportunities I was hoping for.&lt;/p&gt;

&lt;p&gt;But after thinking about it, I realized that giving up wouldn't change anything. So I kept building, kept learning, and I will keep on showing up.&lt;/p&gt;

&lt;p&gt;Looking back now, I'm beginning to understand that this journey is about more than becoming a better software engineer. It's teaching me patience, resilience, consistency, and the importance of trusting the process, even when the results aren't immediate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Make it work, make it right, make it fast." &lt;/p&gt;

&lt;p&gt;— Kent Beck&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 10: Turning My Product Management App into a REST API
&lt;/h2&gt;

&lt;p&gt;I continued working on my Product Management Console App. The project started as a plain Java application, and I decided to convert it into a Maven project to prepare it for development with the traditional Spring Framework.&lt;/p&gt;

&lt;p&gt;At this point, the application could already manage products and search for them by name, brand, and type. I then created a PostgreSQL database, designed the product table, and successfully stored my product data using JDBC.&lt;/p&gt;

&lt;p&gt;After connecting the application to the database, I exposed its functionality through REST endpoints, making it possible to interact with the application over HTTP instead of running everything directly from the console.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learnt and Explored
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Connecting a Java application to PostgreSQL using JDBC&lt;/li&gt;
&lt;li&gt;Creating and configuring a PostgreSQL database&lt;/li&gt;
&lt;li&gt;Designing a relational database table for products&lt;/li&gt;
&lt;li&gt;Storing application data in a database instead of memory&lt;/li&gt;
&lt;li&gt;Understanding how Java applications communicate with relational databases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;One of the biggest adjustments was moving from storing data in memory to persisting it in a real database. This required setting up the database correctly, creating the product table, and ensuring the application could establish a successful connection through JDBC.&lt;/p&gt;

&lt;p&gt;Although I had just returned to school and couldn't spend as much time coding as I had planned, I was able to complete the database setup and successfully store product records in PostgreSQL.&lt;/p&gt;

&lt;p&gt;Seeing the application save data in a real database instead of memory was a satisfying milestone because it made the project feel much closer to a real-world application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Successfully Connected to PostgreSQL&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F78vz889x9dxrk1ru574k.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F78vz889x9dxrk1ru574k.png" alt=" " width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Day 11: Rebuilding My Product Management App with Spring Boot
&lt;/h2&gt;

&lt;p&gt;On Day 11, I took another big step in my backend journey by rebuilding my Product Management App with Spring Boot.&lt;/p&gt;

&lt;p&gt;Instead of continuing with the console-based Java application, I created a new Spring Boot project and began migrating the application's functionality.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learnt and Explored
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Setting up a Spring Boot project&lt;/li&gt;
&lt;li&gt;Connecting Spring Boot to PostgreSQL&lt;/li&gt;
&lt;li&gt;Configuring Spring Data JPA&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;JpaRepository&lt;/code&gt; to retrieve data without writing SQL queries manually&lt;/li&gt;
&lt;li&gt;Understanding how Spring Data JPA simplifies database interactions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;While testing the application, I ran into a bug that prevented my data from being retrieved correctly.&lt;/p&gt;

&lt;p&gt;After checking the issue, I realized my database column was named &lt;code&gt;Id&lt;/code&gt; while my entity expected &lt;code&gt;id&lt;/code&gt;. Since PostgreSQL is case-sensitive when identifiers are quoted, this mismatch caused the problem.&lt;/p&gt;

&lt;p&gt;Renaming the column resolved the issue immediately, and I was able to fetch all product records successfully.&lt;/p&gt;

&lt;p&gt;This experience reminded me that sometimes the smallest details can cause the biggest headaches.&lt;/p&gt;

&lt;p&gt;By the end of the day, I had successfully transformed the project from a plain Java application using JDBC into a Spring Boot application powered by Spring Data JPA. More importantly, I started to understand not just how Spring Boot works, but why it makes backend development much more efficient.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2hhnb10txzi65kjkb8gv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2hhnb10txzi65kjkb8gv.png" alt=" " width="689" height="465"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Day 12: Transforming My Product Management App into a Spring Boot MVC Application
&lt;/h2&gt;

&lt;p&gt;On Day 12, I continued rebuilding my Product Management App by transforming it into a Spring Boot MVC application. This was an important milestone because the application was no longer limited to running from the console—it could now respond to HTTP requests through REST endpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learnt and Explored
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implementing the Spring Boot MVC architecture using the Controller, Service, and Repository layers&lt;/li&gt;
&lt;li&gt;Connecting the application to PostgreSQL through Spring Data JPA&lt;/li&gt;
&lt;li&gt;Building REST endpoints to retrieve and search products&lt;/li&gt;
&lt;li&gt;Understanding how Spring processes HTTP requests and responses&lt;/li&gt;
&lt;li&gt;Using Lombok to reduce boilerplate code and improve readability&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;While working on the project, I spent time understanding how Spring Boot processes HTTP requests and responses, how the different layers of the application communicate, and why a Java web application needs a servlet container like Tomcat.&lt;/p&gt;

&lt;p&gt;One idea that stayed with me throughout the day was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"If debugging is removing bugs, then coding is adding bugs."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It reminded me that every line of code is another opportunity for bugs to appear. One thing I've come to appreciate about Spring Boot is how much repetitive code it removes. Less boilerplate means cleaner code, easier maintenance, and fewer places for bugs to hide.&lt;/p&gt;

&lt;p&gt;Fortunately, the issues I encountered were relatively small, and I was able to debug and resolve them on my own.&lt;/p&gt;

&lt;p&gt;By the end of the day, my Product Management App had evolved from a console-based application into a Spring Boot application exposing RESTful APIs, backed by a cleaner MVC architecture.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgojsggfe24o9yyfvx6t6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgojsggfe24o9yyfvx6t6.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 13: Starting My Job Posting Application
&lt;/h2&gt;

&lt;p&gt;After completing the core features of my Product Management App by implementing the Update and Delete operations, I decided it was time to start my next project—a Job Posting Application.&lt;/p&gt;

&lt;p&gt;The application will use React for the frontend, Spring Boot for the backend, and MongoDB as the database. The idea is to build a platform where companies can post job opportunities and job seekers can browse and search for available positions.&lt;/p&gt;

&lt;p&gt;Since I'm more backend-focused, I started with the backend by setting up the Job Posting API. Before writing the application's core features, I focused on preparing the project structure and laying the foundation that I'll continue building on in the coming days.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learnt and Explored
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Completing the Update and Delete operations in my Product Management App&lt;/li&gt;
&lt;li&gt;Creating a new Spring Boot project for the Job Posting API&lt;/li&gt;
&lt;li&gt;Setting up MongoDB Atlas for cloud database management&lt;/li&gt;
&lt;li&gt;Preparing the project structure for future development&lt;/li&gt;
&lt;li&gt;Populating the database with sample job data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why This Day Was Important
&lt;/h3&gt;

&lt;p&gt;Although I didn't build many features, I spent time preparing the project's foundation. I've learned that starting a project properly choosing the right technologies, organizing the structure, and setting up the database—makes development much smoother later on.&lt;/p&gt;

&lt;p&gt;By the end of the day, the project was ready, and I was excited to begin building the API features over the following days.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqvw4zilfg51zv4yr5yiq.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqvw4zilfg51zv4yr5yiq.png" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Day 14: Laying the Foundation for My Job Posting Application
&lt;/h2&gt;

&lt;p&gt;On Day 14, I laid a strong foundation for my Job Posting Application by focusing on the backend. I spent the day setting up the project structure and preparing everything needed for the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Explored
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Created the application's core layers&lt;/li&gt;
&lt;li&gt;Connected my application to MongoDB Atlas&lt;/li&gt;
&lt;li&gt;Integrated Swagger (OpenAPI) for API documentation and testing&lt;/li&gt;
&lt;li&gt;Built the endpoint to retrieve all job posts&lt;/li&gt;
&lt;li&gt;Configured MongoDB Atlas Search Index in preparation for implementing search&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;Most of my time was spent troubleshooting.&lt;/p&gt;

&lt;p&gt;While integrating Swagger for API documentation, I initially experimented with Spring Boot 4.1.0. However, I later discovered that some of the libraries and examples I was following weren't fully compatible with the newer version.&lt;/p&gt;

&lt;p&gt;After investigating the issue, I decided to use this Springdoc OpenAPI dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springdoc&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;springdoc-openapi-starter-webmvc-ui&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.8.9&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After making that change, the Swagger UI loaded successfully and I was able to continue developing the application.&lt;/p&gt;

&lt;p&gt;I also encountered a routing issue while trying to redirect the application's home page to the Swagger UI. Initially, the redirect wasn't working because the routing logic was mixed with my API endpoints.&lt;/p&gt;

&lt;p&gt;The fix was to move the routing logic into a dedicated &lt;code&gt;HomeController&lt;/code&gt; and annotate it with &lt;code&gt;@Controller&lt;/code&gt; instead of &lt;code&gt;@RestController&lt;/code&gt;. This allowed Spring MVC to process the redirect correctly and display the Swagger UI as intended.&lt;/p&gt;

&lt;p&gt;Although these issues slowed my progress, they helped me better understand dependency compatibility, request mapping, and how Spring MVC handles page navigation. By the end of the day, I had a much stronger understanding of how the framework works behind the scenes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Running Successfully&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn8qxw3a9uh2qynjvxitt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn8qxw3a9uh2qynjvxitt.png" alt=" " width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Day 15: Implementing Search with MongoDB Atlas Search
&lt;/h2&gt;

&lt;p&gt;On Day 15, I continued building the backend for my Job Posting Application by implementing search functionality using MongoDB Atlas Search. This was my first time working with Atlas Search, and it gave me a better understanding of how modern search features are built in NoSQL applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learnt and Explored
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implementing search using MongoDB Atlas Search&lt;/li&gt;
&lt;li&gt;Sorting search results&lt;/li&gt;
&lt;li&gt;Limiting search results for better performance&lt;/li&gt;
&lt;li&gt;Understanding where Client-Side Field Encryption fits into MongoDB applications&lt;/li&gt;
&lt;li&gt;Working with MongoDB aggregation pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;Before I could continue implementing the search feature, I discovered that my project had stopped working because of changes I had made while experimenting with different configurations.&lt;/p&gt;

&lt;p&gt;Instead of trying to fix everything blindly, I decided to use Git to roll the project back to my last stable commit. This allowed me to compare my changes, identify what had gone wrong, and continue development from a working version.&lt;/p&gt;

&lt;p&gt;After restoring the project, I encountered a few integration issues while implementing MongoDB Atlas Search. Most of them were related to configuring the search query correctly and making sure my application communicated properly with MongoDB.&lt;/p&gt;

&lt;p&gt;Although I spent more time debugging than expected, the experience reinforced an important lesson: version control isn't just for collaborating with others—it's also one of the best debugging tools a developer can have.&lt;/p&gt;

&lt;p&gt;By the end of the day, I had successfully implemented search, sorting, and result limiting, giving my Job Posting Application a much more practical search experience.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2vdbwft7igu0sxp6w0o1.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2vdbwft7igu0sxp6w0o1.png" alt=" " width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Goals for Week 4
&lt;/h1&gt;

&lt;p&gt;As I head into Week 4 of this journey, these are the goals I've set for myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete the core features of my Job Posting Application&lt;/li&gt;
&lt;li&gt;Build a fully functional search experience using MongoDB Atlas Search&lt;/li&gt;
&lt;li&gt;Develop the frontend with React and connect it to the backend&lt;/li&gt;
&lt;li&gt;Continue strengthening my understanding of Spring Boot and MongoDB&lt;/li&gt;
&lt;li&gt;Learn more about securing backend applications and API best practices&lt;/li&gt;
&lt;li&gt;Keep documenting my journey and sharing what I learn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Week 3 reminded me that software engineering is just as much about solving problems as it is about writing code. From debugging Spring Boot issues to learning MongoDB Atlas Search and starting a brand-new project, every challenge made me a more confident developer.&lt;/p&gt;

&lt;p&gt;I hope the work I'm putting in today eventually leads to the opportunities I'm working so hard for. Until then, I'll keep building, learning, and improving every day.&lt;/p&gt;

&lt;p&gt;If you're also learning, building, or growing in tech, I'd love to connect and follow your journey too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's keep building. 💙&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>spring</category>
      <category>database</category>
      <category>showdev</category>
    </item>
    <item>
      <title>My Second Week of #100DaysOfCode: Learning, Building, and Creating Opportunities</title>
      <dc:creator>Onatade Abdulmajeed</dc:creator>
      <pubDate>Sun, 28 Jun 2026 20:42:09 +0000</pubDate>
      <link>https://dev.to/onatade_abdulmajeed/my-second-week-of-100daysofcode-learning-building-and-creating-opportunities-2a2o</link>
      <guid>https://dev.to/onatade_abdulmajeed/my-second-week-of-100daysofcode-learning-building-and-creating-opportunities-2a2o</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A few weeks ago, I started the &lt;strong&gt;#100DaysOfCode&lt;/strong&gt; challenge, and I'm beginning to understand why so many developers recommend it.&lt;/p&gt;

&lt;p&gt;Week 1 was all about laying the foundation. I spent hours debugging my Spring MVC application, fixing configuration issues, and realizing that progress in software engineering often comes from solving problems rather than writing new code.&lt;/p&gt;

&lt;p&gt;As I stepped into Week 2, things started to shift. I spent less time fighting bugs and more time learning new concepts, building projects, and being intentional about my growth. Instead of simply following tutorials, I found myself thinking more about how everything fits together and how I can become a better software engineer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Make it work, make it right, make it fast." &lt;/p&gt;

&lt;p&gt;— Kent Beck&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Day 4: Applied for a Job Role
&lt;/h2&gt;

&lt;p&gt;One of the biggest moments of Week 2 happened on Day 4.&lt;/p&gt;

&lt;p&gt;My mentor shared the Junior Backend Engineer opening at Chowdeck and encouraged me to apply. I submitted my application, but I didn't stop there.&lt;/p&gt;

&lt;p&gt;I wanted to give myself a better chance of being noticed, so I decided to go the extra mile. I recorded a short introduction video where I talked about who I am, what I've been learning, and why I believed I would be a good fit for the role.&lt;/p&gt;

&lt;p&gt;After that, I reached out directly to the CEO, CTO, and a Technical Lead with a personalized email and included the video as part of my introduction.&lt;/p&gt;

&lt;p&gt;Although I haven’t gotten a response yet and don’t know what the outcome will be, I’m proud that I took the initiative. I just hope they reply soon.&lt;/p&gt;




&lt;h2&gt;
  
  
  Day 5: Exploring Spring Boot Data JPA
&lt;/h2&gt;

&lt;p&gt;On Day 5, I focused on Spring Boot Data JPA and started understanding how it simplifies working with databases compared to the traditional Spring Framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  What i Learnt and Explored
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Spring Boot Data JPA configuration&lt;/li&gt;
&lt;li&gt;JPA Repositories for saving and retrieving data&lt;/li&gt;
&lt;li&gt;Query DSL (findBy...) for generating queries automatically&lt;/li&gt;
&lt;li&gt;Custom queries using the @Query annotation&lt;/li&gt;
&lt;li&gt;REST fundamentals and how applications communicate through APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;Although I spent less time debugging this week, I still ran into one issue while configuring Spring Boot Data JPA.&lt;/p&gt;

&lt;p&gt;When I tried running the application, Hibernate failed to start and threw the following error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Caused by: java.lang.ClassNotFoundException:
Could not load requested class: org.hibernate.dialect.MySQL5Dialect
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I initially configured the application to use &lt;code&gt;org.hibernate.dialect.MySQL5Dialect&lt;/code&gt;. After checking the Hibernate documentation, I realized that this dialect is no longer recommended for newer Hibernate versions.&lt;/p&gt;

&lt;p&gt;The fix was simply to update the configuration to use the generic MySQL dialect instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;spring.jpa.properties.hibernate.dialect&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;org.hibernate.dialect.MySQLDialect&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After making that change, the application started successfully and I was able to continue learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Running Successfully&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb6lda6dcnqbr915imqwq.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb6lda6dcnqbr915imqwq.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Day 6: Learning Docker
&lt;/h2&gt;

&lt;p&gt;Day 6 didn't go exactly as planned because there was no electricity till the end of the day. Even so, I didn't want to break my streak of posting.&lt;/p&gt;

&lt;p&gt;Since I couldn't spend much time coding, I decided to continue learning Docker and strengthen my understanding of containerization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some of the concepts I explored:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Image tagging&lt;/li&gt;
&lt;li&gt;Docker Hub&lt;/li&gt;
&lt;li&gt;The difference between &lt;code&gt;docker run&lt;/code&gt; and &lt;code&gt;docker compose&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Commonly used Docker commands&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;There weren't any major technical challenges today. The biggest obstacle was simply not having enough time due to the power outage.&lt;/p&gt;

&lt;p&gt;Instead of calling the day a loss, I decided to focused on learning concepts that didn't require me to build a full project.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdoikfrf93g3gg8xqf37b.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdoikfrf93g3gg8xqf37b.png" alt=" " width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 7: Understanding REST APIs
&lt;/h2&gt;

&lt;p&gt;On Day 7, I dived my focus to understanding how Spring Boot handles data in REST APIs more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some of the concepts I explored:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;REST methods (&lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;POST&lt;/code&gt;, &lt;code&gt;PUT&lt;/code&gt;, and &lt;code&gt;DELETE&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Using Jackson to convert Java objects into JSON&lt;/li&gt;
&lt;li&gt;Working with &lt;code&gt;@PathVariable&lt;/code&gt; to capture values from the URL&lt;/li&gt;
&lt;li&gt;Returning XML responses with Jackson XML&lt;/li&gt;
&lt;li&gt;Understanding the &lt;code&gt;produces&lt;/code&gt; attribute&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;@RequestBody&lt;/code&gt; and the &lt;code&gt;consumes&lt;/code&gt; attribute to handle request data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;Unlike on Day 5, I didn't run into any major issues while following along.&lt;/p&gt;

&lt;p&gt;I was able to understand the concepts, implement them successfully, and spend more time learning. This made me realize that the hours I spent debugging in Week 1 are starting to pay off.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Result
&lt;/h3&gt;

&lt;p&gt;By the end of the day, I had more understanding of how Spring Boot handles requests and responses in REST APIs.&lt;/p&gt;

&lt;p&gt;Learning how JSON conversion, request handling, and HTTP methods work together gave me a better picture of how backend applications communicate with clients, and it's another step toward becoming a more confident backend developer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Running Successfully&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fclsbbt2kjhld385uekg3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fclsbbt2kjhld385uekg3.png" alt=" " width="799" height="424"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Day 8: Learning from the Spring Community
&lt;/h2&gt;

&lt;p&gt;While scrolling through LinkedIn, I came across a post from &lt;strong&gt;Naija JUG&lt;/strong&gt; announcing a live Spring Boot session featuring &lt;strong&gt;Josh Long&lt;/strong&gt;, Spring's first Developer Advocate. Since I'm currently learning Spring Boot, I knew I couldn't miss the opportunity to hear directly from someone who has contributed so much to the Spring ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Naija JUG Announcement&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpsfhtjc1m12ckqgia7gg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpsfhtjc1m12ckqgia7gg.png" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The session covered the Spring ecosystem, some of the latest features in Spring Boot, and included a live coding demonstration that was both insightful and inspiring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Josh Long During the Session&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkp10d6ii0ttbfjzaqajd.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkp10d6ii0ttbfjzaqajd.png" alt=" " width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some of the things I learned:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A broader view of the Spring ecosystem&lt;/li&gt;
&lt;li&gt;New features and improvements in Spring Boot&lt;/li&gt;
&lt;li&gt;An introduction to GraalVM and its role in Spring applications&lt;/li&gt;
&lt;li&gt;Best practices from an experienced Spring Developer Advocate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was inspiring to hear directly from someone who has contributed so much to the Spring ecosystem. Watching him code live reminded me how much there is still to learn, and it motivated me to keep improving one day at a time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges I Faced
&lt;/h3&gt;

&lt;p&gt;There weren't any technical challenges. The only challenge was simply keeping up with the live coding session because Josh Long moved incredibly fast 😅.&lt;/p&gt;

&lt;p&gt;Even though I couldn't follow every line of code in real time, I learned a lot by watching how he approached problems and explained different concepts.&lt;/p&gt;

&lt;p&gt;One day, I hope to code with that level of confidence and speed too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for Week 3
&lt;/h2&gt;

&lt;p&gt;As I head into Week 3 of this journey, these are the goals I've set for myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continue strengthening my Java and Spring Boot fundamentals&lt;/li&gt;
&lt;li&gt;Complete my Product Management Console App and rebuild it as a Spring Boot application&lt;/li&gt;
&lt;li&gt;Build more backend projects with less reliance on tutorials&lt;/li&gt;
&lt;li&gt;Continue learning Docker and deployment concepts&lt;/li&gt;
&lt;li&gt;Keep improving my problem-solving skills by building consistently&lt;/li&gt;
&lt;li&gt;Continue documenting my journey and sharing what I learn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Week 2 taught me that growth isn't just about writing more code. It's about staying consistent, learning from others, putting yourself out there, and building one step at a time.&lt;/p&gt;

&lt;p&gt;I'm excited to see what Week 3 has in store.&lt;/p&gt;

&lt;p&gt;If you're also learning, building, or growing in tech, I'd love to connect and learn from your journey too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's keep building.💙&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LinkedIn:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/onatade-abdulmajeed/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/onatade-abdulmajeed/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;X (Twitter):&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://x.com/spider337761" rel="noopener noreferrer"&gt;https://x.com/spider337761&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>spring</category>
      <category>docker</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
