<?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: Johann Gaviria</title>
    <description>The latest articles on DEV Community by Johann Gaviria (@johanngaviria).</description>
    <link>https://dev.to/johanngaviria</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%2F2563856%2F86931ef6-33a2-4b6f-9ea4-ee0010d86e10.png</url>
      <title>DEV Community: Johann Gaviria</title>
      <link>https://dev.to/johanngaviria</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johanngaviria"/>
    <language>en</language>
    <item>
      <title>Building My Own Technical Interview Practice Repository</title>
      <dc:creator>Johann Gaviria</dc:creator>
      <pubDate>Tue, 08 Sep 2026 20:51:05 +0000</pubDate>
      <link>https://dev.to/johanngaviria/building-my-own-technical-interview-practice-repository-24m3</link>
      <guid>https://dev.to/johanngaviria/building-my-own-technical-interview-practice-repository-24m3</guid>
      <description>&lt;p&gt;Preparing for technical interviews has made me realize something:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;solving more exercises doesn't necessarily mean practicing better.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I've spent quite a bit of time solving programming problems, reviewing Python concepts, working on backend projects, and preparing for technical interviews.&lt;/p&gt;

&lt;p&gt;But there was always something missing.&lt;/p&gt;

&lt;p&gt;I didn't have a consistent way to practice.&lt;/p&gt;

&lt;p&gt;Sometimes I'd solve an algorithmic problem. Other times I'd work on some business logic. Then I'd look at a random interview question online.&lt;/p&gt;

&lt;p&gt;It worked, but it felt disconnected.&lt;/p&gt;

&lt;p&gt;So I decided to build something for myself.&lt;/p&gt;

&lt;p&gt;The project is called &lt;strong&gt;Technical Tests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's a repository designed to help me practice technical interviews for &lt;strong&gt;Junior Backend Developer, Junior Python Developer, and Software Engineering Intern&lt;/strong&gt; roles.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Build Another Exercise Repository?
&lt;/h2&gt;

&lt;p&gt;There are already plenty of platforms for coding challenges.&lt;/p&gt;

&lt;p&gt;LeetCode, HackerRank, CodeSignal, and many others are great resources.&lt;/p&gt;

&lt;p&gt;But I wasn't trying to replace them.&lt;/p&gt;

&lt;p&gt;I wanted something slightly different.&lt;/p&gt;

&lt;p&gt;I wanted exercises that felt closer to the kind of problem I might actually encounter during a junior backend interview.&lt;/p&gt;

&lt;p&gt;Not necessarily:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Implement this famous algorithm."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But rather:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here's a small system with some business rules. Figure out how to process this data correctly."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That difference is important to me.&lt;/p&gt;

&lt;p&gt;Backend development isn't only about algorithms.&lt;/p&gt;

&lt;p&gt;You also need to understand requirements, translate them into logic, handle edge cases, choose appropriate data structures, write maintainable code, and think about complexity.&lt;/p&gt;

&lt;p&gt;So the exercises are designed around those skills.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Kind of Exercises?
&lt;/h2&gt;

&lt;p&gt;Each exercise is intended to take roughly &lt;strong&gt;30–60 minutes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The difficulty stays within:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy&lt;/li&gt;
&lt;li&gt;Easy/Medium&lt;/li&gt;
&lt;li&gt;Medium&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And each exercise focuses on &lt;strong&gt;one coherent problem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, an exercise might involve an inventory system where you need to process stock events and determine which products need to be reordered.&lt;/p&gt;

&lt;p&gt;Or a room allocation problem where you need to process booking requests according to availability and business rules.&lt;/p&gt;

&lt;p&gt;These problems can combine several concepts without becoming artificially complex.&lt;/p&gt;

&lt;p&gt;Some of the things I want to practice are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lists and dictionaries&lt;/li&gt;
&lt;li&gt;Sets&lt;/li&gt;
&lt;li&gt;Sorting&lt;/li&gt;
&lt;li&gt;Searching&lt;/li&gt;
&lt;li&gt;Frequency counting&lt;/li&gt;
&lt;li&gt;Two pointers&lt;/li&gt;
&lt;li&gt;Sliding windows&lt;/li&gt;
&lt;li&gt;Stacks and queues&lt;/li&gt;
&lt;li&gt;Basic greedy strategies&lt;/li&gt;
&lt;li&gt;Data transformations&lt;/li&gt;
&lt;li&gt;Business rules&lt;/li&gt;
&lt;li&gt;Validation&lt;/li&gt;
&lt;li&gt;State management&lt;/li&gt;
&lt;li&gt;Resource limits&lt;/li&gt;
&lt;li&gt;Edge cases&lt;/li&gt;
&lt;li&gt;Time and space complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important part is that these concepts appear &lt;strong&gt;inside a problem&lt;/strong&gt;, rather than as isolated exercises.&lt;/p&gt;




&lt;h2&gt;
  
  
  The AI Part
&lt;/h2&gt;

&lt;p&gt;One of the more interesting parts of this project is that I'm using AI coding agents to help generate and evaluate the exercises.&lt;/p&gt;

&lt;p&gt;But I don't want the AI to simply generate a problem and a complete solution and call it a day.&lt;/p&gt;

&lt;p&gt;That wouldn't really help me practice.&lt;/p&gt;

&lt;p&gt;So I created repository-level rules that define how exercises should be generated.&lt;/p&gt;

&lt;p&gt;The agent has to follow constraints such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate exactly one exercise at a time.&lt;/li&gt;
&lt;li&gt;Keep the problem suitable for junior developers.&lt;/li&gt;
&lt;li&gt;Avoid trivial programming exercises.&lt;/li&gt;
&lt;li&gt;Avoid simply copying well-known platform problems.&lt;/li&gt;
&lt;li&gt;Keep exercises self-contained.&lt;/li&gt;
&lt;li&gt;Prefer the Python standard library.&lt;/li&gt;
&lt;li&gt;Include public and hidden tests.&lt;/li&gt;
&lt;li&gt;Include evaluation criteria.&lt;/li&gt;
&lt;li&gt;Keep the candidate-facing starter code minimal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point became particularly important.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Starter Code Problem
&lt;/h2&gt;

&lt;p&gt;Initially, I was tempted to provide more structure in the starter code.&lt;/p&gt;

&lt;p&gt;For example, an exercise might start with predefined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;constants&lt;/li&gt;
&lt;li&gt;enums&lt;/li&gt;
&lt;li&gt;dataclasses&lt;/li&gt;
&lt;li&gt;error types&lt;/li&gt;
&lt;li&gt;helper functions&lt;/li&gt;
&lt;li&gt;domain models&lt;/li&gt;
&lt;li&gt;result structures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It looked organized.&lt;/p&gt;

&lt;p&gt;But there was a problem.&lt;/p&gt;

&lt;p&gt;It was also giving away too much of the solution.&lt;/p&gt;

&lt;p&gt;If the exercise tells me that I need a &lt;code&gt;BookingStatus&lt;/code&gt; enum, a &lt;code&gt;BookingResult&lt;/code&gt; dataclass, three helper functions, and a particular domain model, then I'm already being guided toward a specific implementation.&lt;/p&gt;

&lt;p&gt;That's not what I wanted.&lt;/p&gt;

&lt;p&gt;So I changed the philosophy.&lt;/p&gt;

&lt;p&gt;The starter code should answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Where do I implement my solution?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"How should I implement the solution?"&lt;/strong&gt;&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%2Fj2wy2b1qtst4nfxdu836.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj2wy2b1qtst4nfxdu836.jpg" alt="Minimal starter code philosophy" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, a starter might simply look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_bookings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rooms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Process booking requests and return the allocation report.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nb"&gt;NotImplementedError&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;The README explains the requirements.&lt;/p&gt;

&lt;p&gt;The starter tells me where to start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I decide how to solve it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That means I have to make the design decisions myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What data structures should I use?&lt;/li&gt;
&lt;li&gt;Do I need helper functions?&lt;/li&gt;
&lt;li&gt;Should I create classes?&lt;/li&gt;
&lt;li&gt;How should validation work?&lt;/li&gt;
&lt;li&gt;How should errors be represented?&lt;/li&gt;
&lt;li&gt;Can I solve it in one pass?&lt;/li&gt;
&lt;li&gt;Do I need sorting?&lt;/li&gt;
&lt;li&gt;What's the complexity?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's much closer to an actual interview.&lt;/p&gt;




&lt;h2&gt;
  
  
  README → Starter → Candidate
&lt;/h2&gt;

&lt;p&gt;This led to a simple principle for the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;README
  ↓
What needs to be solved?

Starter
  ↓
Where do I implement it?

Candidate
  ↓
How do I solve it?

Tests
  ↓
Did the solution actually work?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tests shouldn't care whether I used three functions or one.&lt;/p&gt;

&lt;p&gt;They shouldn't care whether I created a class.&lt;/p&gt;

&lt;p&gt;They shouldn't care whether I used a dictionary, a list, or another appropriate data structure.&lt;/p&gt;

&lt;p&gt;They should care about the &lt;strong&gt;documented behavior&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This also makes the evaluation more fair.&lt;/p&gt;

&lt;p&gt;For example, if two candidates solve the same exercise using completely different internal designs, both should be accepted if their implementations satisfy the contract.&lt;/p&gt;




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

&lt;p&gt;Each exercise has public and hidden tests.&lt;/p&gt;

&lt;p&gt;The public tests are there to make the expected behavior clearer and allow the candidate to verify their implementation.&lt;/p&gt;

&lt;p&gt;The hidden tests are intended to catch cases such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Empty input&lt;/li&gt;
&lt;li&gt;Single-element input&lt;/li&gt;
&lt;li&gt;Duplicate values&lt;/li&gt;
&lt;li&gt;Boundary conditions&lt;/li&gt;
&lt;li&gt;Conflicting business rules&lt;/li&gt;
&lt;li&gt;Invalid states&lt;/li&gt;
&lt;li&gt;Large inputs&lt;/li&gt;
&lt;li&gt;Incomplete implementations&lt;/li&gt;
&lt;li&gt;Cases where an apparently correct solution breaks under less obvious conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tests interact only with the documented public interface.&lt;/p&gt;

&lt;p&gt;They don't depend on the internal structure of the candidate's solution.&lt;/p&gt;

&lt;p&gt;For example, if two candidates solve the same exercise using completely different internal designs, both should be accepted if their implementations satisfy the contract.&lt;/p&gt;




&lt;h2&gt;
  
  
  Evaluation
&lt;/h2&gt;

&lt;p&gt;After solving an exercise, the repository can also evaluate the implementation.&lt;/p&gt;

&lt;p&gt;The default scoring model is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Points&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Functional correctness&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edge cases&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code quality&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complexity&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python usage&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The score is then converted into a grade from 1 to 10.&lt;/p&gt;

&lt;p&gt;The evaluation also produces feedback about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What was done well&lt;/li&gt;
&lt;li&gt;Problems found&lt;/li&gt;
&lt;li&gt;Potential improvements&lt;/li&gt;
&lt;li&gt;Complexity&lt;/li&gt;
&lt;li&gt;Code quality&lt;/li&gt;
&lt;li&gt;Interview-oriented feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to pretend that an automated score is equivalent to a real interviewer.&lt;/p&gt;

&lt;p&gt;It's simply another way to get structured feedback after solving the exercise.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keeping the Architecture Simple
&lt;/h2&gt;

&lt;p&gt;Another decision I made was to avoid unnecessary infrastructure.&lt;/p&gt;

&lt;p&gt;These aren't backend applications.&lt;/p&gt;

&lt;p&gt;I don't need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;li&gt;Django&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;External APIs&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Cloud infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to practice &lt;strong&gt;problem solving and Python&lt;/strong&gt;, not spend an hour configuring infrastructure before getting to the actual problem.&lt;/p&gt;

&lt;p&gt;That doesn't mean those technologies aren't useful.&lt;/p&gt;

&lt;p&gt;They are.&lt;/p&gt;

&lt;p&gt;But they belong in other projects and exercises.&lt;/p&gt;

&lt;p&gt;For this repository, the Python standard library and &lt;code&gt;pytest&lt;/code&gt; are enough for most problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Repository Structure
&lt;/h2&gt;

&lt;p&gt;The repository is intentionally simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;technical-tests/
├── AGENTS.md
├── README.md
├── docs/
│   ├── EXERCISE_RULES.md
│   └── EVALUATION_RULES.md
│
└── exercises/
    └── YYYY-MM-DD-test-name/
        ├── README.md
        ├── EVALUATION.md
        ├── 
        ├── docs/
        │   ├── README.es.md
        │   └── EVALUATION.es.md
        ├── pyproject.toml
        │
        ├── solution/
        │   └── solution.py
        │
        └── tests/
            ├── test_solution.py
            └── test_solution_hidden.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each exercise is self-contained.&lt;/p&gt;

&lt;p&gt;The root README acts mostly as an index.&lt;/p&gt;

&lt;p&gt;The detailed rules live separately so that the project documentation doesn't become unnecessarily large.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Workflow
&lt;/h2&gt;

&lt;p&gt;The workflow I'm aiming for is simple:&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%2Fbug5hxlsztbghpqwbfi4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbug5hxlsztbghpqwbfi4.jpg" alt="Technical interview practice workflow" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The interesting part is that the repository itself becomes part of the learning loop.&lt;/p&gt;

&lt;p&gt;Instead of just solving a problem and moving on, I can look back at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How I approached the problem.&lt;/li&gt;
&lt;li&gt;Where I made mistakes.&lt;/li&gt;
&lt;li&gt;Which edge cases I missed.&lt;/li&gt;
&lt;li&gt;Whether my solution was unnecessarily complex.&lt;/li&gt;
&lt;li&gt;How I could improve the implementation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Over time, that should give me a better picture of where I actually need to improve.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'm Learning From Building It
&lt;/h2&gt;

&lt;p&gt;Ironically, building a repository for practicing interviews has already taught me a few things.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Designing a good exercise is harder than it looks
&lt;/h3&gt;

&lt;p&gt;It's surprisingly easy to create a problem that is either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;too trivial,&lt;/li&gt;
&lt;li&gt;too ambiguous,&lt;/li&gt;
&lt;li&gt;too difficult,&lt;/li&gt;
&lt;li&gt;too long,&lt;/li&gt;
&lt;li&gt;or accidentally gives away the solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finding the middle ground is harder.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. More structure isn't always better
&lt;/h3&gt;

&lt;p&gt;I like clean architecture and well-defined abstractions.&lt;/p&gt;

&lt;p&gt;But an interview exercise doesn't necessarily benefit from having every possible abstraction predefined.&lt;/p&gt;

&lt;p&gt;Sometimes giving less structure creates a better problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Tests are part of the specification
&lt;/h3&gt;

&lt;p&gt;Writing tests forced me to think about what the actual contract of an exercise is.&lt;/p&gt;

&lt;p&gt;If a test depends on an internal implementation detail, that's probably a bad test.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. AI needs constraints
&lt;/h3&gt;

&lt;p&gt;AI can generate code and problems extremely quickly.&lt;/p&gt;

&lt;p&gt;But "generate something" isn't the same as "generate something useful."&lt;/p&gt;

&lt;p&gt;The repository rules are there to constrain the agent and keep the exercises consistent.&lt;/p&gt;




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

&lt;p&gt;For now, the project is intentionally small.&lt;/p&gt;

&lt;p&gt;My plan is to gradually build a collection of exercises covering different areas of backend-oriented problem solving.&lt;/p&gt;

&lt;p&gt;I'd like to eventually have exercises around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inventory management&lt;/li&gt;
&lt;li&gt;Orders&lt;/li&gt;
&lt;li&gt;Reservations&lt;/li&gt;
&lt;li&gt;Loans&lt;/li&gt;
&lt;li&gt;Scheduling&lt;/li&gt;
&lt;li&gt;Permissions&lt;/li&gt;
&lt;li&gt;Billing&lt;/li&gt;
&lt;li&gt;Resource allocation&lt;/li&gt;
&lt;li&gt;Data processing&lt;/li&gt;
&lt;li&gt;Algorithms and data structures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But I don't want to turn it into a giant collection just for the sake of having hundreds of exercises.&lt;/p&gt;

&lt;p&gt;I'd rather have &lt;strong&gt;fewer, well-designed problems&lt;/strong&gt; that actually make me think.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;I'm building this mainly for myself.&lt;/p&gt;

&lt;p&gt;I'm currently preparing for professional practice and junior backend opportunities, and I wanted a more structured way to work on the part of software development that is difficult to practice through personal projects alone:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;solving problems under constraints.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maybe it will eventually be useful to someone else too.&lt;/p&gt;

&lt;p&gt;But for now, the goal is pretty simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;practice consistently, understand my mistakes, and get a little better with every exercise.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And what do I know, I'm just a junior dev.&lt;/p&gt;




&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;The project is available on GitHub: &lt;a href="https://github.com/JohannGaviria/technical_test" rel="noopener noreferrer"&gt;Technical Tests&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're also preparing for technical interviews, feel free to take an exercise and solve it without looking at the reference solution.&lt;/p&gt;

&lt;p&gt;That's kind of the point.&lt;/p&gt;




&lt;p&gt;Created with ♥️ by &lt;a href="https://github.com/JohannGaviria" rel="noopener noreferrer"&gt;JohannGaviria&lt;/a&gt;; And what do I know, I'm just a junior dev.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>career</category>
      <category>interview</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
