We have the tendency to make assumptions about everything.

The problem with making assumptions is that we believe they are the truth. We make assumptions about what others are doing or thinking — we take it personally — then we blame them and react by sending emotional poison with our word. […] and we end up creating a whole big drama for nothing.

We literally dream things up in our imaginations. …


What they say, what they do, and the opinions they give are according to the agreements they have in their own minds. You eat all their emotional garbage, and now it becomes your garbage.

When you take things personally, then you feel offended, and your reaction is to defend your beliefs and create conflicts. You make something big out of something so little, because you have the need to be right and make everybody else wrong. You also try hard to be right by giving them your own opinions.

Even the opinions you have about yourself are not necessarily true…


The word is not just a sound or a written symbol. The word is a force; it is the power you have to express and communicate, to think, and thereby to create the events in your life.

Seeing the awesome power of the word, we must understand what power comes out of our mouths. One fear or doubt planted in our mind can create an endless drama of events. […] Your word can create the most beautiful dream, or your word can destroy everything around you.

Mostly we use the word to spread our personal poison — to express anger…

The TextNow app has a number of premium features that make the user experience more engaging, allowing users to do something above and beyond the default app experience, such as: removing ads, getting a premium number, locking-in a number, getting a more comprehensive caller ID, voicemail transcriptions, international calling, and more!

We have 4+ different subscriptions, and each defines a set of features applied for a defined period of time. We keep each set of features as relevant and small as possible so users don’t have to pay for features they don’t want. We also have consumable products such as…

Inspired by AWS DynamoDB

The classic consistent hashing algorithm addresses the issues with the modular hashing algorithm, where the hash function (position of key K) is tied to the number of the storage units, requiring a redistribution of all the keys on scale-ups and downs.

# modular hashing
hash = key % N of nodes

With consistent hashing, on the other hand, the hashing function is independent of the number of storage nodes. This allows us to dynamically partition the data as we add or remove nodes, and hence, scale incrementally.

The hash space is kept huge and constant. It is often referred to…

The one-time yet critical task


As we aim to move away from old systems, we stumble upon a one-time task to copy over all the data to the new datastore and cutover to the new system without causing any corruption, data loss, or downtime.

We then quickly examine different approaches, squeezing our heads trying to land on an ideal method.

Wouldn’t it be nice if we can have the most common migration strategies laid down, briefly explained, with some diagrams, and used as a starting point?.

The migration approaches explained below start with the most simple, moving towards more involved but more robust in a…

At TextNow we serve more than 15M active users per month, with millions of calls and messages flooding in and out each day. Users rely on our application to connect and communicate using a technology that is free or as close to free as possible.

Over the last two years, we have grown rapidly, and in turn, our infrastructure needed to accommodate that growth. To do that, we started transitioning our monolithic application — chopping it into small, manageable, independent pieces. …

Going to the moon 🌑

Someone is fishing starts on the moon — source.

Over the last three years, I traveled and worked in several countries. From India in Asia, Turkey kinda in the Middle, all the way to Canada in North America. The diversity and the contrast between these cultures, and the experiences and skills that I have accumulated made my skin thicker, and they were far beyond what I thought it would be. They have changed who I am, or at least who I think I am: My thoughts. That’s another way of saying, a drastic change.

The world is a book and those who do not travel read only a page…

and the story of the data pipeline framework

Plug-in Architecture

This is one of the things that we probably use and interact with on a daily basis but seldom do we realize its existence.

Not only does it exist in product-based applications such as Eclipse (IDE) or any browser where it can be customized by adding plugins and extensions, but it also exists in business-based applications where business rules and data processing logic vary according to, say, a country such as in insurance claim and taxes applications.

The underlying idea is simple. Being able to plugin features to an existing component without this component having to know about the implementation…

Store →Process →Consume

A Pipeline (Store →Process →Consume)

Most of the data processing applications look like a pipeline. A pipeline is a flow, a pipe-and-filter architecture, where data gets stored, processed and finally consumed. These are the three main stages of a pipeline.

One of the key designs here is that each stage should be independent of the other stages. For example, the place where the data gets stored is independent of who is processing it. Similarly, whoever is processing the data doesn’t need to know who is going to consume it.

Another characteristic is that at any given point we should be able to replace an existing…

Omar Elgabry

Software Engineer. Going to the moon 🌑. When I die, turn my blog into a story.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store