<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Omar Reda</title>
    <description>The latest articles on DEV Community by Omar Reda (@omarreda).</description>
    <link>https://dev.to/omarreda</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F502408%2Fde9fb2a0-17b9-4c19-be44-14ae6b45e5fc.jpeg</url>
      <title>DEV Community: Omar Reda</title>
      <link>https://dev.to/omarreda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/omarreda"/>
    <language>en</language>
    <item>
      <title>What Changed? How We Turned Production Change Blindness into a less than 10-Minute Answer</title>
      <dc:creator>Omar Reda</dc:creator>
      <pubDate>Fri, 03 Jul 2026 21:53:27 +0000</pubDate>
      <link>https://dev.to/omarreda/what-changed-how-we-turned-production-change-blindness-into-a-less-than-10-minute-answer-4k7l</link>
      <guid>https://dev.to/omarreda/what-changed-how-we-turned-production-change-blindness-into-a-less-than-10-minute-answer-4k7l</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnv78aoka8ndhxdj0uojg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnv78aoka8ndhxdj0uojg.png" alt="2am production change" width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Most incidents aren't mysteries. They're changes. Here's how we built a service that captures every production change, attaches it to the system it touched, and turned the hardest question in incident response into a one-line query.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The 2 a.m. question
&lt;/h2&gt;

&lt;p&gt;It's the middle of the night. A service's error rate is climbing, latency is fanning out, and a handful of engineers are now in a call that nobody wanted to join. The dashboards are red. The traces are interesting. But the question that actually decides how long this incident lasts isn't &lt;em&gt;what is broken&lt;/em&gt; — it's &lt;strong&gt;what changed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For a long time, that question was the most expensive part of our incident response. Not because the answer was unknowable, but because it was scattered. A code deployment lived in one tool. A feature-flag flip lived in another. A DNS or edge-config tweak lived with the team that owned the CDN. An infrastructure change sat in a cloud audit log nobody had open. A cache failover was a line in a console that no one thought to check until an hour in.&lt;/p&gt;

&lt;p&gt;So we'd do the forensic thing. We'd ping teams: "Did anyone deploy?" "Did anyone touch the config?" "Was there a failover?" Each question was a context switch, a wait, and a maybe. Reconstructing a simple timeline of &lt;em&gt;everything that changed around the moment things went wrong&lt;/em&gt; could eat the first hour of an incident — the most valuable hour there is.&lt;/p&gt;

&lt;p&gt;The uncomfortable truth underneath all of this: &lt;strong&gt;we had excellent observability for state, and almost none for change.&lt;/strong&gt; We could see &lt;em&gt;what the system was doing&lt;/em&gt;. We couldn't see &lt;em&gt;what we had done to it.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The insight: incidents are mostly changes wearing a costume
&lt;/h2&gt;

&lt;p&gt;If you look back across a quarter of incidents, a pattern jumps out. The overwhelming majority are triggered by a change someone made — a deploy, a flag, a config push, an infra edit, a failover. The system rarely breaks on its own. Something &lt;em&gt;changed&lt;/em&gt;, and the blast radius found its way to a user.&lt;/p&gt;

&lt;p&gt;That reframes the whole problem. If most incidents are caused by a change, then the single highest-leverage thing you can do for detection and diagnosis is to &lt;strong&gt;capture every change, timestamp it, and put it exactly where engineers are already looking&lt;/strong&gt; when something goes wrong.&lt;/p&gt;

&lt;p&gt;Not in a separate "change log" tool that becomes another tab nobody opens. &lt;em&gt;In the observability platform itself, attached to the specific service or entity the change touched.&lt;/em&gt; So that when an engineer pulls up an unhealthy service, the changes that hit it are right there on the timeline — overlaid on the latency and error graphs, in the same view, at the same timestamps.&lt;/p&gt;

&lt;p&gt;That idea became &lt;strong&gt;Odin Eye&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Odin Eye in one sentence
&lt;/h2&gt;

&lt;p&gt;Odin Eye is a change-intelligence pipeline: a set of lightweight collectors that watch every meaningful source of production change, a durable queue that fans them in, and a service that normalizes each change and pushes it into Dynatrace as an event &lt;strong&gt;attached to the affected entity&lt;/strong&gt; — where it becomes queryable with DQL alongside everything else we monitor.&lt;/p&gt;

&lt;p&gt;Here's the shape of it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F61bcygn0lkppjtr7frcx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F61bcygn0lkppjtr7frcx.png" alt="Odin Eye Architecture" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The architecture is deliberately boring in the best way. Every design choice optimizes for one thing: &lt;strong&gt;a change should never get lost on its way to becoming context.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How a change becomes context
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Collectors at the edge of every source
&lt;/h3&gt;

&lt;p&gt;Each source of change gets a small, single-purpose collector that knows how that source speaks. These are intentionally thin — they translate, they don't reason.&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deployments&lt;/strong&gt; flow in with the richest detail of all — not just "a deploy happened," but individual deployment &lt;em&gt;steps&lt;/em&gt;, and crucially the &lt;strong&gt;failed, aborted, and rolled-back&lt;/strong&gt; ones. A rollback at 02:14 is often the single most important line in an incident timeline.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;CloudTrail collector&lt;/strong&gt; is triggered whenever new audit logs land, fans out via notification, and filters the firehose down to the changes that actually matter — a curated allowlist of infrastructure-mutating actions (instance termination, database modification, security-group edits, secret changes, load-balancer deletion, and dozens more). For the most sensitive, destructive operations it additionally checks whether a &lt;em&gt;human&lt;/em&gt; initiated the action, so routine automation doesn't drown out the changes a person made by hand. It even captures whether the action &lt;strong&gt;succeeded or failed&lt;/strong&gt;, and attaches the error details when it didn't.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Cloudflare collector&lt;/strong&gt; watches for DNS and zone configuration changes and forwards them as they're applied.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;dynamic-configuration collector&lt;/strong&gt; captures feature-flag and runtime-configuration changes from our internal configuration platform — the kind of "flip a value in production" change that is famously invisible and famously the cause of incidents.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;application-configuration collector&lt;/strong&gt; emits an event whenever new application configs are promoted through the delivery pipeline, stamped with who triggered it and the exact commit.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;managed-cache collector&lt;/strong&gt; polls for cache failover events on a short interval, filters out test failovers, and forwards the real ones.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;mobile-releases collector&lt;/strong&gt; emits an event when a mobile app release ships — a new version submitted or promoted, or a staged rollout's percentage moved — so client-side changes land on the same timeline as everything server-side. Mobile is often exactly where a "nothing changed on our side" incident actually began.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The collectors live in different languages and runtimes (serverless functions, scheduled jobs, pipeline steps) because they live next to very different sources. What they share is an output contract.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. A common contract and a durable fan-in
&lt;/h3&gt;

&lt;p&gt;Every collector emits the same envelope:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;which kind of change&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;when it happened, UTC&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;human-readable summary&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sender"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;"odin-eye"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"payload"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"...who made the change, what changed, and any source-specific details..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;…and drops it onto a single SQS queue. That queue is the backbone of the whole system. It decouples a dozen heterogeneous producers from one consumer, absorbs bursts, and — because it's durable — guarantees that a change emitted during the chaos of an incident doesn't evaporate if the consumer is briefly busy. Failed messages retry with backoff and ultimately land in a dead-letter queue rather than disappearing silently. &lt;strong&gt;No change gets dropped on the floor.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One field in that envelope does outsized work: &lt;code&gt;sender&lt;/code&gt; is always &lt;code&gt;odin-eye&lt;/code&gt;. Every record the pipeline produces carries the same sender tag, so a single filter pulls back &lt;em&gt;everything&lt;/em&gt; we've ever captured — the &lt;em&gt;who&lt;/em&gt; and the &lt;em&gt;what&lt;/em&gt; of each change live in the &lt;code&gt;payload&lt;/code&gt;, but the front door is one field:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Everything Odin Eye has recorded, newest first
fetch events
| filter sender == "odin-eye"
| sort timestamp desc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Normalize, attribute, and attach
&lt;/h3&gt;

&lt;p&gt;Odin Eye itself — a Go service — consumes the queue and does the part that makes all of this &lt;em&gt;useful&lt;/em&gt;: it figures out &lt;strong&gt;which entity each change belongs to&lt;/strong&gt; and attaches the change there.&lt;/p&gt;

&lt;p&gt;This attribution step is the heart of the product. A change that isn't attached to anything is trivia. A change attached to the exact service that just started erroring is a diagnosis. Odin Eye routes each event by its source to a specialized mapper, resolves the target service — from a service tag carried on the event, or a known mapping — and emits a Dynatrace event (&lt;code&gt;CUSTOM_CONFIGURATION&lt;/code&gt; for config-style changes, &lt;code&gt;CUSTOM_DEPLOYMENT&lt;/code&gt; for deploys) with an entity selector that pins it to the right service, device, or environment.&lt;/p&gt;

&lt;p&gt;It also guards against a subtle real-world problem: large estates accumulate duplicate or near-duplicate entities, and an event attached to the &lt;em&gt;wrong&lt;/em&gt; copy is worse than no event. Odin Eye keeps a cache of resolved entities so changes land on the canonical one. The result is that a change shows up on the timeline of the thing it actually touched — not a lookalike, not a generic bucket.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why "attach it to the entity" is the whole game
&lt;/h2&gt;

&lt;p&gt;Plenty of organizations have a change log. Far fewer have change context &lt;em&gt;in the place engineers already look.&lt;/em&gt; That difference is everything.&lt;/p&gt;

&lt;p&gt;Because Odin Eye writes changes as first-class events on the entities themselves, two things become true at once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;They appear visually, in context.&lt;/strong&gt; Open an unhealthy service and the change markers sit right on the latency and error charts. The eye does the correlation for you: the error rate elbows up at 02:14, and there's a deployment marker at 02:13. You're not cross-referencing five tools; you're reading one graph.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;They become queryable with DQL.&lt;/strong&gt; Every change is now data you can slice. A few illustrative queries (shapes, not exact schema):&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   // Everything that changed on a given service in the last hour
   fetch events
   | filter event.kind == "CUSTOM_CONFIGURATION" or event.kind == "CUSTOM_DEPLOYMENT"
   | filter affected.entity == "the-service-in-trouble"
   | filter timestamp &amp;gt; now() - 1h
   | sort timestamp desc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   // Every failed, aborted, or rolled-back deployment across production today
   fetch events
   | filter event.kind == "CUSTOM_DEPLOYMENT"
   | filter deployment.state in ("FAILED", "ABORTED", "ROLLBACK")
   | summarize count(), by:{ affected.entity }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   // Did any Cloudflare or dynamic-config change land right before this problem opened?
   fetch events
   | filter source in ("cloudflare", "dynamic-config")
   | filter timestamp between problem.start - 10m and problem.start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The question that used to take an hour of pinging humans — &lt;em&gt;"what changed around this service right before it broke?"&lt;/em&gt; — is now a query that returns in seconds. And it's the &lt;em&gt;same&lt;/em&gt; query language engineers already use for metrics, logs, and traces, so there's nothing new to learn.&lt;/p&gt;




&lt;h2&gt;
  
  
  See it on the service screen
&lt;/h2&gt;

&lt;p&gt;Because every change is a first-class event on the entity, it surfaces on that entity's own screen — no separate tool, no extra tab. On any service (or host, process, or environment), the timeline carries &lt;code&gt;CUSTOM_DEPLOYMENT&lt;/code&gt; and &lt;code&gt;CUSTOM_CONFIGURATION&lt;/code&gt; markers right next to its golden signals, and opening a marker reveals the change's payload: the title, the source, and the &lt;em&gt;who&lt;/em&gt; and &lt;em&gt;what&lt;/em&gt; behind it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flav1u62qftnopfcwlr0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flav1u62qftnopfcwlr0f.png" alt="Events attached to entity" width="800" height="971"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A service's event timeline: deployments and configuration changes, attributed by Odin Eye, overlaid on the same view engineers already watch during an incident.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That's the payoff made tangible. An engineer investigating a spike never has to leave the service screen to ask "what changed?" — the deployment marker at 02:13 and the configuration change beside it are already in frame, each one click away from the full detail of who did it and what it touched.&lt;/p&gt;




&lt;h2&gt;
  
  
  The impact: from forensics to a first-class signal
&lt;/h2&gt;

&lt;p&gt;The headline result is blunt:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9h3go6zhsyy2zg8z4ix3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9h3go6zhsyy2zg8z4ix3.png" alt="MTTD less than 10mins" width="799" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The investigative phase that used to be a scavenger hunt across tools and teams collapsed into reading a single, unified change timeline overlaid on the system's own health signals.&lt;/p&gt;

&lt;p&gt;But the qualitative shifts matter just as much:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A shared language.&lt;/strong&gt; "What changed?" stopped being a round of interrogations and became a shared artifact everyone in the incident channel could see at once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The invisible became visible.&lt;/strong&gt; Flag flips, Cloudflare changes, cache failovers, mobile releases, infra edits made by hand — the changes that used to be discovered late, by accident, an hour into the call — now announce themselves on the right timeline the moment they happen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's blameless by construction.&lt;/strong&gt; Odin Eye tracks &lt;em&gt;changes&lt;/em&gt;, not &lt;em&gt;people&lt;/em&gt;. The framing is "a configuration changed and here's the blast radius," not "who broke production." That keeps the focus where it belongs: on understanding and recovering fast.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Built to grow: any new source is a small adapter
&lt;/h2&gt;

&lt;p&gt;The most important property of Odin Eye isn't any single source — it's that &lt;strong&gt;any new source of change can be tracked simply by adding a new collector&lt;/strong&gt;, with no change to the core. Adding the &lt;em&gt;next&lt;/em&gt; one is cheap. Because every collector speaks the same envelope and the consumer routes by a &lt;code&gt;source&lt;/code&gt; field into a config-driven mapper, onboarding a brand-new kind of change doesn't require re-architecting anything. You write a thin collector that emits the common contract, add a small mapping that says "this source attaches to that kind of entity," and the change starts showing up on timelines.&lt;/p&gt;

&lt;p&gt;That extensibility is the difference between a one-off integration and a platform. As new systems are introduced — new internal platforms, new managed services, new categories of change — they slot into the same pipeline. The set of things we can answer "what changed?" about only ever grows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lessons for anyone building change intelligence
&lt;/h2&gt;

&lt;p&gt;If you're considering something similar, a few things we'd underline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Change is a first-class observability signal, not an afterthought.&lt;/strong&gt; Treat it with the same seriousness as metrics, logs, and traces. The payoff during incidents is disproportionate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attribution is the product.&lt;/strong&gt; Capturing changes is easy; attaching them to the &lt;em&gt;right&lt;/em&gt; entity is what turns data into diagnosis. Invest there, including the unglamorous work of de-duplicating entities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decouple producers from the consumer with a durable queue.&lt;/strong&gt; Heterogeneous sources, one contract, one resilient buffer. It makes the system both robust and easy to extend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meet engineers where they already are.&lt;/strong&gt; The win wasn't a new tool; it was putting change &lt;em&gt;inside&lt;/em&gt; the tool people already open at 2 a.m., queryable in the language they already speak.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep collectors dumb and the contract strict.&lt;/strong&gt; Thin translators at the edges plus one well-defined envelope is what keeps a multi-source system from collapsing into special cases.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;We didn't make production change less risky — change is the job. What we changed is our &lt;em&gt;relationship&lt;/em&gt; to it. The next time a service goes red at 2 a.m., the first question is still "what changed?" — but now it's answered before the call has finished filling up, by a query instead of an investigation.&lt;/p&gt;

&lt;p&gt;That's the quiet superpower of change intelligence: it doesn't prevent the incident, it gives you back the hour you used to spend just figuring out where to look.&lt;/p&gt;

</description>
      <category>sre</category>
      <category>devops</category>
      <category>go</category>
      <category>aws</category>
    </item>
    <item>
      <title>Going Extreme With Extreme Programming</title>
      <dc:creator>Omar Reda</dc:creator>
      <pubDate>Sun, 21 Feb 2021 16:27:29 +0000</pubDate>
      <link>https://dev.to/omarreda/going-extreme-with-extreme-programming-1oi6</link>
      <guid>https://dev.to/omarreda/going-extreme-with-extreme-programming-1oi6</guid>
      <description>&lt;p&gt;In this article, we are going to discuss one of the software development agile methodologies which is Extreme Programming (XP).&lt;/p&gt;

&lt;p&gt;For those who don't know enough information about agile, you can check this quick introduction before proceeding with the article.&lt;/p&gt;

&lt;h2 id="agile"&gt;What is Agile? 🤔&lt;/h2&gt;

&lt;p&gt;The word ‘agile’ means&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Able to move your body quickly and easily.&lt;/li&gt;
&lt;li&gt;Able to think quickly and clearly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In business, ‘agile’ is used for describing ways of planning and doing work wherein it is understood that making changes as needed is an important part of the job. Business ‘agility’ means that a company is always in a position to take account of the market changes.&lt;/p&gt;

&lt;p&gt;In software development, the term ‘agile’ is adapted to mean ‘the ability to respond to changes from Requirements, Technology and People.’&lt;/p&gt;





&lt;h2&gt;Content&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Origins Of Extreme Programming&lt;/li&gt;
&lt;li&gt;What Is Extreme Programming ?&lt;/li&gt;
&lt;li&gt;When We Could Apply XP ?&lt;/li&gt;
&lt;li&gt;Values &amp;amp; Practices&lt;/li&gt;
&lt;li&gt;Extreme Programming Rules&lt;/li&gt;
&lt;li&gt;Roles In XP&lt;/li&gt;
&lt;/ul&gt;





&lt;h2 id="origins"&gt;Origins Of Extreme Programming 🗺&lt;/h2&gt;

&lt;p&gt;Extreme Programming (XP) was first used on the Chrysler Comprehensive Compensation Program (C3), which was initiated in the mid-'90s and switched to an XP project when Kent Beck was brought on to the project to improve the performance of the system.&lt;/p&gt;

&lt;p&gt;In October 1999, Kent Beck published Extreme Programming Explained, detailing the entire method for others, and shortly thereafter the official website was launched as well.&lt;/p&gt;





&lt;h2 id="what"&gt;What Is Extreme Programming ? 🧐&lt;/h2&gt;

&lt;p&gt;XP is a set of engineering practices. Developers have to go beyond their capabilities while performing these practices. That’s where the “extreme” in the framework’s title comes from. To get a better understanding of these practices, we’ll start with describing XP’s lifecycle and the roles engaged in the process.&lt;/p&gt;

&lt;p&gt;Similar to other Agile Methods of development, Extreme Programming aims to provide iterative and frequent small releases throughout the project, allowing both team members and customers to examine and review the project’s progress throughout the entire Software Development Life Cycle (SDLC).&lt;/p&gt;





&lt;h2 id="when"&gt;When We Could Apply XP ? 😯&lt;/h2&gt;

&lt;p&gt;The general characteristics where XP is appropriate were described by Don Wells.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dynamically changing software requirements.&lt;/li&gt;
&lt;li&gt;Risks caused by fixed time projects using new technology.&lt;/li&gt;
&lt;li&gt;Small, co-located extended development team&lt;/li&gt;
&lt;li&gt;The technology you are using allows for automated unit and functional tests.&lt;/li&gt;
&lt;/ul&gt;





&lt;h2 id="values"&gt;Values &amp;amp; Practices ⭐️🚀&lt;/h2&gt;

&lt;h3&gt;Values 🤝&lt;/h3&gt;

&lt;p&gt;The five values of XP are communication, simplicity, feedback, courage, and respect and are described in more detail below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgt1g38tzfovgqolwa58a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgt1g38tzfovgqolwa58a.jpg" alt="Alt Text" width="800" height="689"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Communication&lt;/strong&gt; Everyone on a team works jointly at every stage of the project.&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt; Developers strive to write simple code bringing more value to a product, as it saves time and effort.&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Feedback&lt;/strong&gt; Team members deliver software frequently, get feedback about it, and improve a product according to the new requirements.&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Courage&lt;/strong&gt; Programmers objectively evaluate their own results without making excuses and are always ready to respond to changes.&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Respect&lt;/strong&gt; Every person assigned to a project contributes to a common goal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Practices 🏋️‍♂️&lt;/h3&gt;

&lt;p&gt;The core of XP is the interconnected set of software development practices listed below. While it is possible to do these practices in isolation, many teams have found some practices reinforce the others and should be done in conjunction to fully eliminate the risks you often face in software development.&lt;/p&gt;

&lt;p&gt;The XP Practices have changed a bit since they were initially introduced. The original &lt;strong&gt;twelve&lt;/strong&gt; practices are listed below.&lt;/p&gt;

&lt;ol&gt;
&lt;strong&gt;
&lt;li&gt;The Planning Game&lt;/li&gt;
&lt;li&gt;Small Releases&lt;/li&gt;
&lt;li&gt;Metaphor&lt;/li&gt;
&lt;li&gt;Simple Design&lt;/li&gt;
&lt;li&gt;Test-Drived Development&lt;/li&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;li&gt;Pair Programming&lt;/li&gt;
&lt;li&gt;Collective Ownership&lt;/li&gt;
&lt;li&gt;Continuous Integration&lt;/li&gt;
&lt;li&gt;40-hour week&lt;/li&gt;
&lt;li&gt;On-site Customer&lt;/li&gt;
&lt;li&gt;Coding Standard&lt;/li&gt;
&lt;/strong&gt;
&lt;/ol&gt;

&lt;p&gt;I'm going to discuss some of these practices that are important to be understood.&lt;/p&gt;

&lt;h3&gt;Pair Programming 👨‍💻👩‍💻&lt;/h3&gt;

&lt;p&gt;This practice requires two programmers to work jointly on the same code. While the first developer focuses on writing, the other one reviews code, suggests improvements and fixes mistakes along the way. Such teamwork results in high-quality software and faster knowledge sharing but takes about 15 percent more time. In this regard, it’s more reasonable trying pair programming for long-term projects.&lt;/p&gt;

&lt;h3&gt;Test-Driven Development 🔍&lt;/h3&gt;

&lt;p&gt;Is it possible to write a clear code quickly? The answer is yes, according to XP practitioners. The quality of software derives from short development cycles that, in turn, allow for receiving frequent feedback. And valuable feedback comes from good testing. XP teams practice test-driven development technique (TDD) that entails writing an automated unit test before the code itself. According to this approach, every piece of code must pass the test to be released. So, software engineers thereby focus on writing code that can accomplish the needed function.&lt;/p&gt;

&lt;h3&gt;Code Refactoring 🛠&lt;/h3&gt;

&lt;p&gt;To deliver business value with well-designed software in every short iteration, XP teams also use refactoring. The goal of this technique is to continuously improve code. Refactoring is about removing redundancy, eliminating unnecessary functions, increasing code coherency, and at the same time decoupling elements. Keep your code clean and simple, so you can easily understand and modify it when required would be the advice of any XP team member.&lt;/p&gt;

&lt;h3&gt;Continuous Integration 🖇&lt;/h3&gt;

&lt;p&gt;Developers always keep the system fully integrated. XP teams take iterative development to another level because they commit code multiple times a day, which is also called continuous delivery. XP practitioners understand the importance of communication. Programmers discuss which parts of the code can be reused or shared. This way, they know exactly what functionality they need to develop. The policy of shared code helps eliminate integration problems. In addition, automated testing allows developers to detect and fix errors before deployment.&lt;/p&gt;





&lt;h2 id="loop"&gt;Extreme Programming Rules ♻️&lt;/h2&gt;

&lt;p&gt;Don Wells published the first XP rules in 1999 to counter claims that extreme programming doesn’t support activities that are necessary to software development, such as planning, managing, and designing. From planning to testing the software, follow these basic steps for each iteration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fad34tb34bj78e1ukqe45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fad34tb34bj78e1ukqe45.png" alt="Alt Text" width="800" height="769"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Planning 📉&lt;/h3&gt;

&lt;p&gt;The first stage is when the customer meets the development team and presents the requirements in the form of user stories to describe the desired result. The team then estimates the stories and creates a release plan broken down into iterations needed to cover the required functionality part after part. If one or more of the stories can’t be estimated, so-called spikes can be introduced which means that further research is needed.&lt;/p&gt;

&lt;h3&gt;Managing 👨‍🏫&lt;/h3&gt;

&lt;p&gt;At this stage, the project manager will set the team up to succeed in this methodology. Everyone needs to work collaboratively and effectively communicate to avoid any slipups. This stage involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating an open workspace for your team.&lt;/li&gt;
&lt;li&gt;Setting a sustainable pace (i.e. determining the right length for iterations).&lt;/li&gt;
&lt;li&gt;Scheduling a daily standup meeting.&lt;/li&gt;
&lt;li&gt;Measuring project velocity (the amount of work getting done on your project).&lt;/li&gt;
&lt;li&gt;Reassigning work to avoid bottlenecks or knowledge loss.&lt;/li&gt;
&lt;li&gt;Changing the rules if XP isn’t working perfectly for the team.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Designing 👨‍🎨&lt;/h3&gt;

&lt;p&gt;is actually a part of the planning process, but can be set apart to emphasize its importance. It’s related to one of the main XP values that we’ll discuss below — simplicity. A good design brings logic and structure to the system and allows to avoid unnecessary complexities and redundancies.&lt;/p&gt;

&lt;h3&gt;Coding 👨‍💻👩‍💻&lt;/h3&gt;

&lt;p&gt;Is the phase during which the actual code is created by implementing specific XP practices such as coding standards, pair programming, continuous integration, and collective code ownership (the entire list is described below).&lt;/p&gt;

&lt;h3&gt;Testing 💣&lt;/h3&gt;

&lt;p&gt;Is the core of extreme programming. It is the regular activity that involves both unit tests (automated testing to determine if the developed feature works properly) and acceptance tests (customer testing to verify that the overall system is created according to the initial requirements).&lt;/p&gt;





&lt;h2 id="roles"&gt;🧔👱‍♀️ Roles In XP 👨‍🦱👩‍🦰&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Customers are expected to be heavily engaged in the development process by creating user stories, providing continuous feedback, and making all the necessary business decisions related to the project.&lt;/li&gt;

&lt;li&gt;Programmers or developers are the team members that actually create the product. They are responsible for implementing user stories and conducting user tests (sometimes a separate Tester role is set apart). Since XP is usually associated with cross-functional teams, the skill set of such members can be different.&lt;/li&gt;

&lt;li&gt;Trackers or managers link customers and developers. It’s not a required role and can be performed by one of the developers. These people organize the meetups, regulate discussions, and keep track of important progress KPIs.&lt;/li&gt;

&lt;li&gt;Coaches can be included in the teams as mentors to help with understanding the XP practices. It’s usually an outside assistant or external consultant who is not involved in the development process, but has used XP before and so can help avoid mistakes.&lt;/li&gt;
&lt;/ol&gt;





&lt;p&gt;Agility principles are becoming increasingly popular as they prove their effectiveness. Even though extreme programming is not the most widespread methodology, it offers a lot of sensible practices that can benefit software development and are worth considering for implementation in your projects.&lt;/p&gt;

&lt;h3&gt;References&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.tutorialspoint.com/" rel="noopener noreferrer"&gt;Tutorials Point&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.lucidchart.com/" rel="noopener noreferrer"&gt;Lucidchart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.agilealliance.org/" rel="noopener noreferrer"&gt;Agile Alliance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.altexsoft.com/" rel="noopener noreferrer"&gt;Altexsoft&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;That's it, I hope this article was beneficial to you and you enjoyed reading it. Furthermore, feel free to contact me on email from here &lt;a href="mailto:omarreda5050@gmail.com"&gt;Gamil&lt;/a&gt; if you want to ask about anything, and you can find me on &lt;a href="https://www.linkedin.com/in/omarreda291/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://omarreda.github.io" rel="noopener noreferrer"&gt;My Website&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agile</category>
      <category>productivity</category>
      <category>workflow</category>
      <category>extremeprogramming</category>
    </item>
    <item>
      <title>Undergraduate experience in corporates and SMEs</title>
      <dc:creator>Omar Reda</dc:creator>
      <pubDate>Tue, 03 Nov 2020 22:34:27 +0000</pubDate>
      <link>https://dev.to/omarreda/student-experience-in-corporates-and-smes-cdb</link>
      <guid>https://dev.to/omarreda/student-experience-in-corporates-and-smes-cdb</guid>
      <description>&lt;p&gt;In this article, I will try to cover the experience you can get from joining a corporate or SME (small and medium-sized enterprises) company as an undergraduate software engineer, and the information provided in this article is based on my real personal experience in 3 different scale companies ... So let's get started.&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;Points of Comparison&lt;/strong&gt;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Environment&lt;/li&gt;
&lt;li&gt;Your Impact as Team Member&lt;/li&gt;
&lt;li&gt;Learning Curve&lt;/li&gt;
&lt;li&gt;Recognition&lt;/li&gt;
&lt;li&gt;Perks&lt;/li&gt;
&lt;li&gt;Income&lt;/li&gt;
&lt;li&gt;Tips &amp;amp; Advices&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="environment"&gt;&lt;strong&gt;Environment 🏘&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Corporate:&lt;/strong&gt; The first trivial thing about joining a corporate is the formal environment that meets the worldwide standards, from every aspect you will learn how to act in a formal way like sending and receiving formal emails, your outfit at work, the way you communicate with team members and managers, the fixed working hours, everything is organized and runs within the system of the company, also you will find a well-structured hierarchy for the company and a clear vision for your career path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SMEs:&lt;/strong&gt; The environment in SMEs is more friendly and more flexible than corporates, due to the small number of employees compared to a number of employees at corporates you can easily make many friends, in some SMEs the whole company could be friends and know each other, so you will surely find more flexible system than that of the corporates and that will make you act yourself more, and one more thing that is added as a bonus for working in SMEs is that you become more familiar with business and how it grows, and what are the market needs, and how to sell the company's idea or product to the customers.&lt;/p&gt;





&lt;h3 id="impact"&gt;&lt;strong&gt;Your Impact as Team Member 🚣🚣🚣‍♀️&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Corporate:&lt;/strong&gt; You will find yourself working by default on large scale projects that have an impact on society, you will work in a large team with different backgrounds and experience levels, and that will make you learn so much whether from technical or non-technical perspectives, and that's because employees in corporates always focus on getting promoted and reach higher levels in their career path, so they learn about many things and they take in their consideration the non-technical stuff especially the managerial content, as it will help them to manage and lead teams and get promoted faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SMEs:&lt;/strong&gt; You will work on different scale projects some of them are large ones and some are not, and you will have more time to learn on your own as the intensity of the work won't be like the intensity in corporates, and of course you will have a team with different backgrounds and experience levels, but won't be as large as the corporates teams, and the variety will be also less than that you can find in corporates teams.&lt;/p&gt;





&lt;h3 id="learning"&gt;&lt;strong&gt;Learning Curve 📈&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Corporate:&lt;/strong&gt; Your learning curve is affected mainly by 2 points the first one we previously mentioned above when we talked about experienced team members and the technical or non-technical information you will learn from them, the second point which is mainly found in corporates is the access you got to enroll in a huge amount of online courses whether provided by the company you work for or any other online courses provider, and you will find this point in most of the corporates once you get your company domain email you will get the access on many courses and e-books offered online.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SMEs:&lt;/strong&gt; Your learning curve is affected also by 2 points the first one is also the experience you got from working with the team members, and the second point is that you will search and learn about topics that you need at work if you aren't working in a company or within a team it will be difficult and confusing to select which topic should I learn about, and is that information is important or not, and this issue will be solved once you have a team you work with when you join a company which can provide you with guidance regarding what to learn about in order to finish your job and this guidance is very precious.&lt;/p&gt;

&lt;h4&gt;&lt;strong&gt;"ALWAYS KEEP YOUR LEARING CURVE RISING"&lt;/strong&gt;&lt;/h4&gt;





&lt;h3 id="recognition"&gt;&lt;strong&gt;Recognition 🏆&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Corporate:&lt;/strong&gt; Working in a famous corporation could turn out to be very useful for your future career opportunities. Let’s face it! It looks good on a resume! Brand recognition has a heavy weight on anyone’s resume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SMEs:&lt;/strong&gt; It’s a bit harder to get this kind of recognition with SMEs, but not impossible. Usually, when they hit an important milestone, they do not become recognized brands instantly. It might take years until people will get to acknowledge them and automatically identify their activities.&lt;/p&gt;





&lt;h2&gt;&lt;strong&gt;Now The Fun Part 🎮🎯&lt;/strong&gt;&lt;/h2&gt;





&lt;h3 id="perks"&gt;&lt;strong&gt;Perks ✨&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Corporate:&lt;/strong&gt; Working in a corporation will ensure you some more significant perks. You will get a life and social insurance, gym membership, transportation reimbursements and many other benefits. In fact, corporations have the tendency to design their hiring positions around these advantages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SMEs:&lt;/strong&gt; You will feel very relaxed within the atmosphere of SMEs, The employees also enjoy many perks like free food and drinks, and a play area to release the work tension and enjoy your free time and make new friendships with the company's employees from different departments.&lt;/p&gt;





&lt;h3 id="income"&gt;&lt;strong&gt;Income 💵&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Corporate:&lt;/strong&gt; All of the corporations have a standardized income that is brought to the average level of the market and sometimes higher. It may vary according to the market’s value and it can also go through some minor changes as you advance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SMEs:&lt;/strong&gt; The amount of resources is limited, so you cannot expect a high income. Moreover, sometimes it is going to be lower than the average income of the market, and also sometimes it is going to be very close to the average income of the market, and despite that it may sound a bit discouraging, but as an intern your main goal is not to get more money but to gain more knowledge, and as this knowledge increases the money will come definitely by time.&lt;/p&gt;





&lt;h2 id="tips"&gt;&lt;strong&gt;Small tips and advices to you as students&lt;/strong&gt;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;First,&lt;/strong&gt; try to get the most out of any experience you get in while you are a student whether you joined a corporation or SME company, because what will you learn will be very beneficial to you when you start searching for a job as a full-time employee.&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Second,&lt;/strong&gt; try to make as many relationships as you can with people at work because this could help you to get a job in the future if you have proven your competence, and this will happen by getting a recommendation after you graduate from college to join back the company you worked at as intern.&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Third,&lt;/strong&gt; I mentioned this before in the income section, but I want to mention it again, don't search for money at the early beginning of your life, first learn and gain more knowledge and improve your resume with quality experiences, and trust me money will come to you after that.&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Forth,&lt;/strong&gt; don't you ever stop learning, this career is about learning new things every day to keep up with the market changes, so the most valuable weapon in your career journey is the ability to learn.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;That's it, I hope this article was beneficial to you and you enjoyed reading it. Furthermore, feel free to contact me on email from here &lt;a href="mailto:omarreda5050@gmail.com"&gt;Gamil&lt;/a&gt; if you want to ask about anything, and you can find me on &lt;a href="https://www.linkedin.com/in/omarreda291/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://omarreda.github.io" rel="noopener noreferrer"&gt;My Website&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
