<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Engineering notes on Felice Geracitano — Engineering notes</title><link>https://feliceg.dev/blog/</link><description>Recent content in Engineering notes on Felice Geracitano — Engineering notes</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Sun, 20 Sep 2026 12:00:00 +0200</lastBuildDate><atom:link href="https://feliceg.dev/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>How I Became an Apocaloptimist Engineer</title><link>https://feliceg.dev/blog/how-i-became-an-apocaloptimist-engineer/</link><pubDate>Sun, 20 Sep 2026 12:00:00 +0200</pubDate><guid>https://feliceg.dev/blog/how-i-became-an-apocaloptimist-engineer/</guid><description>&lt;p&gt;This week I watched &lt;a href="https://www.netflix.com/title/82792555"&gt;&lt;em&gt;The AI Doc: Or How I Became an Apocaloptimist&lt;/em&gt;&lt;/a&gt; on Netflix. Daniel Roher, expecting his first child, goes around asking the people building AI whether the world his kid inherits will be wonderful or over. He gets both answers, sometimes from the same person, and lands on a word for holding both at once: apocaloptimist.&lt;/p&gt;
&lt;p&gt;I recognised the two camps immediately. Software engineering has the same argument running in every Slack channel and every conference hallway.&lt;/p&gt;</description></item><item><title>Rust, Learn Rust</title><link>https://feliceg.dev/blog/rust-learn-rust/</link><pubDate>Sun, 20 Sep 2026 12:00:00 +0200</pubDate><guid>https://feliceg.dev/blog/rust-learn-rust/</guid><description>&lt;p&gt;Rust curious? This little crab knows a shortcut:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; _~^~^~_
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;\) / o o \ (/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;_ Rust _&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://learn-rust.feliceg.dev/"&gt;Learn Rust basics.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Go, Learn Go</title><link>https://feliceg.dev/blog/go-learn-go/</link><pubDate>Sun, 13 Sep 2026 12:00:00 +0200</pubDate><guid>https://feliceg.dev/blog/go-learn-go/</guid><description>&lt;p&gt;Go curious? This little gopher knows a shortcut:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ʕ ◔ ϖ ◔ ʔ
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; /|Go|\
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://learn-go.feliceg.dev/"&gt;Learn Go basics.&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Python vs Go vs Rust</title><link>https://feliceg.dev/blog/python-vs-go-vs-rust/</link><pubDate>Sun, 13 Sep 2026 00:00:00 +0200</pubDate><guid>https://feliceg.dev/blog/python-vs-go-vs-rust/</guid><description>&lt;p&gt;I wanted to see what switching from Python to Go or Rust actually buys you when an API spends most of its time waiting on databases and other services. So I built the same small storefront API in all three and gave each one the same CPU, memory, and load.&lt;/p&gt;
&lt;p&gt;The result I found most useful was how little the response times changed at equal load, while CPU and memory usage were quite different. Below are the measurements, the setup, and the code behind them.&lt;/p&gt;</description></item><item><title>Strangling a 15-Year-Old Monolith: Black-Box Parity Testing in Production</title><link>https://feliceg.dev/blog/strangling-a-15-year-old-monolith-black-box-parity-testing-in-production/</link><pubDate>Mon, 03 Aug 2026 10:34:07 +0000</pubDate><guid>https://feliceg.dev/blog/strangling-a-15-year-old-monolith-black-box-parity-testing-in-production/</guid><description>&lt;p&gt;
&lt;img src="https://feliceg.dev/blog/strangling-a-15-year-old-monolith-black-box-parity-testing-in-production/image-01.jpg" alt="Photo by Ivett M on Unsplash" width="1024" height="1540" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@ivett_m?utm_source=medium&amp;amp;utm_medium=referral"&gt;Ivett M&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;How we’re migrating a legacy monolith to FastAPI with zero downtime, treating the old system as an oracle instead of documentation.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For the past couple of years I’ve been working on a 15-year-old monolith that powers two high-traffic e-commerce storefronts. It’s the kind of codebase every engineer recognizes: multiple applications tangled together, Python versions frozen in time, and business logic that nobody fully remembers writing but that makes real money every single day.&lt;/p&gt;</description></item><item><title>Zero to Streaming Application — Infrastructure</title><link>https://feliceg.dev/blog/zero-to-streaming-application-infrastructure/</link><pubDate>Sun, 07 Jun 2020 12:27:48 +0000</pubDate><guid>https://feliceg.dev/blog/zero-to-streaming-application-infrastructure/</guid><description>&lt;p&gt;
&lt;img src="https://feliceg.dev/blog/zero-to-streaming-application-infrastructure/image-01.jpg" alt="Photo by Colton Duke on Unsplash" width="1024" height="576" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@csoref?utm_source=medium&amp;amp;utm_medium=referral"&gt;Colton Duke&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;This is part of “&lt;em&gt;Zero to Streaming Application&lt;/em&gt;”, learn about streaming applications building a POC. Full code&lt;/em&gt; &lt;a href="https://github.com/FeliceGeracitano/kafka-uber"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://feliceg.dev/blog/zero-to-streaming-application-backend/"&gt;&lt;em&gt;&amp;lt; Previous Part (Backend)&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="intro"&gt;Intro &lt;a class="heading-anchor" href="#intro" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this part I’ll list the containers used in the POC, and few automation steps required for the schema creation. I did not went further and deploy the cluster, but it is worth to mention I’ve tested Github Actions running CI on FE and BE build.&lt;/p&gt;</description></item><item><title>Zero to Streaming Application — Backend</title><link>https://feliceg.dev/blog/zero-to-streaming-application-backend/</link><pubDate>Sun, 07 Jun 2020 12:27:42 +0000</pubDate><guid>https://feliceg.dev/blog/zero-to-streaming-application-backend/</guid><description>&lt;p&gt;
&lt;img src="https://feliceg.dev/blog/zero-to-streaming-application-backend/image-01.jpg" alt="Photo by Hosea Georgeson on Unsplash" width="1024" height="683" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@thekidnamedhosea?utm_source=medium&amp;amp;utm_medium=referral"&gt;Hosea Georgeson&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;This is part of “&lt;em&gt;Zero to Streaming Application&lt;/em&gt;”, learn about streaming applications building a POC. Full code&lt;/em&gt; &lt;a href="https://github.com/FeliceGeracitano/kafka-uber"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://feliceg.dev/blog/zero-to-demo-streaming-application-frontend/"&gt;&lt;em&gt;&amp;lt; Previous Part (Frontend)&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://feliceg.dev/blog/zero-to-streaming-application-infrastructure/"&gt;&lt;em&gt;&amp;gt; Next Part (Infra)&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="motivation"&gt;Motivation &lt;a class="heading-anchor" href="#motivation" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Learning something new is a positive way to spend the quarantine time we are force in 2020. I landed on &lt;a href="https://www.youtube.com/watch?v=UEg40Te8pnE"&gt;this video&lt;/a&gt; on youtube and decided to learn more about streaming applications in general.&lt;/p&gt;</description></item><item><title>Zero to Demo Streaming Application — Frontend</title><link>https://feliceg.dev/blog/zero-to-demo-streaming-application-frontend/</link><pubDate>Sun, 07 Jun 2020 12:27:35 +0000</pubDate><guid>https://feliceg.dev/blog/zero-to-demo-streaming-application-frontend/</guid><description>&lt;p&gt;
&lt;img src="https://feliceg.dev/blog/zero-to-demo-streaming-application-frontend/image-01.jpg" alt="Photo by Adrien Ledoux on Unsplash" width="1024" height="649" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@adrienl?utm_source=medium&amp;amp;utm_medium=referral"&gt;Adrien Ledoux&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;This is part of “&lt;em&gt;Zero to Streaming Application&lt;/em&gt;”, learn about streaming applications building a POC. Full code&lt;/em&gt; &lt;a href="https://github.com/FeliceGeracitano/kafka-uber"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://feliceg.dev/blog/zero-to-streaming-application-backend/"&gt;&lt;em&gt;&amp;gt; Next Part (Backend)&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="motivation"&gt;Motivation &lt;a class="heading-anchor" href="#motivation" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Learning something new is a positive way to spend the quarantine time we are forced in 2020. I landed on &lt;a href="https://www.youtube.com/watch?v=UEg40Te8pnE"&gt;this video&lt;/a&gt; on youtube and decided to learn more about streaming applications in general.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=UEg40Te8pnE"&gt;Watch the referenced video&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Web Performance Monitoring Tools</title><link>https://feliceg.dev/blog/web-performance-monitoring-tools/</link><pubDate>Tue, 15 Jan 2019 12:13:15 +0000</pubDate><guid>https://feliceg.dev/blog/web-performance-monitoring-tools/</guid><description>&lt;p&gt;
&lt;img src="https://feliceg.dev/blog/web-performance-monitoring-tools/image-01.jpg" alt="Photo by chuttersnap on Unsplash" width="1024" height="684" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@chuttersnap?utm_source=medium&amp;amp;utm_medium=referral"&gt;chuttersnap&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction &lt;a class="heading-anchor" href="#introduction" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is no silver bullet in the wild wild web that will grant you excellent performance for your site, every app is unique, especially when complexity kicks in and features are added.&lt;/p&gt;
&lt;p&gt;Requirements, budget and user base will define your actual performance goal, but there are general rules that you can follow to avoid junky applications and angry users. Fortunately the web is plenty of tutorial and documentation to help on this matter, articles like the &lt;a href="https://developers.google.com/web/fundamentals/performance/prpl-pattern/"&gt;PRPL Patter&lt;/a&gt;, &lt;a href="https://developers.google.com/speed/"&gt;Google Developer Speed Docs&lt;/a&gt; or recent announced &lt;a href="https://web.dev"&gt;https://web.dev&lt;/a&gt; help developers to understand topics such as code splitting, css optimisation, images resizes and many others…everything needed for silky smooth web app! ⚡️.&lt;/p&gt;</description></item><item><title>Multicasted Observables in RxJs</title><link>https://feliceg.dev/blog/multicasted-observables-in-rxjs/</link><pubDate>Wed, 07 Feb 2018 09:00:22 +0000</pubDate><guid>https://feliceg.dev/blog/multicasted-observables-in-rxjs/</guid><description>&lt;p&gt;In this article I‘d like share my experience with unicast and multicast Observables (called &lt;em&gt;cold&lt;/em&gt; and &lt;em&gt;hot&lt;/em&gt; respectively), how these can be generated in RxJs, how to multicast and how to share side-effects.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An Observable is a representation of any set of values over any amount of time. — Ben Lesh. (&lt;a href="https://www.youtube.com/watch?v=KOOT7BArVHQ&amp;amp;t=862s"&gt;RxJS In-Depth talk&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="observable-"&gt;Observable 👁 &lt;a class="heading-anchor" href="#observable-" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A quick recap of what an Observable is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A “Stream” or “Set” of 0 to many values of any type (Numbers, Strings, Array, Objects…).&lt;/li&gt;
&lt;li&gt;Functions that ties producer to consumer.&lt;/li&gt;
&lt;li&gt;“Lazy” because the logic inside is not executed until someone is subscribing to the stream. Also called a cold observable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is the most basic building block of RxJS for programming with asynchronous data streams. Anything can be a stream and wrapped into an Observable: network calls, user inputs, variables, properties, data structures, etc.&lt;/p&gt;</description></item><item><title>Brotli compression delivered from AWS</title><link>https://feliceg.dev/blog/brotli-compression-delivered-from-aws/</link><pubDate>Tue, 23 Jan 2018 14:54:47 +0000</pubDate><guid>https://feliceg.dev/blog/brotli-compression-delivered-from-aws/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; On July 11th, 2018 Amazon added support for whitelisting the Accept-Encoding HTTP header 🎉 ! You can now use brotli without using the viewer request.
&lt;a href="https://forums.aws.amazon.com/message.jspa?messageID=850934#850934"&gt;https://forums.aws.amazon.com/message.jspa?messageID=850934#850934&lt;/a&gt;
&lt;a href="https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html"&gt;https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-is-brotli"&gt;What is Brotli? &lt;a class="heading-anchor" href="#what-is-brotli" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Brotli&lt;/strong&gt; is a generic-purpose lossless compression algorithm released by Google in 2015, similar to the common gzip it can be used to compress data and send it over the network.&lt;/p&gt;
&lt;p&gt;
&lt;img src="https://feliceg.dev/blog/brotli-compression-delivered-from-aws/image-01.png" alt="Brotli content sent to your Chrome browser" width="1024" height="577" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Brotli&lt;/strong&gt; content sent to your Chrome browser&lt;/p&gt;</description></item></channel></rss>