Debugging is the process of diagnosing why a software system fails to behave correctly. As with medical diagnostics, oftentimes finding the cause for illness is the hard part, while offering the treatment requires much less work; there can be many reasons why a patient is suffering from headaches, but once you realize they are constantly dehydrated, the cure is straight-forward (“please drink more water, sir.”).

Of course, the state of medical science is never complete. We still do not understand why many things happen; and for some of the things we do understand, there is no known cure. …


Containers make CI much more manageable: reproducible, isolated build environments that create portable and predictable deployment artifacts. Continuously delivering containers to production turns out to be quite a difficult problem which we call collectively container orchestration.

What do we need for continuous delivery? An automated and safe way of applying changes to our production environments. In the early days of containers, I once wrote a Node.js server that ssh’d into a host, updated a docker-compose manifest, and ran a restart command every time a new user signed up for service. …

A first dip into DIY static code analysis

Photo by Barn Images on Unsplash

One of the special things about software engineering as a profession is the possibility of ars-poetic work: part of our work is building tools that target our own work; perhaps a few surgeons around the globe can design and meld their own scalpel, but for software engineers building our own tooling is a day to day reality.

Recently, I’ve been working on migrating a large repository of code to be built with Bazel. To do this properly I had to generate well over a hundred different BUILD files. …

Photo by NeONBRAND on Unsplash

The DRY principle is probably the first software design concept you learn when you start coding. It sounds very serious and convincing, after all, it has an acronym! Furthermore, the idea of not repeating ourselves deeply resonates with the reason many of us enjoy programming computers: to liberate us from mind-numbing repetitious work. It is a concept that is very easy to grasp and explain (I still have to google Liskov substitution whenever I discuss SOLID design) and applying it usually gives that wonderful buzz your brain gets when it matches a pattern. What’s not to like?

Well, preventing repetition…

Apache Spark Logo, source: Wikimedia commons

Apache Spark provides a very convenient abstraction layer for building distributed applications that process massive amounts of data. It is one of the most useful and robust tools in the tool belt of any data engineering team, facilitating both the exploratory analysis of huge datasets, scheduled production batch processing applications as well as streaming and machine learning applications.

Instrumentation, the practice of providing summary statistics of quantitative aspects of a system, is critical to any serious software engineering endeavor. …

This tweet from Gwen Shapira is the origin story of this post

Here’s a common scenario, if you’re a cutting edge shop: you early-adopt new infrastructure technology, it is awesome and gives you new capabilities, but there’s no obvious way to integrate it with the rest of your workflows, so you home-brew a tool (read: shell script) to solve whatever it is that you need. As time goes by, you deal with edge-cases, squash bugs, More workflows are built that depend on it, you become technically invested in the tool you built.

Some more time goes by, the tool is…

A taco emoji + a beer emoji + a nerdface emoji, technex.
A taco emoji + a beer emoji + a nerdface emoji, technex.
When you let engineers design logos for internal meetups.

Introducing TechNex, Nexar’s internal R&D Meetup

One of the things I like doing most as part of my job at Nexar is hosting TechNex, our internal, bi-weekly R&D meetup. In this post, I want to tell a bit about it, why I put time and effort into running it and why you should consider starting an internal engineering meetup in your company.

What is TechNex

  • One hour, every two weeks. All our R&D staff meet after lunch in the amphitheater in our Tel-Aviv offices
  • Broadcasted and recorded in our videoconferencing system.

Service Taxonomies and Platform Level Metrics

It is today easier than ever to generate a lot of observability data (metrics, logs, and traces) from your applications and forward it to a central location where you can efficiently query it. However, systems can still get pretty hard to reason about. Having an abundance of application-specific data generated from your system does not guarantee that an on-call engineer or operator will know what queries will yield meaningful insight into the current system state.

This is why frameworks like Google’s “Four Golden Signals” or Weaveworks’ RED method were created: to reduce the cognitive load of humans trying to understand…

As your software-organization grows it becomes increasingly harder to coordinate work.

Let me try to illustrate this. Let’s say you are working on a new workflow that requires you to send push notifications to some clients of your mobile app. Another team is maintaining the OutboundMessagingService , a microservice written in Java that deals with all the messy details of sending push notifications to users on mobile platforms such as iOS and Android. You, being the solid software engineer that you are, want to re-use their good work, what do you do?

If you’re lucky, the team that published the…

Reading and writing TLV-encoded messages with Go

Recently, I’ve worked on implementing a high-throughput networking component at work. In an effort to conserve CPU time and reduce payload sizes, this service is using a binary encoding as the wire format. An attribute of the protocol we were implementing was that the messages could include optional fields of variable length. This, I learned, is not as simple as it sounds.

Adding an extra field to a message in text-based encoding, such as CSV or JSON, is quite trivial. …

Rotem Tamir

Platform Tech-lead at Nexar

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