About
Living in the Bay Area, CA.
Married to Anat. Have three joyful young boys and one active dog.
Vegan.
Applied AI/ML Engineer.
Nowadays, I work at Apple in an applied AI team in SWE, where I'm a Principal ML Engineer and a Technical Lead.
Distributed Systems Researcher & Engineer.
I received my BSc (Software Engineering) in 2010 and Ph.D. (Distributed Systems) in 2017 from the Technion - Israel Institute of Technology. My Ph.D. advisor was Prof. Idit Keidar.
In my research, I focused on distributed systems, parallel computing, and correctness of concurrent algorithms. Here is an article (in Hebrew) about my wife and me after we finished our Ph.D.
After my Ph.D. I joined Apple, specifically to an applied distributed systems research team at Apple Cloud Services.
During my Ph.D., I interned twice at Google - the first time in the Storage Analytics group and the second time in Google Cloud. In addition, I was an intern at Yahoo! Research.
Before my Ph.D., I was a Software Engineer at Wanova, an Israeli startup company acquired by VMWare.
Facts
As of Oct 2024
Years Of Experience
Companies Affiliated
Publications
Happy Clients
(rounded, in billions)
Selected Publications
QuiCK: A Queuing System in CloudKit
SIGMOD, 2021
As part of my work in the ACS Applied Research Team, I was the TL of QuiCK - a queuing system built for managing asynchronous tasks in CloudKit, Apple's storage backend service.
It was a great experience working on QuiCK and bringing it from idea to production at scale.
See QuiCK's presentation here
FairLedger: A Fair Blockchain Protocol for Financial Institutions.
Best Paper Award
OPODIS, 2019
Working closely with Sasha (Alexander) on this was a fantastic journey. Back in the days when blockchain (i.e., a shared distributed history) was the fastest emerging topic in the neighborhood, we asked what it would take for selfish players to run such a protocol fairly.
Our answer was this work.
Composing Ordered Sequential Consistency
Inf. Process. Lett., 2017
While taking a small break to sleep while working hard on the proof for our "Modular Composition of Coordination Services" paper, I remember not letting go of thoughts about possible execution histories. Then, out of nowhere, I realized I could generalize two known correctness criteria under one definition (linearizability and sequential consistency) and prove the composition of that new abstraction.
It was a small win, but my favorite one in my Ph.D.
Slicer: Auto-Sharding for Datacenter Applications
OSDI, 2016
On my first internship at Google, I received a task to design a new load-balancing algorithm for Slicer - Google's internal Sharding-As-A-Service system, replacing an existing variant of consistent hashing in use.
We designed a generic algorithm that we named “Weighted Moves” - the idea was to evaluate a few types of small load changes iteratively (i.e., “moves”) with respect to a user-defined cost function and to make progress as long as there's an allowance for them.
Modular Composition of Coordination Services
USENIX ATC, 2016
I received this project during my internship at Yahoo! Research. The initial goal was to design and implement a way to work with multiple instances of ZooKeeper while maintaining the semantics.
I started by examining ZooKeeper and learning its internals. Then, we identified possible improvements in ZooKeeper's performance and contributed them to the project along with a system test that generates corresponding workloads.
For the construction of multiple instances, we proposed the modular composition approach, a client-side solution that I really liked.
See ZooNet presentation slides here