Things I've learned in 2025

This has been one of the years where I’ve learned the most things, probably since I first started learning programming almost 10 years ago. I thought it would be a great exercise to put it into writing to reflect on it all. The Dvorak keyboard layout The first thing I set out to learn in 2025 was how to type using the Dvorak keyboard layout. The main reason was simply because it sounded like a fun thing to do. I still remember how much fun it was to learn QWERTY in school, going through all of those timed exercises. This time around it wasn’t as fun, and to be honest, it was very frustrating at times, especially when my brain completely forgot how to QWERTY and I was stuck typing Dvorak full time at very low speeds. ...

November 27, 2025 · 8 min

Preparing for the AWS Architect Professional Exam

I have passed the AWS Architect Professional exam with a score of 791/1000! Preparing for the AWS exam I have recently completed the AWS Architect Associate Exam, and I thought the Professional would be a nice next step considering all the prep work I had done. I took about three months between passing the Associate and taking the Professional exam. For the Associate exam I spent a lot of hours each day going through the course content, writing notes and doing the practice exams multiple times, this time I didn’t have the luxury of time. I had to do all of the studying during work hours, where I could only spend about an hour a day (sometimes more, sometimes less), 4 days a week. ...

November 12, 2025 · 8 min

Asking the question gives me the answer

Today I wanted to write about something that happens to me at work all the time: the process of asking for technical help, helps me discover the answer to my question. For example, today I was stuck on some terraform config that wasn’t showing some of the changes I was expecting to see in the diff. I decided to start writing a message in a support channel. As I was writing the message I started thinking about whether I had covered all the bases of things that I could check on before bothering someone to help me on something I could have done myself. At that point, it occured to me that I hadn’t checked a specific file that might have some releveant information. So, I deleted my half typed message, checked the file, and voila! The reason my config wasn’t applying was because I forgot to explicitly add some variables. ...

November 3, 2025 · 2 min

Slowly Changing Dimensions

Slowly changing dimensions, what a confusing name. This is the sort of term I’ve been hearing for a while now, but never really bothered to properly look up what it actually means. As it turns out, all it means is how you handle row updates/deletes in your data pipelines. Whether you decide to maintain historical data in your tables by appending new rows when a change happens, or you decide to update in place instead. ...

October 30, 2025 · 5 min

Interviewing Makes you More Competent at your Job

Interviewing for other jobs in tech can make you a more competent engineer. My premise for this argument is that when you prepare an interview for a new role you need to prepare to answer questions, technical and non-technical, in a domain that is different from your day to day work. This forces you to step out of your daily work and read and think about different domains and technologies. During the interview process you will get an idea of how well you performed, whether that is via self reflection, or feedback from the emloyer. This gives you a pretty good idea of where you are lacking knowledge and a good direction of where to focus next. ...

October 6, 2025 · 6 min

Replicas vs Standby

When working with distributed systems you can encounter terminology such as “replicas” or “standby” intstances. When I first started learning about distrubuted systems, I assumed “replicas” and “standby” were the same thing, but called differently when talking about scaling or high availability. While they can be the same thing, that is not always the case, so I wanted to clarify the concepts in this post. Replicas Replicas are one or more exact copies of the primary instance of your database. Their main purpose is to balance the load. ...

October 5, 2025 · 4 min

Don't let Serverless Costs Give You a Heart Attack

Practical strategies to protect your serverless applications from runaway AWS bills, including caching, rate limiting, WAF rules, and DynamoDB safeguards.

September 18, 2025 · 6 min

From LLM to Agent

After ignoring the whole “agent” hype for a while, I started to get that inevitable feeling of being left behind. That changed when I came across this blog post explaining the basic flow of an agent. It made me want to try it for myself and see what it actually makes an agent. This post is my walkthrough of that process: step by step, showing how to turn an LLM into an agent. The code here is mainly illustrative, meant to highlight the concepts rather than provide a fully working solution. ...

September 2, 2025 · 7 min

Preparing for the AWS Certified Solutions Architect – Associate Exam

I recently passed the AWS Solutions Architect Associate exam with a score of 848. This certification covers a wide range of AWS services which has taken a good amount of work and effort to prepare. In this blog post I wanted to share my experience preparing for the exam, sharing some info about the exam, and what has worked for me. Preparation I have about five years of on-and-off AWS experience, mostly with RDS, CloudFormation, Lambda, EC2 and a few other services. ...

September 1, 2025 · 4 min

Building a GraphQL API with AWS AppSync and PostgreSQL Aurora

Introduction This is a guide to myself if I need to deploy an Appsync App in the future. Appsync is a Serverless AWS offering for implementing GraphQL APIs. It integrates nicely with Aurora and DynamoDB. Other integrations are done via Lambdas. Architecture Overview Compontents AWS AppSync: The managed GraphQL service that processes API requests Aurora PostgreSQL: Serverless relational database for data storage AWS Secrets Manager: Securely stores database credentials AWS IAM: Manages permissions between services AWS CloudWatch: Handles logging and monitoring The flow of a request is: ...

August 5, 2025 · 5 min

Connection Pooling for Postgres using PG Bouncer

I recently had to run load testing for an API that fetches data from Postgres. I was monitoring Postgres when running the first test, and I noticed that hundreds of connections were being opened. I was also seeing runtime errors in Postgres such as “no more connections allowed” or “out of shared memory”. Clearly the database was not prepared for the load. So I started to look for ways to improve connection management to the database, and I came across pgBouncer, a connection pooling service for Postgres. ...

July 24, 2025 · 11 min

My experience learning the Dvorak keyboard layout

In this post, guest writer Billy interviews Pablo on learning Dvorak. Pablo started to learn Dvorak in January 2025. This is an interview about his experience. First of all, can you explain what Dvorak is? Dvorak is a keyboard layout created in the 1930s, proposed as a more efficient alternative to Qwerty. Dvorak groups letters on the keyboard based on how often they are used (in the English language), so the most used ones are located in the “home row” and less used ones are located in locations that require further finger reach. ...

July 15, 2025 · 17 min

Making Friends With Postgres: Replication

Replication refers to having copies of your data across different instances. It gives you redundancy when one of your instances goes down so you can still serve data to users from the remaining instances. Another benefit of a replicated system is being able to load balance your requests across different instances. This can be useful when the load of serving all the requests from a single instance would be too much. ...

June 9, 2025 · 9 min

tmux + NeoVim ❤️

I currently have a basic setup in NeoVim: I use NvChad by default with treesitter to get pretty text highlighting, telescope to navigate files, conform for all my formatting needs and some python utilities such as pyright. This is enough to get me by. The thing that has been annoying me the most lately is the terminal workflow in NeoVim. To start with, the terminal does not save any history across sessions, which is incredibly annoying. ...

May 20, 2025 · 4 min

Building a Reverse ETL Pipeline: Upserting Delta Lake Data into Postgres with Structured Streaming

In this post, I share how to build a Reverse ETL pipeline to upsert data from Delta (Databricks) into Postgres to provide sub-second response times to our tables. The goal is to make warehouse data available to downstream systems that require millisecond response times. These systems could be front-end applications that need to consume this data, or online machine learning models that require additional data as input to generate predictions in real time. ...

May 8, 2025 · 9 min

We Need to Talk about Partitions

The other day my team came across a peculiar situation with our Postgres database. We had this table partitioned by a primary key, which we’ll call order_id. We realised one of the queries was taking a very long time to execute, and like good SQL debuggers we looked at the query plan. Let’s pretend this was the slow query: EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 12345; Upon inspection, we observed that the query plan was scanning at every single partition! And in our case, there were a lot of them. ...

March 16, 2025 · 3 min

Load Testing PostgeSQL using Locust

I recently needed to run load tests on a PostgreSQL database. Postgres is no question a reliable and scalable database ready for production use cases, but there might be times when you’ll need to confirm it can handle your specific use case. This might be necessary if you’re using a PostgreSQL database hosted by a third party or if you want to check if your current instance size and specs can manage your existing load. ...

January 10, 2025 · 3 min

Test Driven Development

We all know that person that always asks for unit tests on your Pull Request. You curse under your breath wondering why they have nothing better to do than ruining your day. Unit tests let you know if your codebase is behaving as expected. As long as you’ve written good tests, you can be happy your codebase is healthy if tests are showing green. Any time a test appears in red, you will know that you’ve introduced a bug and you can fix it before it hits production. ...

December 13, 2024 · 4 min

Understanding Database Indexes

Indexes are like going to the airport and looking at the signs to see where your gate is located. The signs tell you how to get to your gate quickly. The alternative to not having signs is walking the whole airport randomly until you come across your gate. So by having the signs you can reach your gate a lot faster. Makes sense right? This is the idea behind indexes. ...

December 8, 2024 · 6 min

Preparing for the Kubernetes Application Developer Exam

Learning To prepare for the exam I took the Udemy Kubernetes Certified Application Developer (CKAD) with Tests which I could access for free through my company. The course covers all the topics required for the exam with labs to practice each section which I found super helpful. The labs are hosted on KodeKloud and they are free to access as part of the course. I had some previous experience interacting with kubernetes as part of my job, but I lacked a good understanding of the basic concepts. ...

September 10, 2024 · 6 min