Cases

What is already running in production.

Two platforms that have gone years without being able to stop, the channel through which one of them receives reports from residents, and the dashboards that measure that activity. Each case with what was there at the start, what we did and what stayed.

SmartCities

The urban platform, change by change

We support the development of the core of Mejora tu Ciudad: the tests every change goes in with and the background work inside the platform itself.

  • 5+ years

    Continuous relationship

  • Tests

    Every change brings its own

  • No third parties

    The background work

  • Configuration

    Onboarding a new council

An urban platform grows by accumulation: every municipal department asks for its module and every regulation adds a requirement. The challenge was not building an application, it was taking charge of a living product that cannot stop.

On its core we built the test base every change goes in with today, made sure the data arrives complete from end to end, brought the background work inside the platform and left onboarding a new council down to configuration.

PHP / SymfonyRabbitMQElasticsearchMongoDB

Citizen services · SmartCities

The citizen report, in a conversation

We support the development of the conversational channel of Mejora tu Ciudad, where a resident reports a problem in the street and follows how it gets resolved without leaving the conversation.

  • No account

    Reporting asks for no registration: that stays for the options that require it

  • To each report

    The flow asks only what each type of report needs

  • Location validated

    The report arrives with the place checked, not described

  • Per session

    Each session starts clean and continuous use keeps it alive

A citizen report starts the moment someone sees a street light out. The conversational channel takes that message and turns it into a report a council technician can act on: with the place checked, with the photograph inside it and with no questions that do not apply.

The flow adapts to each type of report and asks only what applies, validates the location and takes in the photograph; after that, the council's comments on the case and its announcements are read and answered in the same thread.

Python

Analytics · SmartCities

The city's reports, in dashboards

We support the development of the dashboards that measure Mejora tu Ciudad's reports: they give the same figure as the platform for every status and every service.

  • They match

    The same figure on the dashboard and on the platform

  • Every day

    The load comes in fast and steady

  • More breakdown

    The dashboards go down to the detail being asked for

  • Training

    A path for the team to build their own

A dashboard is worth what the figure it shows is worth. When the dashboard and the platform do not give the same number for the same status, the conversation is spent working out which of the two is right, and the dashboard stops being opened.

On the dashboards that measure the reports of Mejora tu Ciudad we extended the breakdowns to the detail each team was asking for, matched the figure against the platform service by service, strengthened the daily load and put in writing the path for more people on the team to build their own.

PythonPostgreSQLETLMetabase

Infrastructure · SmartCities

The infrastructure, changing from the inside

We support the infrastructure Mejora tu Ciudad runs on: the environments, the daily backup, the monitoring and the access, with every migration going in without stopping the service.

  • Live

    Every migration goes in with the service running

  • Daily backup

    Held off the servers that produce it

  • Opens itself

    The follow-up task the monitoring opens

  • One way in

    One identity to get into the municipal systems

Behind every online procedure, every municipal map and every appointment there is a layer nobody sees: the servers the platform runs on, the databases where the data lives and the access each team comes in through. Holding it up means keeping it available while it changes completely inside.

On that layer we built the environments, automated the daily backup off the servers that produce it, set up the monitoring that opens the follow-up task by itself and ran the migrations —the internal messaging, the databases, the search engine— with the service running.

KubernetesDockerLinuxPostgreSQLPostGISOAuth2LDAP

Web client · SmartCities

The web client, with the app in use

We support the development of the web client of Mejora tu Ciudad: the engine that draws the reporting map moved up a version with the app in use, and the rules for every form live in one place.

  • In use

    The map engine moved up a version with the app running

  • Reused

    What is solved in one view serves the rest

  • In one place

    The rules every form is checked against

Renewing a web client someone is using at that very moment asks for a different discipline: every change is tested against an open screen with data inside it, not against an empty environment. What changed was the base it is built on, with the app in use the whole time.

We took the engine that draws the reporting map to a new version, organised the component system the views are built with so that the same piece serves several, and left in one place the rules every form is checked against.

AngularTypeScriptLeafletRxJS

Healthcare

The electronic health record, on a phone

We support the development of Casiopea Mobility, the app clinicians across the Quirónsalud hospital group use to read and record the health record while they are with a patient.

  • iOS and Android

    What goes into one platform goes into the other

  • In the architecture

    The mandatory validations, not screen by screen

  • Non-stop

    Modernised without pausing releases

  • On what was done

    The new modules went in without touching the stable code

The app worked and was already rolled out, which is exactly what makes it hard to touch: any interruption reached clinicians who were reading a health record in the middle of seeing a patient.

Both native clients were modernised with the app in production the whole time, and on that base complete modules went in without rewriting what already worked. In a health record a half-finished entry is wrong clinical data, so the validations live in the architecture and not screen by screen.

KotlinSwiftJava

Where do we start?

Two ways to begin, depending on what you have in front of you today. Answered within one working day.

Talk to us