Me · entertainment

Cultivating cultivating

My daughter finds the best shows to watch. She introduced me to the amazing Avatar series. More recently we’re watching Neon Genesis Evangelion, a post-apocalyptic anime series from the 1990’s. 🤩

One thing jumped out to me in episode 17. The cool guy Kaji, who seemed like just a shallow “player” type, introduced his friend Shinji to his secret watermelon garden.

It’s my hobby. Don’t tell anybody, okay?

Shinji was feeling down at the time, and Kaji was trying to lift him up.

It’s great to make something. To grow something. You notice things and figure stuff out. Things you enjoy, for example

Shinji was’t super receptive at the time, but I knew exactly what Kaji was talking about, having experimented with gardening some myself in my tiny urban plot.

There was the early attempt in the pandemic, then everything getting wiped out in the 2021 snowpocalypse. Hints of a natural rebirth, then actively clearing out the dead brush for new growth. This was followed by some small success at growing something you can eat, and then some wild growth this spring.

Right now I’m eating a few bell peppers, tomatoes, jalapeños, and strawberries from my tiny garden. The pesky birds and squirrels have caught on and are usually getting to the good stuff before I do. 😭

Still, I don’t mind feeding the wildlife. I just like to grow stuff. 🤷🏻‍♂️

Software Dev

The what, why, and how of the RIBs mobile architecture

Continuing my mobile architecture kick, let’s look next at RIBs. In this case, RIBs is not a delicious, slow-cooked entrée but rather a software architecture that Uber developed a few years ago.

Why RIBs?

RIBs lets Uber’s 200+ mobile developers knock out features quickly without stomping all over each other.

The original design worked well for the first three developers. (via Uber)

Back in 2016, the Uber team had just expanded from three mobile developers several hundred developers. And the app’s design did not scale well to that large of a team. From both a UX/design perspective and a technical perspective, it became difficult to add features. Citing “quite a few examples of, you know, pretty bad UI”, the design team bravely demanded a rewrite.

The design team came in and said, you know, ‘We probity have to redesign the whole application.’… Everybody was super concerned.

Classic engineering understatement

The Uber engineering team resisted the rewrite (which can be nightmare for a large app) for a year, but eventually came around to its necessity. So they defined a few goals for the new design (99.99% reliability, scaling to ~1000 developers, …) and experimented with that they knew – MVC, MVVM, MVP, and VIPER.

But nothing worked. 🤦🏻‍♂️

The problem is that all these architectures are based around the view, and if you base everything around the view, everybody has to integrate at one point, and that becomes a mess at the scale that we have.

The state tree solution

So they came up with a fresh idea, which was to model the whole app as a state tree. Much to their surprise, it worked really well. 🤷🏻‍♂️

We haven’t found an application that you couldn’t model with this very nicely.

A special architecture subteam spent six months reworking some “super ugly looking” core use cases and then turned the rest of the team loose on the new architecture.

Now we have RIBs and the modern Uber app.

Whoa! That looks too easy! (via Uber)

But how does it work?

A RIB is a combination of Router/Interactor/Builder (plus Presenter/View, but I guess “RIBPV” doesn’t sound very good). Each RIB represents a state of the app, which can have sub-states as children.

For example, the root of the tree has two children: logged-out and logged-in. Every RIB under logged-in can safely assume that the user is logged in, and it has an authenticated user token 🔑 to prove it.

RIBs can present themselves hierarchically on top of each other on the screen. Some RIBs just do background support don’t show themselves at all.

No auth token for you, left side. (via Uber)

For more…

Pretty cool, eh?

Okay, I’ll stop here since this is a conceptual overview (aka a teaser) and not a tutorial. ✋ For more details, see the original Uber presentation below or try it yourself.

Up next in the architectural series, we’ll attack The Composable Architecture, which is responsible for at least one cool game and, like RIBS, has a concrete implementation rather than just a bunch of vague ideas. 🙏