Skip to content
Moataz Mustapha

Case file

Cervello Cloud (IoT)

Cervello is an IoT platform for integrating, monitoring, automating and controlling devices and systems, sold not to end users but to integrators and software vendors, who use it to build vertical smart solutions for their own customers.

It already existed as an on-premises product, installed inside a customer's own data centre. My work was the cloud version: the same platform, multi-tenant, reachable from anywhere.

That sentence sounds like a hosting change. It isn't. Moving a single-customer installation to a shared platform breaks almost every assumption underneath it: who owns what, who can see what, who pays for what, and what happens when two people work in the same place at the same time. That is the design problem in this case file.

3 Chapter

My role

Individual contributor, from zero to delivery. I started this project alone and carried it through: research, information architecture, user flows, wireframes, interface design, the design system, and developer handoff.

A second designer joined later and worked on UI. None of his work is shown here; everything in this case file is mine.

Chapter 01· On-Premises to Cloud

Take a platform that lives inside one customer's data centre and make it a shared, multi-tenant product anyone can sign up for, without breaking the structure the existing product already depends on.

On-premises software runs on the customer's own hardware, inside their own building. That single fact decides almost everything about how it behaves. There is no sign-up, because there is no stranger. Someone bought the software and installed it; everyone using it already belongs. There is no trial, because you can't try a thing you have to install. There is no billing inside the product, because the money was handled by a contract before anyone opened a screen. And there is no real question about who can see what, because everyone in the building works for the same company. Moving to the cloud removes all of those assumptions at once. The design problem was never "put it on a server." It was: who is this person, what may they see, and who pays for what they use. And one constraint made it harder: the existing structure had to survive. Customers already running Cervello on-premises knew how it was organised. A cloud version that reorganised everything would have been a different product wearing the same name.

Decision

A trial, and an instance you own

The unit of the cloud product became the instance, a customer's own space, reached by a subdomain they name themselves, so they log straight into their own environment rather than a generic front door. And it comes with a 14-day trial. That single decision is what opens the product to a market that previously had to commit before seeing anything. The ownership rule underneath it is deliberate: you may join many instances, but you may own only one. This is the rule that makes everything else tractable. Joining is how you work in other people's spaces: an integrator's engineer working inside a client's environment. Owning is what you pay for. Keeping ownership singular means billing, resource limits and the trial all attach to something unambiguous. A person arriving with an invitation link is routed to choose which instance they're entering; a person with none is setting up their own. And the first setup is automatic. Creating an instance also creates the first organisation, the first team, and gets the user working in seconds, rather than making a new user assemble an empty hierarchy before they can do anything at all. The structure exists because the product needs it; the user shouldn't have to build it by hand just to begin.

Decision

A sign-up that refuses to confirm who exists

Sign-up is by email with a verification link. What matters is what happens when the email is already registered. The ordinary behaviour, this email is already in use, is a small convenience and a real vulnerability. It confirms to anyone who asks that a specific person holds an account on this platform. Ask it repeatedly and you have a list of confirmed targets. So the product doesn't answer. The flow looks identical either way. If the address is already registered, a security notice goes to its owner instead: someone attempted to sign up with your email. They can ignore it, or change their password. Preventing account enumeration is a standard security practice. What's worth noting is that it was designed into an ordinary sign-up screen on a platform that eventually controls physical infrastructure, where knowing who operates a system is itself useful to an attacker. A related decision: the profile screen after sign-up is skippable. Not every field belongs at the door. What's missing gets requested later, in context, while the user is already working, including region, which matters more than it looks, because time zone determines how alarm and event timestamps read.

Decision

Reselling, without a rebuild each time

An integrator builds a smart-parking solution once and sells it to four cities. On-premises, that was four installations. Buy the platform, set it up inside the customer's own building, then rebuild the solution on top of it. The solution stayed where it was installed, the way an open-source project becomes one application on one desktop and never leaves it. The answer everyone wanted was a marketplace. The product manager proposed it, it went to the development team, and it came back too large to build in the time there was. What shipped instead was smaller and did the same work. Duplicate, then transfer. Where the copy is made is the whole of it. The customer creates their own account, opens the instance link, and takes a copy, so it is theirs from the first second. The integrator's engineers then join that instance to add the integration and whatever that customer's site needs. Nobody hands ownership over after the fact, because ownership never sat in the wrong place to begin with. That is what keeps the rule above it intact. You own one instance, and you join many. Billing, resource limits and the trial stay attached to something with a single owner, and a resale stops being a rebuild. The marketplace still had not been built when I left.

Result · The cloud version shipped, and runs in production in several countries including Spain and Egypt. What the work demonstrably produced: a platform a stranger can enter, evaluate for two weeks, and pay for, with an ownership model clear enough to carry billing, and a sign-up that declines to leak its own user list. Next chapter: The Permission Architecture, four nested layers, and the question of who may see whom.

Read more
Chapter 02· Permission Architecture

Build a structure that lets an integrator manage many clients, many teams and many projects inside one platform, while making sure nobody sees anything they shouldn't, and everybody can find the people they need to work with.

Cervello's customers are integrators and software vendors. They don't use the platform to run one building. They use it to build and operate solutions for their own clients, several at a time. So a single customer of Cervello might be running a smart-parking solution for one city, a facility-monitoring solution for a shopping group, and a pilot for a prospect, all at once. Different teams. Different clients. Different people who must not see each other's work. And the buyer is often not the user. The person who signs the contract isn't the engineer configuring devices at 2am. A structure that assumes one account holder with full sight of everything doesn't describe this business at all. This is the part of the project I took most seriously, and the reason is simple: architecture is the one decision you can't undo later. A wrong structure can't be patched by redesigning screens on top of it. Changing it later means moving every user's mental model at once. So it was worth spending the time to get right, and worth covering the awkward cases before building anything on top.

Decision

Four nested layers

What I found was flat. Devices sat inside an organisation, and that was the whole of it. Neither one was called a layer. The team already knew what a developer building on top would need. A device inside a device. A device wired to another device. What they could not see was how to express it. The architecture engineer had the concept and could write the code, but every noun in his vocabulary was a thing or a sensor, and neither word tells you what is allowed to contain what. That is not a vocabulary a business person can use, and it is not one anybody outside IoT can use either. I took the two dimensions and made them three. Instance → Organisation → Team → Project. The organisation was already there. I added the instance above it and the team inside it, and underneath all of it a way to group devices that did not exist at all. Each layer answers a different question: Every layer has a landing view of its own, showing what is current at that level: recent projects, teams, and members ordered by activity. The structure is only useful if each level answers "what's happening here?" without making someone climb up or down to find out. A team's view lists its projects, sortable by name, activity or device capacity, and a second tab lists its members, so access and activity are managed in the same place as the work rather than in a separate admin console.

Decision

The visibility problem, stated plainly

One of the sharpest problems from research came out of the mouth of an administrator: That's the real difficulty with nested permissions. Restriction is easy to build and easy to over-build. Lock everything down and the structure becomes a cage: people can't perform the job their role exists to perform. So membership visibility is scoped to the layer you're responsible for. An instance's full member list is visible only to the instance owner or admin. @@MOVED@@ An organisation's members are visible at organisation level. A team's members are visible in the team. Each administrator sees exactly the population they are allowed to act on: no more, and crucially no less. And a member profile shows that person across the instance: the teams and projects they participate in, and their recent activity. This is what solves the collision problem. Several people working in the same space with no way to know who did what. Activity isn't a log buried in settings; it's attached to the person and to the layer.

Decision

Assets, and two kinds of relationship

Beneath the permission structure sits a second structure, for the physical world. When I arrived there were only devices. The word was the first problem. This is the Internet of Things, and a thing is not always one object. A sensor that can send and receive on its own is a device, and it is the end of the line. Plenty of sensors cannot talk at all. They read, or they record, and something else has to carry them to the platform. That something else holds others underneath it, and calling it a device says the opposite of what it is. So the model got assets. A device is the sensor that speaks for itself. An asset is the node that carries the ones that cannot. A smart bulb makes it concrete. Some bulbs have the radio inside the bulb. Others have it in the holder, so any bulb you screw in starts reporting. The difference shows up when something fails: if the radio is in the bulb, a dead bulb takes the reporting with it. And the hierarchy has two link types: belongs and relates. Belongs inherits. Relates is a sibling. Street lighting is the clearest case I had. A post carries a morning lamp and an evening lamp, and both of them belong to the post. Post one and post two switch on together, so they relate. Every post on the street may sit under one controller, and that controller is an asset. Nesting is free in every direction: a device beside an asset, an asset beside an asset, a device beside a device. A single parent-child model would have forced users to lie about their own infrastructure to fit the shape the software expected, and the developer would have gone and built a workaround. A platform that means to carry every vertical built on top of it cannot make that the developer's problem. The same principle carries into monitoring: alarms and events are shown by location on a map, with severity, grouped by vertical module, because the question an operator asks is never "which device number failed," it's "what's wrong, where, and how bad."

Result · The structure shipped and is what the platform runs on today in production. Five years on it is still the model, and the shape of it is mine. What can be claimed is the architecture itself: four nested layers with scoped visibility at each, an activity model that answers who-did-what inside a shared space, and an asset hierarchy that admits infrastructure doesn't always form a clean tree. Next chapter: Method, the principles, the design system, and the Feature Catalogue.

Read more
Cervello Cloud (IoT)