<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Pablo Lopez - Software Engineer &amp; AI Contractor</title>
    <link>http://drmvlfs3gt0ln.cloudfront.net/posts/</link>
    <description>Recent content in Posts on Pablo Lopez - Software Engineer &amp; AI Contractor</description>
    <image>
      <title>Pablo Lopez - Software Engineer &amp; AI Contractor</title>
      <url>http://drmvlfs3gt0ln.cloudfront.net/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>http://drmvlfs3gt0ln.cloudfront.net/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.147.7</generator>
    <language>en</language>
    <lastBuildDate>Sun, 05 Jul 2026 10:41:15 +0100</lastBuildDate>
    <atom:link href="http://drmvlfs3gt0ln.cloudfront.net/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Lessons Learned from Building Data APIs</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/019_lessons_learned_from_building_data_apis/</link>
      <pubDate>Sun, 05 Jul 2026 10:41:15 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/019_lessons_learned_from_building_data_apis/</guid>
      <description>&lt;p&gt;Over the last 3 years I&amp;rsquo;ve spent a lot of time building highly scalable Data APIs, to enable teams to access data from different sources with minimal effort. There have been several mistakes made along the way, and many lessons learned. I believe these lessons will form strong foundations to build performant Data APIs from day one.&lt;/p&gt;
&lt;p&gt;Before diving into the lessons, I&amp;rsquo;ll define Data API.&lt;/p&gt;
&lt;p&gt;A Data API is an API service that serves some data to the user. The API backend connects to a database, such as Postgres, Redis or MongoDB, it runs a query based on the API call received, and it serves that data to the end user.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Where is our leisure time now?</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/046_why_the_need_for_hyperproductivity/</link>
      <pubDate>Thu, 09 Apr 2026 11:56:05 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/046_why_the_need_for_hyperproductivity/</guid>
      <description>&lt;p&gt;Over the past few months I&amp;rsquo;ve been using AI agents a lot to automate many engineering tasks that otherwise would take me much longer to do.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a firm believer that the era of writing code by hand has finished. With the right workflows these tools can do a lot of the work for us. AI is improving our productivity, and it will continue more and more as the tools mature.&lt;/p&gt;</description>
    </item>
    <item>
      <title>In the Age of coding agents local development is King</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/044_local_development_is_king/</link>
      <pubDate>Thu, 26 Feb 2026 08:27:51 +0000</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/044_local_development_is_king/</guid>
      <description>&lt;p&gt;Coding agents work best when they have a good feedback loop they can use to verify their changes. Without a good local environment and feedback loop, agentic development quickly becomes a waste of time.&lt;/p&gt;
&lt;p&gt;My first experience with software development was javascript, building websites using frameworks like React. I loved my development setup back then. I would always have a local server, automatically refreshing on every change. If anything broke, I would instantly find out and fix the issue right away. I would also have my unit tests &lt;a href=&#34;https://martinfowler.com/bliki/SelfTestingCode.html&#34;&gt;running constantly&lt;/a&gt; catching bugs in near real time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What do Postgres Tables Actually look like?</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/022_physical_postgres_tables/</link>
      <pubDate>Wed, 11 Feb 2026 19:49:37 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/022_physical_postgres_tables/</guid>
      <description>&lt;p&gt;If you were to peek inside Postgres and see how the tables are stored, you&amp;rsquo;d be surprised they look nothing like the outuput you get when you do a SELECT query.&lt;/p&gt;
&lt;p&gt;In this post I look inside Postgres to understand how tables are stored in the filesystem. The goal of this post is nothing more than to understand a small part of the whole Postgres ecosystem to demystify things a bit. It is a step by step process to find out where tables actually live in the filesystem and their structure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Things I&#39;ve learned in 2025</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/038_things_ive_learned_2025/</link>
      <pubDate>Thu, 27 Nov 2025 08:15:55 +0000</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/038_things_ive_learned_2025/</guid>
      <description>&lt;p&gt;This has been one of the years where I&amp;rsquo;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.&lt;/p&gt;
&lt;h2 id=&#34;the-dvorak-keyboard-layout&#34;&gt;The Dvorak keyboard layout&lt;/h2&gt;
&lt;p&gt;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&amp;rsquo;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Preparing for the AWS Architect Professional Exam</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/036_preparing_for_aws_archictect_professional_exam/</link>
      <pubDate>Wed, 12 Nov 2025 12:06:38 +0000</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/036_preparing_for_aws_archictect_professional_exam/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;AWS Architect Professional Certificate&#34; loading=&#34;lazy&#34; src=&#34;http://drmvlfs3gt0ln.cloudfront.net/posts/036_preparing_for_aws_archictect_professional_exam/aws-pro-cert.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;I have passed the AWS Architect Professional exam with a score of 791/1000!&lt;/p&gt;
&lt;h2 id=&#34;preparing-for-the-aws-exam&#34;&gt;Preparing for the AWS exam&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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&amp;rsquo;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Asking the question gives me the answer</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/034_simply_asking_answers_my_question/</link>
      <pubDate>Mon, 03 Nov 2025 14:17:51 +0000</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/034_simply_asking_answers_my_question/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;For example, today I was stuck on some terraform config that wasn&amp;rsquo;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&amp;rsquo;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&amp;rsquo;t applying was because I forgot to explicitly add some variables.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slowly Changing Dimensions</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/032_slowly_changing_dimensions/</link>
      <pubDate>Thu, 30 Oct 2025 08:11:11 +0000</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/032_slowly_changing_dimensions/</guid>
      <description>&lt;p&gt;Slowly changing dimensions, what a confusing name. This is the sort of term I&amp;rsquo;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interviewing Makes you More Competent at your Job</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/015_interviewing_makes_you_competent/</link>
      <pubDate>Mon, 06 Oct 2025 08:01:22 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/015_interviewing_makes_you_competent/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replicas vs Standby</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/016_replicas_vs_standby/</link>
      <pubDate>Sun, 05 Oct 2025 10:11:56 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/016_replicas_vs_standby/</guid>
      <description>&lt;p&gt;When working with distributed systems you can encounter terminology such as &amp;ldquo;replicas&amp;rdquo; or &amp;ldquo;standby&amp;rdquo; intstances.&lt;/p&gt;
&lt;p&gt;When I first started learning about distrubuted systems, I assumed &amp;ldquo;replicas&amp;rdquo; and &amp;ldquo;standby&amp;rdquo; 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.&lt;/p&gt;
&lt;h2 id=&#34;replicas&#34;&gt;Replicas&lt;/h2&gt;
&lt;p&gt;Replicas are one or more exact copies of the primary instance of your database. Their main purpose is to balance the load.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don&#39;t let Serverless Costs Give You a Heart Attack</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/029_securing_serverless/</link>
      <pubDate>Thu, 18 Sep 2025 20:04:11 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/029_securing_serverless/</guid>
      <description>Practical strategies to protect your serverless applications from runaway AWS bills, including caching, rate limiting, WAF rules, and DynamoDB safeguards.</description>
    </item>
    <item>
      <title>From LLM to Agent</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/026_agents_then_and_now/</link>
      <pubDate>Tue, 02 Sep 2025 09:55:49 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/026_agents_then_and_now/</guid>
      <description>&lt;p&gt;After ignoring the whole “agent” hype for a while, I started to get that inevitable feeling of being left behind.&lt;/p&gt;
&lt;p&gt;That changed when I came across &lt;a href=&#34;https://ghuntley.com/agent/&#34;&gt;this blog post&lt;/a&gt; explaining the basic flow of an agent. It made me want to try it for myself and see what it actually makes an agent.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Preparing for the AWS Certified Solutions Architect – Associate Exam</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/024_preparing_for_aws_architect_certification/</link>
      <pubDate>Mon, 01 Sep 2025 08:34:53 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/024_preparing_for_aws_architect_certification/</guid>
      <description>&lt;p&gt;I recently passed the AWS Solutions Architect Associate exam with a score of 848.&lt;/p&gt;
&lt;p&gt;This certification covers a wide range of AWS services which has taken a good amount of work and effort to prepare.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2 id=&#34;preparation&#34;&gt;Preparation&lt;/h2&gt;
&lt;p&gt;I have about five years of on-and-off AWS experience, mostly with RDS, CloudFormation, Lambda, EC2 and a few other services.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a GraphQL API with AWS AppSync and PostgreSQL Aurora</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/021_deploy_graphql_api_with_appsync/</link>
      <pubDate>Tue, 05 Aug 2025 14:46:48 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/021_deploy_graphql_api_with_appsync/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2 id=&#34;architecture-overview&#34;&gt;Architecture Overview&lt;/h2&gt;
&lt;p&gt;Compontents&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;AWS AppSync&lt;/strong&gt;: The managed GraphQL service that processes API requests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aurora PostgreSQL&lt;/strong&gt;: Serverless relational database for data storage&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS Secrets Manager&lt;/strong&gt;: Securely stores database credentials&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS IAM&lt;/strong&gt;: Manages permissions between services&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS CloudWatch&lt;/strong&gt;: Handles logging and monitoring&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The flow of a request is:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Connection Pooling for Postgres using PG Bouncer</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/014_using_pg_bouncer/</link>
      <pubDate>Thu, 24 Jul 2025 13:01:19 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/014_using_pg_bouncer/</guid>
      <description>&lt;p&gt;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 &amp;ldquo;no more connections allowed&amp;rdquo; or &amp;ldquo;out of shared memory&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Clearly the database was not prepared for the load.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My experience learning the Dvorak keyboard layout</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/013_qwerty_to_dvorak/</link>
      <pubDate>Tue, 15 Jul 2025 12:42:43 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/013_qwerty_to_dvorak/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;First of all, can you explain what Dvorak is?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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 &amp;ldquo;home row&amp;rdquo; and less used ones are located in locations that require further finger reach.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making Friends With Postgres: Replication</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/011_postgres_replication/</link>
      <pubDate>Mon, 09 Jun 2025 12:00:55 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/011_postgres_replication/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>tmux &#43; NeoVim ❤️</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/009_neovim_and_tmux/</link>
      <pubDate>Tue, 20 May 2025 12:09:22 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/009_neovim_and_tmux/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;http://drmvlfs3gt0ln.cloudfront.net/posts/009_neovim_and_tmux/tmux_neovim.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;I currently have a basic setup in NeoVim: I use &lt;a href=&#34;https://nvchad.com/&#34;&gt;NvChad&lt;/a&gt; by default with &lt;a href=&#34;https://github.com/nvim-treesitter/nvim-treesitter&#34;&gt;treesitter&lt;/a&gt; to get pretty text highlighting, &lt;a href=&#34;https://github.com/nvim-telescope/telescope.nvim&#34;&gt;telescope&lt;/a&gt; to navigate files, &lt;a href=&#34;https://github.com/stevearc/conform.nvim&#34;&gt;conform&lt;/a&gt; for all my formatting needs and some python utilities such as pyright. This is enough to get me by.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a Reverse ETL Pipeline: Upserting Delta Lake Data into Postgres with Structured Streaming</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/008_reverse_etl_databricks_to_postgres/</link>
      <pubDate>Thu, 08 May 2025 13:21:30 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/008_reverse_etl_databricks_to_postgres/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>We Need to Talk about Partitions</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/007_postgres_bad_partitions/</link>
      <pubDate>Sun, 16 Mar 2025 14:46:55 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/007_postgres_bad_partitions/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;partitions&#34; loading=&#34;lazy&#34; src=&#34;http://drmvlfs3gt0ln.cloudfront.net/posts/007_postgres_bad_partitions/partitions.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Let’s pretend this was the slow query:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EXPLAIN ANALYZE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SELECT * FROM orders WHERE &lt;span class=&#34;nv&#34;&gt;customer_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 12345&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Upon inspection, we observed that the query plan was scanning at every single partition! And in our case, there were a lot of them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Load Testing PostgeSQL using Locust</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/006_locust_postgres/</link>
      <pubDate>Fri, 10 Jan 2025 15:09:39 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/006_locust_postgres/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Test Driven Development</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/005_test_driven_development/</link>
      <pubDate>Fri, 13 Dec 2024 15:52:46 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/005_test_driven_development/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;green&lt;/em&gt;. Any time a test appears in &lt;em&gt;red&lt;/em&gt;, you will know that you’ve introduced a bug and you can fix it before it hits production.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding Database Indexes</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/003_navigating_database_indexes/</link>
      <pubDate>Sun, 08 Dec 2024 16:32:43 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/003_navigating_database_indexes/</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Preparing for the Kubernetes Application Developer Exam</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/002_kubernetes_exam/</link>
      <pubDate>Tue, 10 Sep 2024 15:37:39 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/002_kubernetes_exam/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Kubernetes diploma&#34; loading=&#34;lazy&#34; src=&#34;http://drmvlfs3gt0ln.cloudfront.net/posts/002_kubernetes_exam/kubernetes-cert.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;learning&#34;&gt;Learning&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;I had some previous experience interacting with kubernetes as part of my job, but I lacked a good understanding of the basic concepts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Career Transition into AI</title>
      <link>http://drmvlfs3gt0ln.cloudfront.net/posts/001_career_transition_into_ai/</link>
      <pubDate>Sat, 16 Dec 2023 14:59:43 +0100</pubDate>
      <guid>http://drmvlfs3gt0ln.cloudfront.net/posts/001_career_transition_into_ai/</guid>
      <description>&lt;p&gt;This is my story of how I went from non-tech into becoming a Machine Learning Engineer. I must have told this story multiple times in many different forms, but this will be the first time it goes into writing. Enjoy.&lt;/p&gt;
&lt;p&gt;I have a bachelor’s degree in Commerce. I found the last few years of school so exhausting that the thought of doing an engineering degree put me off. Four + years of no life? Oft, no thanks. I also thought I wasn’t smart enough to do engineering anyway so instead I chose Commerce - which “coincidentally” was the same degree my brother was doing.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
