Final Presentation and Review

You have built a complete system. It works, it is tested, it is measured and it costs what you said it would cost.

And now comes the part that almost nobody prepares and that decides half the outcome: telling the story.

This is not decoration or an academic formality. It is an observation repeated in every technical hiring process: of two candidates with equivalent projects, the one who can explain in three minutes why they chose Cloud Run instead of GKE, how much it costs per month and what happens when the database goes down gets the job; the one who shows a URL and says "it is built with Google Cloud" does not. The technical work is the same. The difference is that one of the two did the work of communicating it.

There is a structural reason for this. In any organisation, technical decisions are taken by people who have not built the system: a manager who decides the budget, a colleague who is going to maintain it, an interviewer who has forty minutes. If your work exists only in your head and in the repository, for all of them it does not exist. Communicating is not selling: it is making the work usable by others.

This lesson covers the seven pieces: the three audiences and how the message changes for each one, the structure of the presentation slide by slide, how to show an architecture without losing anybody, the demo with its script and its plan B, how to talk about numbers, the deliverable documentation with templates ready to copy, the honest self-assessment against the 08-01 rubric, the questions you are going to be asked with model answers, the peer review and the final clean-up.

Contents

  1. Why communicating the work is part of the work
  2. The three audiences
  3. The structure of the presentation, slide by slide
  4. How to show the architecture
  5. The demo
  6. Talking about numbers
  7. The deliverable documentation
  8. The self-assessment against the rubric
  9. The questions you are going to be asked
  10. The peer review
  11. The final clean-up
  12. The RefugioReserva presentation script

  1. Why communicating the work is part of the work

The four technical communication mistakes

Before what to do, what to avoid. All four are extraordinarily common:

Mistake How it sounds Why it fails
The catalogue "I used Cloud Run, BigQuery, Pub/Sub, Cloud SQL, Secret Manager, Terraform, Cloud Build…" Listing products does not demonstrate judgement. Anybody can read a list of services
The tutorial "First I created the project, then I enabled the APIs, then…" You tell the process instead of the result. Nobody cares about your order of work
Excessive modesty "Well, it is only a small project, I am sure there are things wrong…" It devalues your work before anybody has valued it. You can be honest without apologising
The exaggeration "It is a scalable, robust, high-performance platform" Adjectives with no numbers. The first specific question takes it apart

The antidote to all four is the same: decisions and numbers. "I chose Cloud Run instead of GKE because a cluster cost €100 a month from minute one and I did not need anything from Kubernetes; the system costs me €10.20 and handles 100 concurrent users with a p95 of 634 ms" is not a catalogue, it is not a tutorial, it does not apologise and it does not exaggerate. It is verifiable.

What you are really demonstrating

You are not demonstrating that you know how to use Google Cloud. You are demonstrating five things, and only one of them is technical:

  1. That you take decisions and justify them. The most valued skill and the rarest.
  2. That you know the constraints. Cost, time, complexity. An engineer without constraints is not an engineer.
  3. That you finish things. One complete project, however small, is worth more than three half-finished ones.
  4. That you know what you do not know. Acknowledged technical debt is a sign of maturity.
  5. That you can work with others. Documentation, ADRs, runbook: all of that is for other people.

  1. The three audiences

The same architecture, three different presentations. It is not make-up: the three audiences need to answer different questions.

Management / business Technical team Job interview
Their question Is it worth it? How does it work and how do I maintain it? Can this person think?
Real attention span 5 min 30-45 min 10-15 min
What you start with The problem and the result The architecture The problem and a decision
Diagram The context one, and that is enough All three The component one
Cost The lead role As a design constraint As a demonstration of judgement
Technical detail None As much as they ask for Just enough, and in depth if they ask
What weighs most The final number The trade-offs accepted The rejected alternatives
What sinks you Untranslated jargon Vagueness and "it depends" The service catalogue

Management: business and cost

Five sentences, zero jargon:

"The federation managed 12 refuges by telephone and with spreadsheets. They had seven overbookings a year and no data at all to decide where to invest. Now the bookings happen on their own, overbooking is impossible by design, and there is a dashboard with the occupancy of every refuge. It costs €10 a month and the whole thing can be switched off in five minutes if it stopped being of interest."

Notice what does not appear: no Cloud Run, no Terraform, no PostgreSQL. And what does: the problem in their terms, the result in their terms, the cost, and the reversibility — which matters to an executive more than it seems, because their fear is not that it will not work, it is being locked in.

Translating technical terms into business terms:

You say You translate to
"It scales to zero" "We do not pay when nobody is using it"
"SLO of 99.5 %" "At most it will be down 3 hours a month, and we will know about it"
"Infrastructure as code" "We can rebuild the whole thing from scratch in 15 minutes"
"Least privilege" "Each piece can only touch its own things; if one fails, it does not drag the rest down"
"Backup with a 22-minute RTO" "If we lose the data, it is back in 22 minutes"
"Canary deployment" "Changes are seen first by 10 % of people; if something fails, we undo it in a minute"

Technical team: decisions and trade-offs

Here you do go into detail, but the axis is still why, not what. What a colleague wants to know: what trade-offs you accepted, what breaks first when something fails, where the debt is and how this is operated on a Tuesday at eight in the evening.

The section they value most, and that almost nobody prepares: "what I would do differently".

Interview: your judgement, not the catalogue

In an interview, the project is a pretext for talking about how you think. The interviewer is not going to audit your Terraform: they are going to ask you why, what you rejected, what happens if, and how much it costs.

The 90-second structure you must have memorised (they will ask for it literally: "tell me about a project of yours"):

"[Problem, 15 s] I built a booking platform for a fictional federation of mountain refuges, which managed 12 refuges by telephone and had overbookings.

[Architecture, 20 s] It is an application on Cloud Run against managed PostgreSQL with a private IP, with the photos in Cloud Storage, the events over Pub/Sub into BigQuery and a dashboard in Looker Studio. All in Terraform, deployed by CI/CD with no keys.

[The interesting decision, 30 s] The decision that made me think hardest was the database. Firestore was free and Cloud SQL cost me €8 a month out of a €12 budget. I chose Cloud SQL because the heart of the problem is capacity control, and I needed a transaction with a row lock: I wrote a concurrency test with twenty threads fighting over the last place, and with the naive implementation seven of them managed to book it. I offset the cost by shutting the database down overnight.

[The numbers, 15 s] It costs me €10.20 a month, it handles 100 concurrent users with a p95 of 634 ms, the whole thing is rebuilt from scratch in 14 minutes and I have rehearsed the rollback: 38 seconds.

[The honesty, 10 s] What I deliberately left out: there is no WAF, because the load balancer cost more than the whole project put together. It is documented as debt with its review condition."

Ninety seconds. Five blocks. Not a list of services, and yet seven of them are mentioned. Every claim is verifiable, and the last one invites a question instead of hiding.

  1. The structure of the presentation, slide by slide

Thirteen slides, 10-15 minutes. This is the full version (technical or mixed audience); for management you use slides 1, 2, 6, 7 and 12.

# Slide Time Concrete content
1 Cover and one-liner 30 s Name, your name, the project one-liner with no "and"
2 The problem 1 min Who has it, what they do today, what hurts. One concrete figure
3 Scope 45 s What it does and — importantly — what it does not, with the reason
4 Architecture 1.5 min The component diagram. Just one
5 Key decisions 2 min 3 decisions with their rejected alternative. The most important slide
6 Demo 3 min Live, timed, with a plan B
7 Measured results 1.5 min Latency, availability, capacity. Numbers
8 Cost 1 min Real breakdown and the cost decision you took
9 Reliability 1 min SLO, what happens when it fails, measured RTO
10 Security 1 min Identity, secrets, exposure, and what you found when auditing
11 What did not work 1 min Incidents, prioritised technical debt
12 Lessons learned 45 s 3 concrete things
13 Next steps 30 s What you would do with two more weeks

The detail of the slides that decide

Slide 2 — The problem. It needs one concrete figure. "They managed bookings by telephone" is weak; "they managed bookings by telephone between 18:00 and 20:00, with one spreadsheet per refuge, and they had seven overbookings last year" makes the audience understand the pain in five seconds.

Slide 3 — Scope. Half the slide is what was excluded. Showing that you decided not to do payments, or a mobile app, or multiple languages demonstrates scope management, which is an engineering skill as valuable as writing code. And it defuses in advance the question "and why did you not do X?".

Slide 5 — Key decisions. Two minutes, three decisions, in table form:

Decision I chose I rejected Because
Compute Cloud Run GKE Autopilot A cluster costs from minute 1 and I did not need anything from Kubernetes
Data Cloud SQL Firestore Capacity control needs a transaction with a lock. Cost: +€8/month, offset with an overnight shutdown
Exposure Cloud Run domain Load balancer + CDN + WAF The load balancer cost €18/month on a €12 budget. Module written, deployed for a week to measure it, then destroyed

This is the most memorable slide. If you could only show one, it would be this one. The "I rejected" column is the one that proves there was thinking.

Slide 11 — What did not work. Counter-intuitive and very effective. It contains your real incidents with their post-mortem and your prioritised technical debt. The reason it works: everybody knows a real system has problems. A project presented as perfect reads as a project that was barely used or barely understood. And no other slide generates as many good questions.

Slide rules

Rule Reason
Maximum 6 lines of text Any more and people read instead of listening
One message per slide The title must be the message, not the category
Big, visible numbers "€10.20/month" in 60-point type, not in an eight-row table
Zero screenshots of illegible code If you need code, three highlighted lines
Zero animations They distract and they fail

The title of every slide must be the conclusion, not the topic. "Cost" is a topic. "€10.20/month, 62 % less than the initial design" is a conclusion: if the audience only reads the titles, they have already taken away your whole presentation.

  1. How to show the architecture

One diagram per level of detail

Never show all three at once, and never one that mixes levels. Choose according to the audience:

Audience Diagram Time
Management Context 30 s
Interview Components 1.5 min
Technical team All three, in order, as they ask 5 min

The rule of not reading the diagram

The most common mistake when presenting an architecture is walking through the boxes: "here we have Cloud Run, which connects to Cloud SQL, and also publishes to Pub/Sub, which in turn…". The audience can already see the boxes. They are reading while you talk, and you are competing with your own slide.

Instead of reading it, tell a journey. A user doing something:

"A hiker comes in and looks for places on 15 August. The request reaches Cloud Run, which queries PostgreSQL — that query is the one with the partial index, because it is the one that runs a thousand times. They book. At that point two things happen at once: the booking is written to the database inside a transaction with a lock, which is what prevents overbooking, and an event is published. The user already has their answer. The event goes on its way through Pub/Sub to BigQuery, and thirty seconds later the federation sees the booking in its dashboard. That separation is deliberate: the user does not wait for the analytics."

A minute and a half, zero lists, and the audience has understood the system and two design decisions.

The three things the diagram must convey in ten seconds

  1. What is exposed to the internet and what is not.
  2. Where the data comes in and where it ends up.
  3. What is synchronous (the user waits) and what is asynchronous (the user does not wait).

If your diagram does not make that clear without explanation, redo it before presenting.

  1. The demo

What to demonstrate and in what order

Three minutes. The order matters because the impact is cumulative:

# What Time Why at that point
1 The complete user flow 60 s Establishes that the system is real
2 The data appearing in the dashboard 30 s Connects the two halves of the system
3 One of the three moments (below) 90 s It is what they will remember

The three moments that genuinely impress

None of the three is functionality. All three are operations, which is exactly what separates a project from a demo:

1. A complete deployment, live. You change a line, do a git push, and the pipeline appears on screen: tests → build → deployment → smoke test. Four minutes on the clock, so you launch it at the start of the demo and come back to it at the end. The effect is hard to overstate: most portfolio projects are deployed by hand.

2. An alert firing. You cause errors, wait, and show the email arriving with the first steps written in it. It proves that the system tells you, which is what separates observability from pretty graphs.

3. A rollback. It is the most impressive of the three and the quickest. You deploy a deliberately broken version, the audience sees the error, you run ./scripts/revertir.sh, and in 38 seconds the system is healthy. Stopwatch on screen.

Choose one. All three do not fit, and the third is the one that says most about you in the least time.

The timed script

Write it. Literally, with the timings:

# Demo script — 3 min

## 0:00 — Preparation (before you start talking)
- Tab 1: the application, already loaded
- Tab 2: Looker Studio, already open, with the filter set
- Tab 3: Cloud Build, history
- Tab 4: the Cloud Run console, service open
- Terminal: in the project directory, with the command already typed WITHOUT pressing Enter
- Phone: email open, ready to show the alert
- ❗ Backup video open in a minimised window

## 0:00-0:15 — Launch the deployment in the background
"I am going to launch a deployment now so it runs while we talk."
[Enter in the terminal: git push]

## 0:15-1:15 — The user flow
[Tab 1] "I look for a place at the Refugio de Cotiella for 15 August."
"20 places free. I book two." [fill in, submit]
"Confirmed. It took 180 milliseconds."
"And now there are 18 left. That number comes out of a transaction with a row
lock: it is what stops two people booking the last place at the same time."

## 1:15-1:45 — The dashboard
[Tab 2, refresh] "And here is the booking, 30 seconds later.
It has gone through Pub/Sub and BigQuery. The user waited for none of this."

## 1:45-3:00 — The rollback
[Tab 3] "The deployment from earlier has already finished: tests, image,
deployment, smoke. Four minutes, without touching anything."
"Now we are going to break it on purpose."
[deploy broken revision] [tab 1, reload → error]
"And this is what I do when it happens for real:"
[terminal] ./scripts/revertir.sh
[stopwatch] "38 seconds." [tab 1, reload → it works]
"I have rehearsed it three times. 36, 38 and 41 seconds."

The three rules of a demo that does not fail:

  1. Rehearse it three times, the last one end to end without stopping. You will discover that one tab was slow to load and that the Looker Studio filter resets.
  2. Everything open and preloaded before you start. Nobody wants to watch you hunt for a tab.
  3. Never type a URL live. Nor write long commands. Everything ready, just press Enter.

The recorded plan B

Record the whole demo on video, with narration, and keep it open and minimised. It is not pessimism: it is that meeting-room wifi fails, a Google service has an incident, and your trial account expires on exactly that day.

And if you have to use it, say so naturally: "The wifi here will not let me; I have the demo recorded, it is exactly the same". Nobody penalises that. What does get penalised is spending three minutes fighting a loading screen.

  1. Talking about numbers

Why "this cost me €12 a month" is worth more than any adjective

An adjective is your opinion. A number is a verifiable fact, and it also proves three things at once: that you measured it, that you know where it comes from, and that you understand the constraint.

Instead of… Say…
"It is scalable" "It handles 100 concurrent users with a p95 of 634 ms; the cap is max-instances=5, set deliberately so as not to go over €12"
"It is fast" "p50 of 178 ms, p95 of 634 ms, p99 of 1.8 s. The p99 is cold starts"
"It is cheap" "€10.20 a month. The biggest line is the database, €5.70"
"It is reliable" "SLO of 99.5 % monthly. I have restored a backup and it took 22 minutes; the rollback, 38 seconds"
"It is secure" "Zero JSON keys, zero primitive roles, database with no public IP. When auditing I found a public bucket that had been open for four weeks and I closed it"

The last row is the one that works best, and it is counter-intuitive: admitting a fault found and fixed builds more trust than claiming there are none.

The numbers you must have on the tip of your tongue

Category Numbers you must know without looking
Cost Monthly total · biggest line · what you cut and how much it saved
Performance p50, p95, p99 · concurrent users tested · where the bottleneck is
Reliability SLO and error budget · measured RTO · RPO · rollback time
Operations Rebuild-from-scratch time · pipeline duration · number of incidents
Project scale Hours invested · number of commits · lines of Terraform

The cost slide

## €10.20/month — and how we got there

| Service | Cost | % |
| --- | --- | --- |
| Cloud SQL (with overnight shutdown) | €5.70 | 56 % |
| Domain | €1.00 | 10 % |
| Cloud Run | €0.30 | 3 % |
| Storage + Artifact Registry | €0.30 | 3 % |
| BigQuery, Pub/Sub, Functions, Logging | €0.00 | 0 % |
| Unused headroom | €2.90 | 28 % |

**Initial design: €34/month. Self-imposed limit: €12.**
Three decisions brought it down by 70 %:
1. No permanent load balancer (−€18) → ADR-006
2. Overnight shutdown of the database (−€2.30)
3. `max-instances=5` as a hard spending cap

That slide demonstrates more engineering judgement than any diagram, because it shows decisions under constraint, which is what the real job consists of.

Honesty about the numbers

  • If you did not measure it, do not say it. "I have not measured that" is a perfectly acceptable answer; inventing a figure you cannot back up is not.
  • Give the context. "100 concurrent users" without saying against what configuration means nothing.
  • Acknowledge what the number does not cover. "I tested 100 users; I do not know what happens with 1,000, although I can reason about it."

  1. The deliverable documentation

Five documents. None of them long, all of them useful.

7.1 The README that actually gets read

The rule: two minutes of reading and whoever arrives knows what it is, whether it is useful to them and how to start it.

# RefugioReserva

Booking platform for a fictional federation of 12 mountain refuges.
Final project of the Google Cloud Platform course.

> ⚠️ **All the data is fictional.** Names, emails and bookings are
> generated by `data/seed/generar.py`. This project has never contained
> real data about people or organisations.

🔗 **Demo:** https://refugioreserva.example
📊 **Dashboard:** [Looker Studio](https://lookerstudio.google.com/...)
📐 **Architecture:** [docs/arquitectura.md](docs/arquitectura.md)
📋 **Decisions:** [docs/adr/](docs/adr/)
🛠️ **Operations:** [docs/runbook.md](docs/runbook.md)

## The problem
The federation managed 12 refuges by telephone, with one spreadsheet per
refuge. Seven overbookings last year and no occupancy data at all.

## The solution in one line
Cloud Run (Python/FastAPI) → Cloud SQL PostgreSQL with a private IP · photos in
Cloud Storage · events over Pub/Sub → BigQuery → Looker Studio · sentiment of
reviews with the Natural Language API. All in Terraform, deployed by
Cloud Build with Workload Identity Federation (no keys).

## Architecture
![Component diagram](docs/img/componentes.png)

## Numbers
| | |
| --- | --- |
| Cost | **€10.20/month** |
| Latency | p50 178 ms · p95 634 ms · p99 1.8 s |
| Tested capacity | 100 concurrent users, 0 % error |
| SLO | 99.5 % monthly (error budget: 3 h 36 min) |
| Rebuild from scratch | 14 min 20 s |
| Backup restore (RTO) | 22 min |
| Rollback | 38 s |

## Bring it up from scratch

Google Cloud Platform (GCP) Course

Module 1: Introduction to Google Cloud Platform

Module 2: Core GCP Services

Module 3: Networking and Security

Module 4: Data and Analytics

Module 5: Machine Learning and AI

Module 6: DevOps and Monitoring

Module 7: Advanced GCP Topics

Module 8: Final Project

© Copyright 2026. All rights reserved