Sign in

Software Engineer living in the Bay Area

I have been working at Facebook as a software engineer for a while now. During this time, I have got different inquiries from friends and strangers alike on landing a senior engineering position at Facebook. This post will explain the process that could help you achieve your dream job at Facebook or any other FANG company. It will explain the steps I took before applying for a job at Facebook.

Disclaimer: This is the path I personally took before my Facebook interviews. Most of the materials I’m mentioning here are optional. I went through them because I wasn’t in a…


There is more to a startup than this cycle

I like startups. I love building things and moving fast. I love the experiment process and the feedback loop embedded in building a new product. For the past ten years, I have been involved in many startups. I have seen a couple of them succeed and the rest struggle. My role in them has varied but the experience has been quite similar. This has allowed me to see some emerging patterns.

We already know that 99% of startups fail, but the question is why? We have heard the standard rhetoric: bad timing, poor execution, wrong product, weak team, what else?


A lot of times we like to provide our users with some real-time features. Consider this simple scenario:

You are making an Instagram web clone.

People start following each other and when one publishes a photo, all people following that user will be notified and will see the photo in their browsers if they have it open. There won’t be any need for a hard reload of the page.

How should we implement that?

Websockets to our help! WebSockets represent a long-awaited evolution in client/server web technology. They allow a long-held single TCP socket connection to be established between the…


Recently, we went through a Webpack upgrade saga in one of the bigger production apps that I’ve been working on for the past couple of years. The project was relying on Webpack 1.14.0 and with Webpack 4 out, now it was a good time to show some love to the project and simplify things.

The goal was specifically to decrease the bundle size and utilize a better code splitting mechanism in the project.

Background

The subject app was created back in early 2015 as a Rails 4 project. Back in that time, Webpacker gem didn’t exist and Rails lacked built-in support…


Every other day I see a blog post on how to create a chat system using WebSockets or how to use the magic of Firebase to build a majestic one, although let’s be honest: Building a REAL customizable chat system is a whole different story.

Now, let’s consider a complicated use case:
we have a product consisting of two parts: 1) mobile app that our end users install and 2) a web dashboard. The dashboard is used by administrators to target a certain group of audience and send them messages. …


Ruby/Rails developers have had a controversial relationship with Javascript for the past years. True or false, Javascript was accused of being the holdback for web; we all know that this is not true anymore. The language has improved significantly over the past few years; partly due to advent of ES6.

Furthermore, the rivalry between Rails and Javascript doesn’t exist anymore. If you want to create ambitious web applications the only option is Javascript! Basically, there is no other choice.

This makes it possible for the two ecosystems to thrive next to each other. Javascript is great for frontend work; also…


We all like Vim. It has been around for a long time and it has helped us to increase our productivity. Linting is another essential tool we rely on our everyday life. It makes our code easier to understand and follow. That applies to new people joining our projects later on and also our future selves.

I use eslint for linting my Javascript/React apps.

Considering that you have eslint set up, it’s really easy to add linting support to the Vim.

Vim’s Syntastic plugin can be used to add eslint support to Vim

Syntastic is a a syntax checking plugin for Vim. It runs files against external syntax checkers and displays any…


Update: this document applies to Relay Classic. If you are using Relay Modern, please have a look at RelayJS website to find out updated instructions.

At ZeeMee we rely on the power of GraphQL and Relay. Our backend has been built on top of Ruby on Rails. One of the problems we came across recently was performing optimistic updates in Relay in an efficient way.

Relay does a lot of magic; although the magic doesn’t come out of nowhere: you need to be prepared for it! In other words, your GraphQL server needs to support it.

Let’s go through a…


I love Ruby. It’s the language that I feel most comfortable with. I almost use it every day to express my ideas. With Internet of Things at large, the question is why not use Ruby in embedded systems? That’s why we have mruby.

mruby is the lightweight implementation of the Ruby language complying to (part of) the ISO standard. Its syntax is Ruby 1.9 compatible.

Last month, I attended Fukuoka Ruby Night in downtown, San Jose. It was fun, I met Yukihiro Matsumoto aka Matz, had some nice conversations with him and heard bunch of cool stuff about mruby. …


When it comes to ruby version management tools the users have three options:

  • RVM which is the most established, but also the most intrusive in terms of shell modifications.
  • rbenv which is lower impact.
  • chruby which claims to be even lighter than rbenv.

After sticking to RVM for almost 5 years, I decided to give chruby a try and see how does it work. Personally, the problem that I have with RVM is that it mangles the shell environment as much. …

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