<?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: Waleed Tariq</title>
    <description>The latest articles on DEV Community by Waleed Tariq (@waleed2660).</description>
    <link>https://dev.to/waleed2660</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%2F4063051%2Fc2f54dea-3a62-42f9-9834-77077d21f509.jpeg</url>
      <title>DEV Community: Waleed Tariq</title>
      <link>https://dev.to/waleed2660</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/waleed2660"/>
    <language>en</language>
    <item>
      <title>I built a "real job" simulator for Spring Boot learners, free &amp; open source</title>
      <dc:creator>Waleed Tariq</dc:creator>
      <pubDate>Tue, 04 Aug 2026 20:01:06 +0000</pubDate>
      <link>https://dev.to/waleed2660/i-built-a-real-job-simulator-for-spring-boot-learners-free-open-source-n0e</link>
      <guid>https://dev.to/waleed2660/i-built-a-real-job-simulator-for-spring-boot-learners-free-open-source-n0e</guid>
      <description>&lt;p&gt;Most Spring Boot tutorials teach you to build a CRUD app and call it a day. But that's not really what the job looks like day to day, so I put together a project that mimics what you'd actually work on as a backend dev at a company with real infrastructure.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/Waleed2660/springboot-learning-kit" rel="noopener noreferrer"&gt;springboot-learning-kit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've added the following 12 tasks that you'd need to complete:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Project setup&lt;/strong&gt;: spin up Postgres + messaging brokers, verify everything's healthy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kicking off development&lt;/strong&gt;: request validators, custom exceptions, a new order status API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debug a critical bug&lt;/strong&gt;: chase down a duplicate-insert caused by misusing &lt;code&gt;EntityManager.persist()&lt;/code&gt; vs &lt;code&gt;save()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ActiveMQ + Apache Camel&lt;/strong&gt;: configure routes, consume from a queue, handle dead letter queues, publish to a Virtual Topic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RabbitMQ&lt;/strong&gt;: set up exchanges/bindings, fix an infinite redelivery bug, publish to a topic exchange&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DB schema migration&lt;/strong&gt;: add a table with Liquibase, write rollback SQL, fix an N+1 write&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt;: unit tests with Mockito, snapshot tests, integration tests with TestContainers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code style&lt;/strong&gt;: enforce formatting automatically with Spotless + Palantir Java Format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prometheus metrics&lt;/strong&gt;: expose app metrics via Actuator, configure scraping&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grafana&lt;/strong&gt;: connect to Prometheus, build dashboards, add &lt;code&gt;@Timed&lt;/code&gt; annotations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load testing&lt;/strong&gt;: run JMeter tests, interpret throughput, watch the impact in Grafana&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global exception handling&lt;/strong&gt;: swap per-controller try-catch for &lt;code&gt;@ControllerAdvice&lt;/code&gt; + RFC 7807 Problem Details&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Everything runs locally via Docker Compose, and there's a Bruno collection included so you can hit the APIs without writing your own Postman setup.&lt;/p&gt;

&lt;p&gt;It's completely free and open source, so fork it, work through the tasks in order, and you'll come out the other side with a much better feel for what the job actually involves beyond "make endpoint, save to DB."&lt;/p&gt;

&lt;p&gt;Would love feedback from people!&lt;/p&gt;

</description>
      <category>springboot</category>
      <category>java</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
