<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Mohamed Sweelam's Blog]]></title><description><![CDATA[Blogs in tech related topics]]></description><link>https://blog.msweelam.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/69e12ea8ffbb787634ea29f2/1d244476-9fed-4a04-9673-49f3ad9ffb0f.jpg</url><title>Mohamed Sweelam&apos;s Blog</title><link>https://blog.msweelam.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 12:42:22 GMT</lastBuildDate><atom:link href="https://blog.msweelam.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[The Evil Face of Microservices]]></title><description><![CDATA[It is almost 12 years since the word “Microservices” reached the earth, an architecture that everyone loves, and decided to build it claiming it is the magician that will solve all the issues.
I will ]]></description><link>https://blog.msweelam.dev/the-evil-face-of-microservices</link><guid isPermaLink="true">https://blog.msweelam.dev/the-evil-face-of-microservices</guid><dc:creator><![CDATA[Mohamed Sweelam]]></dc:creator><pubDate>Fri, 17 Apr 2026 09:46:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69e12ea8ffbb787634ea29f2/ffc36bb6-9b1e-4754-b23e-f88867cf3270.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It is almost 12 years since the word “<a href="https://en.wikipedia.org/wiki/Microservices">Microservices</a>” reached the earth, an architecture that everyone loves, and decided to build it claiming it is the magician that will solve all the issues.</p>
<p>I will not go and mention even what is microservices. zillions of tutorials, blogs, and articles are available on the internet, and if you don’t know them, it is time to read about them, today I come to save your life! kidding.</p>
<p>Assuming you want to build an e-commerce system, and you decided to follow Microservices architecture, you looked around and found most of the e-commerce systems have common actors, customer, order, and payment which you decided to handle them using three microservices.</p>
<h2><strong>Start Small, Start Simple</strong></h2>
<p>Back to system design-101 class, you remind yourself to start with High-Level Design “HLD”, and this is what you started with; a couple of simple components to go with.</p>
<ul>
<li><p>Application Load Balancer <strong>ALB.</strong></p>
</li>
<li><p>Kubernetes <strong>k8s</strong> service and multi-pods**.**</p>
</li>
<li><p>Databases that can support your traffic.</p>
</li>
</ul>
<img src="https://cdn.hashnode.com/uploads/covers/69e12ea8ffbb787634ea29f2/3560c651-4b10-4d06-b8cb-d51d91928c93.png" alt="" style="display:block;margin:0 auto" />

<p>Very easy, right? not that much, you have to follow the recommended pattern “Every microservice has its own DB”, but, let's deploy to production and see! a few months later you started to notice something, we don’t have a good mechanism that allows us to communicate with our customers and provide them with an accurate report if needed “Reporting”</p>
<p>You again looked around and found there is a known tech stack used for a such use case, it is called Elastic-Logstash-Kibana or <strong>ELK,</strong> you started immediately to acquire it to be part of your system, and voila; you are happy again.</p>
<p>A few months later, traffic increased and you found your database layer become a bottleneck, and can’t handle (even with scaling) huge traffic, so you decided to build a <strong>caching layer</strong> to massage your database layer, and this is the first upgrade.</p>
<h2><strong>Introducing Caching</strong></h2>
<img src="https://cdn.hashnode.com/uploads/covers/69e12ea8ffbb787634ea29f2/3d632deb-924d-49a5-9e51-9804129a77c5.png" alt="" style="display:block;margin:0 auto" />

<p><em>Although you introduced a new component “Redis Cache” that added operation load to manage</em>, The system becomes much better and can survive for some time, as usual, happy life will not last, you noticed your system still facing performance issues, spent some days troubleshooting and discovered the issue is the API request received, processed, and the response sent back in a <strong>blocking fashion</strong>.</p>
<h2><strong>Introducing Messaging</strong></h2>
<p>You decided to enhance the flow by making part of it be processed asynchronously, that way system doesn’t need to wait until the whole process is complete in a blocking fashion.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69e12ea8ffbb787634ea29f2/a43d83cb-c18d-4759-89bf-872da85cc79d.png" alt="" style="display:block;margin:0 auto" />

<p><em>Again, Although you introduced a new component “RabbitMQ or Kafka” that added operation load to manage,</em> the system becomes faster and more scalable, new desired advantages, right? but with a cost!</p>
<p>Such a design can handle huge loads using reasonable infrastructure sizing, and by utilizing K8s, the system is fault-tolerant and resilient.</p>
<h2><strong>What happened?</strong></h2>
<p>Like any software, the system will grow from time to time, and this will require building new microservices to handle new and different use cases, this growth will push you to a new issue, <strong>traceability!</strong></p>
<p><strong>At any point in time, you will need to know, what happened exactly in your system? which system start the request or send the event? and what causes the system to fail in the middle. in other words; you want to watch the history of any journey.</strong></p>
<h2><strong>Introducing Traceability and Observability</strong></h2>
<p>Microservices represent distributed systems, so you will need to build a “<a href="https://microservices.io/patterns/observability/distributed-tracing.html"><strong>Distributed Tracing</strong></a>” mechanism in order to answer previous questions, you studied the pattern and decided to “again” introduce a new component that will handle such tracing for you, and you decided to use <a href="https://www.jaegertracing.io/"><strong>Jaeger</strong></a></p>
<p>Is it the only thing you need to have to answer? No, maybe the failure was from an Infra component, maybe your system Memory size limit was reached, maybe CPUs issue, maybe others, so you did your search and found that you also need two other components that can track, and allow you to troubleshoot the system; <a href="https://grafana.com/">Grafana</a> and <a href="https://prometheus.io/">Prometheus</a>, or <strong>Observability</strong>.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69e12ea8ffbb787634ea29f2/64405139-11f3-4c10-b0b5-e60d24065969.png" alt="" style="display:block;margin:0 auto" />

<p>Your system is much more robust now, you become happy, but with a cost, right? this is a quick snapshot of microservices and what you really need to know before going with this architecture.</p>
<h2><strong>Conclusion</strong></h2>
<p>Although microservices are a great architecture and have lots of added value, they don’t come for free! operation cost can be a big problem in your business, a couple of different expertise are also required, It is worth mentioning also that the mentioned technologies and tools are not the only available in the market, however, just examples to demonstrate the idea, and the pain you might face.</p>
]]></content:encoded></item><item><title><![CDATA[The Promotion Trap]]></title><description><![CDATA[Ahmed is a skilled senior employee who consistently solves business problems in a notable way. His manager trusts that, no matter the problem, Ahmed will find an effective approach to tackling it. Ahm]]></description><link>https://blog.msweelam.dev/the-promotion-trap</link><guid isPermaLink="true">https://blog.msweelam.dev/the-promotion-trap</guid><dc:creator><![CDATA[Mohamed Sweelam]]></dc:creator><pubDate>Fri, 17 Apr 2026 07:12:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69e12ea8ffbb787634ea29f2/9e785999-9448-4d4a-b8c4-4201244019a5.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ahmed is a skilled senior employee who consistently solves business problems in a notable way. His manager trusts that, no matter the problem, Ahmed will find an effective approach to tackling it. Ahmed has been working as a senior employee for a couple of years now, and during that time he has built a great skill set. He has faced many known and unknown issues, all of which he was able to solve. His team trusts him and is confident that as long as Ahmed is part of the discussion, they are in good hands.</p>
<p>Ahmed is also a force multiplier for his team. He supports them proactively and helps them grow. Over time, he has shaped his team through his exceptional expertise. His manager observed that Ahmed deserves a promotion, and when beginning discussions with senior leadership, they recommended Ahmed for a managerial role.</p>
<p>Ahmed’s manager was happy to inform him about the promotion offer. Surprisingly, Ahmed was not pleased with the news. He told his manager that he was not interested in the managerial track and was much more interested in an individual contributor (IC) role. After a couple of meetings, the manager pressured Ahmed to take on the managerial role; Ahmed found himself forced to accept, and he ultimately did so.</p>
<p>After a couple of months, the manager came to Ahmed and told him that he had failed in many aspects and needed to work on leveling up those areas. Ahmed tried for a couple more months, but he was stressed, spending a great deal of time on problems—trying to understand them and find proper ways to deal with them. Again, after a few months, the manager came to Ahmed and told him that: "<em>he had failed to prove himself, and the first-year data signaled that Ahmed was a bad manager</em>"</p>
<p>This quick story is a common problem that lots of employees experience today. Companies that don't help employees move the right place always lose a skilled employee. In fact, losing someone like Ahmed may be compensated with 3 or 4 employees, and they may not provide what Ahmed was providing!</p>
<img src="https://cdn.hashnode.com/uploads/covers/69e12ea8ffbb787634ea29f2/29669252-0906-425f-abc2-ef6596c1db72.png" alt="" style="display:block;margin:0 auto" />

<h3><strong>Three Types of Employees (All Seek Promotions)</strong></h3>
<p>Real life reveals three types of employees—all of whom seek promotion, but each with a different objective:</p>
<ul>
<li><p><strong>Title Seeker:</strong> An employee who pursues a better title and position, wanting to prove to themselves that they are good, even when reality suggests otherwise.</p>
</li>
<li><p><strong>Challenge Seeker:</strong> An employee who loves challenges and finds meaning in tackling them, enjoying life through this path.</p>
</li>
<li><p><strong>Money Seeker:</strong> An employee who prioritizes financial gain (the most common type), regardless of whether they deserve the promotion or are ready to handle next-level problems.</p>
</li>
</ul>
<blockquote>
<p>Companies should carefully understand each type of these employees</p>
</blockquote>
<p>Organizations need to understand these types in order to deal properly with each employee based on their segment. For example:</p>
<ul>
<li><p>A <strong>challenge seeker</strong> is good for productivity and product quality. The company can help them improve further, perhaps by encouraging them to develop soft skills as well.</p>
</li>
<li><p>A <strong>title seeker</strong> may appear to be something else beneath the surface; the organization’s role is to reshape this mentality and ensure they also have—or build—leadership skills.</p>
</li>
<li><p>A <strong>money seeker</strong> is primarily motivated by financial rewards. The organization’s role is to ensure that compensation aligns with actual performance and readiness for greater responsibility—helping them connect monetary growth with meaningful skill development and long-term career progression.</p>
</li>
</ul>
<p><strong>Building a Supportive Promotion Framework</strong></p>
<p>Humans don’t like repetitive routine work; they love variety. Encouraging employees with recognition programs and activities is one way of building a healthier environment. But at the same time, sharing a clear, well-defined framework for promotion is definitely more helpful.</p>
<ul>
<li><p>Support employees in the career path they want. This starts by checking which path the employee wishes to pursue—managerial or IC. Share clear expectations, likely based on competency factors, and propose a timeline plan to track and measure progress.</p>
</li>
<li><p>Although people do their best when they are interested in what they do, some still don’t truly know what they should pursue. A good manager should help team members decide what they really need to choose.</p>
</li>
<li><p>Don’t let employees keep trying alone without support. Good companies build great people who deserve to move to the next level—not challenge their employees to prove they deserve to move.</p>
</li>
<li><p>Avoid surprise evaluation results. Hold frequent follow-up meetings—perhaps every quarter—to review and evaluate progress, and advise employees on what they need to enhance or possibly avoid.</p>
</li>
<li><p>Be transparent with employees about any organizational restrictions or policies that may hinder their expectations.</p>
</li>
</ul>
<p>At some point, the manager will need to propose the case for promotion, and the result should be communicated to the employee. Ultimately, if the previous steps were taken and handled efficiently, good news should be shared with the employee. If the employee fell short in some areas, they won’t feel nervous or sad, but rather ready to work on the feedback and address the points that need improvement.</p>
<blockquote>
<p>Remember, creating more managers than necessary often means losing skilled employees who end up working in the wrong role.</p>
</blockquote>
<h3><strong>When an Employee Declines a Promotion</strong></h3>
<p>Companies should also be mindful of promotion offer rejection. If an employee doesn’t see themselves as fit for a specific role, they should have the freedom to decline it with reasonable justification. The organization should remain open to this situation and, nevertheless, recognize the employee through other means—such as a salary increase or something similar. At the same time, it should try to understand the employee’s interests and career vision.</p>
<img src="https://cdn.hashnode.com/uploads/covers/69e12ea8ffbb787634ea29f2/6fc5ad90-782b-4ced-a03c-52c5c9704cc5.png" alt="" style="display:block;margin:0 auto" />

<h3><strong>Conclusion</strong></h3>
<p>Great environment shapes teams by promoting employees to the right positions according to their qualifications. This decision requires, first and foremost, the right tools that track accurate data signals about each employee’s contributions.</p>
]]></content:encoded></item></channel></rss>