Skip to content
View esteban389's full-sized avatar

Block or report esteban389

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
esteban389/README.md

Hi, I'm Esteban 👋

Backend Engineer · Java · JVM · Distributed Systems · Cloud Native · Networking

I'm a software engineer focused primarily on backend development with Java.

I currently work with Java on the backend at Plumii, and I'm particularly interested in understanding software beyond the framework level — from JVM behavior and performance, through networking, to distributed systems and cloud-native architectures.

Outside of application development, I maintain a collection of engineering labs where I learn by implementing things, breaking them, measuring them, and documenting what I find.


🔬 Engineering Labs

Experiments around Java, the JVM, performance engineering, concurrency, memory, and data structures.

Topics include allocation and GC behavior, escape analysis, object layout, JIT behavior, contention, false sharing, custom data structures, I/O, and benchmarking.

The goal is not just to make code faster, but to understand why the machine behaves the way it does.

Learning computer networking by removing abstractions and building pieces myself.

HTTP servers and clients from scratch, TCP/UDP experiments, DNS, proxies, connection management, protocol parsing, backpressure, timeouts, and other networking concepts — using Java, Go, C, or whatever language best fits the experiment.

Small, isolated experiments around distributed systems, resilience, messaging, consistency, observability, and cloud-native architecture.

Rather than only implementing the happy path, these experiments deliberately introduce failures: duplicate messages, retries, service crashes, latency, unavailable dependencies, partial failures, and inconsistent state.

Topics include:

Idempotency · Retries & Backoff · Circuit Breakers · Sagas · Transactional Outbox · Messaging · Eventual Consistency · Observability · Chaos Engineering

🐹 Go Lab

My workspace for learning Go through projects, experiments, and personal notes.

I'm particularly interested in Go for networking, infrastructure, backend services, concurrency, and distributed systems.


🧭 What I'm Exploring

I'm especially interested in the layers where application development meets systems engineering:

  • Java & the JVM — runtime behavior, JIT compilation, allocation, GC, profiling and performance
  • 🧠 Algorithms & data structures — implementation details, memory layout and performance characteristics
  • 🌐 Networking — TCP/IP, HTTP, DNS, sockets, proxies and what happens beneath high-level clients
  • 🌍 Distributed systems — consistency, messaging, coordination, resilience and failure modes
  • ☁️ Cloud-native systems — AWS, containers, infrastructure, observability and distributed application architecture
  • ⚙️ Performance engineering — measurement, profiling, benchmarking and understanding bottlenecks
  • 🐹 Go — learning the language through systems-oriented projects

🛠️ Technologies

Backend & Languages

Java · TypeScript · JavaScript · PHP · Go · C

Application Development

React · Next.js · Laravel

Systems & Infrastructure

Linux · Docker · AWS · Git


💡 How I Like to Learn

I learn best by turning concepts into experiments.

Instead of only reading about something like retries, hash tables, GC behavior, or TCP connections, I prefer to:

  1. build a small implementation;
  2. form a hypothesis;
  3. create a reproducible experiment;
  4. inspect or measure what actually happens;
  5. deliberately introduce edge cases and failures;
  6. document what I got wrong and what I learned.

A lot of the repositories here are built around that process.


🏗️ Bigger Project

I'm also working toward a larger cloud-native neobank project where I'm intentionally choosing a more distributed architecture than the problem strictly requires.

The goal is educational: use a single system to bring together concepts such as service boundaries, messaging, consistency, failure handling, observability, AWS infrastructure, and distributed workflows.

In a production system I would generally favor the simplest architecture that satisfies the requirements.

Here, the architectural complexity is part of the experiment.


I'm interested in understanding software all the way down — not only how to use an abstraction, but what it does, why it works, and how it fails.

Pinned Loading

  1. qsul-backend qsul-backend Public

    PHP

  2. java-systems-lab java-systems-lab Public

  3. distributed-cloud-labs distributed-cloud-labs Public

  4. networking-lab networking-lab Public

  5. go-lab go-lab Public

  6. leetcode-notes leetcode-notes Public

    Java