How I Use Everyday POCs to Improve My Skills

Jan 21, 2026·
Leonardo Salles
Leonardo Salles
· 4 min read
blog

Over the last months, I’ve been using GitHub as a public lab to publish multiple Proofs of Concept (POCs) every week. These repositories are not side projects, tutorials, or polished products. They are experiments. Some are small, some are deliberately uncomfortable, and many are intentionally incomplete. Together, they form a learning system that has significantly improved how I think, design, and write software.

This article explains why POCs matter, how I approach them, what I actively avoid, and how I use repetition and depth as a long-term strategy for growth.

Why POCs Matter

A Proof of Concept is a learning tool. It is a controlled environment where you can explore a programming language, a library, a pattern, or even a “crazy” idea without the pressure of production constraints.

A POC is like a lab:

You test hypotheses.

You break things on purpose.

You observe behavior instead of assuming it.

You validate or discard ideas quickly.

POCs can be shallow, and that is sometimes acceptable. But real growth comes from deep POCs—the ones that force you to understand why something works, not just how to make it run.

Doing POCs should not be an occasional activity. It should be a mindset. Something you do every day.


How I Go Deep in a POC

Depth does not come from adding features. It comes from friction, investigation, and repetition.

Here are the practices I consistently apply:

  1. Debug Aggressively

I step through the code multiple times. I write down class names, method flows, and execution paths. I draw diagrams. I re-run the same scenarios until the mental model is clear.

  1. Write Code That Exposes the Problem

Instead of “happy path” examples, I write code that:

Simulates edge cases

Exaggerates failures

Forces race conditions

Pushes APIs into uncomfortable states

This kind of code reveals assumptions and hidden behavior.

  1. Research Patterns and Idioms

I actively look for:

Established patterns

Idiomatic usage

How experienced engineers approach the same problem

This helps distinguish accidental complexity from intentional design.

  1. Read Documentation, Books, and Source Code

I avoid tutorials as a primary source. Instead, I:

Read official documentation

Read books

Read the source code of libraries and frameworks

Reading source code is not optional. It is the fastest way to understand how something truly works and how it was intended to be used.

  1. Experiment Systematically

I test APIs under multiple conditions:

Success paths

Failure paths

Invalid inputs

Performance boundaries

Observing how a system behaves under stress is far more valuable than reading about it.


What I Avoid in POCs

There are a few clear anti-patterns I try to avoid:

  • Being shallow all the time

  • Just calling methods without understanding consequences

  • Repeating things that are already too easy

  • Avoiding discomfort

If a POC feels trivial, it is probably not a good POC. You should feel resistance. That resistance is where learning happens.


Principles I Keep in Mind

  • The more you practice, the better you get

  • Comparing libraries, approaches, languages, and patterns accelerates mastery

  • Repetition is key — sometimes you need 10, 50, or 100 attempts

  • Shallow POCs are not wrong, but they are not enough

  • You only fool yourself if you never go deep

  • Failure is part of the process

I also deliberately consider “crazy” POCs:

  • Writing a parser

  • Building a compiler

  • Creating a framework or library

  • Exploring the design of a new language

Even if these never reach completion, the learning payoff is massive.


How I Improve My POCs Over Time

Publishing on GitHub is a critical part of the process.

I try to:

  • Share code publicly and ask for feedback

  • Revisit the same problem using different approaches

  • Stay curious and ask questions

  • Read the source code of large projects like Java, Spring, Netty, Linux, React, and Node.js

I also document my POCs. Writing about:

  • What I did

  • Why I did it

  • What I learned

  • What went wrong

This transforms experiments into durable knowledge.

Good POCs can take hours, days, or even weeks—and that is perfectly fine. The time invested compounds.


Final Thoughts

Learning through code is a long-term game. It is not about speed or volume alone, but about consistency and intent.

Doing POCs every day is like going to the gym. Missing a day is not a failure, but showing up consistently is what builds strength over time.

If there is one takeaway, it is this: Make POCs a habit. Make them harder over time. And never stop experimenting.

Leonardo Salles
Authors
Senior Software Engineer
A Software Engineer with 12+ years of experience building scalable web applications. Passionate about modern JavaScript, cloud architecture, and creating delightful user experiences.