Durant set mòduls has seguit la Marta, en Dani i la Lucía. Has vist com AlpinaShop va passar d'un servidor llogat en un proveïdor espanyol a una plataforma a Google Cloud amb lliurament continu, observabilitat, SLO, govern i una factura un 60 % més baixa. Has vist les decisions i també els errors: el MIG que es va arrossegar cinc mòduls, l'endpoint de recomanacions que es va haver d'apagar, la clau de compte de servei perduda durant catorze mesos.
Però has vist decidir altres.
Aquest mòdul és diferent. Aquí no hi ha cap AlpinaShop a qui seguir: hi ha un full en blanc, un conjunt de restriccions i una data. Triaràs un problema, dissenyaràs una solució, la construiràs, la provaràs, la desplegaràs, la mesuraràs, la pagaràs i la defensaràs. De principi a fi, tu sol.
I hi ha una raó pràctica per la qual això importa més que qualsevol lliçó anterior: ningú no et contractarà per haver llegit sobre Cloud Run. Et contractaran perquè pots ensenyar una URL que funciona, un repositori amb la infraestructura escrita com a codi, un tauler amb mètriques reals i una factura de 14 € al mes que saps explicar línia a línia. Això és un porfolio. La resta són apunts.
Aquesta primera lliçó és el plec de condicions del projecte. Defineix què se't demana, amb quins requisits mínims, sota quin límit de cost, amb quins lliurables, amb quina rúbrica t'avaluaràs i en quin termini. Llegeix-la sencera abans d'escriure una línia de codi o de crear un sol projecte de GCP. És literalment la lliçó que evita que d'aquí a tres setmanes tinguis mig sistema i cap idea de si està bé.
Contingut
- Què se't demana exactament i per què així
- Com triar el problema: criteris d'un projecte de porfolio que funciona
- Quatre propostes desenvolupades
- Portar el teu propi problema (i l'advertiment que no et pots saltar)
- Requisits funcionals mínims obligatoris
- Requisits no funcionals obligatoris
- La restricció de cost: el requisit que més t'ensenyarà
- Lliurables i el seu format
- La rúbrica d'avaluació
- Planificació: esforç per fase i cronograma
- Gestió del risc: els cinc errors que enfonsen un projecte final
- Com treballar amb la documentació oficial
- Què fer quan alguna cosa no funciona
- La teva decisió d'avui
- Què se't demana exactament i per què així
L'encàrrec, en una frase:
Construeix a Google Cloud, de principi a fi i amb les teves pròpies mans, una plataforma completa per a un problema que triïs tu, recorrent les mateixes etapes que has vist recórrer a AlpinaShop, i deixa-la documentada, mesurada, segura i reproduïble des de zero.
No és «fes una demo». Una demo és un contenidor desplegat a Cloud Run amb gcloud run deploy i una captura de pantalla. Això ho fa qualsevol en vint minuts i no demostra res, perquè la feina real no és desplegar: és tot el que envolta el desplegament.
El que sí que demostra criteri és això:
| El que ensenya una demo | El que ensenya un projecte complet |
|---|---|
| Saps executar una comanda | Saps triar entre tres serveis i justificar-ho |
| Tens alguna cosa desplegada | Pots tornar-ho a desplegar des de zero sense recordar res |
| Funciona ara | Saps quan deixa de funcionar i te n'assabentes abans que l'usuari |
| No saps què costa | Saps què costa per unitat de negoci |
Els permisos són owner |
Cada càrrega de treball té el mínim privilegi, sense claus JSON |
| És al teu portàtil | És en un repositori, amb historial i amb proves |
El projecte està dissenyat per tocar totes les capes del curs, no per aprofundir en una. És deliberat: un projecte que només demostra BigQuery competeix amb milers de projectes que demostren BigQuery. Un projecte que demostra que saps connectar còmput, dades, identitat, xarxa, lliurament i observabilitat —i explicar per què cada peça és on és— competeix amb molt pocs.
Quant temps costa. Entre 40 i 60 hores de feina real si hi vas per primera vegada. Repartides en 4-6 setmanes a ritme de tarda solta i cap de setmana, és perfectament factible. Si te'n surten 15 hores, és que estàs fent una demo. Si te'n surten 150, és que l'abast se t'ha escapat de les mans, i hi ha un apartat sencer sobre això més avall.
Què NO se't demana. Convé dir-ho aviat, perquè la meitat del risc d'aquest mòdul és fer de més:
- No se't demana una aplicació bonica. Una interfície lletja però funcional puntua igual que una preciosa.
- No se't demana un model de machine learning propi. Una API preentrenada compleix el requisit d'IA.
- No se't demana alta disponibilitat multiregió. Una regió n'hi ha ben bé prou.
- No se't demana Kubernetes. Cloud Run és l'opció recomanada per defecte.
- No se't demana un volum de dades gran. Mil files fictícies demostren el mateix que deu milions i costen zero.
- No se't demana que estigui «acabat» en el sentit d'un producte. Se't demana que estigui complet en el sentit que totes les capes existeixen i funcionen juntes.
- Com triar el problema: criteris d'un projecte de porfolio que funciona
L'elecció del problema és la decisió amb més conseqüències de tot el mòdul, i es pren la primera hora. Un mal problema converteix el projecte en una tortura de sis mesos; un de bo el converteix en quatre caps de setmana entretinguts.
Cinc criteris, per ordre d'importància:
Criteri 1 — Entens el domini sense haver d'investigar
Si tries «plataforma de trading algorítmic» i no saps què és un llibre d'ordres, gastaràs el 70 % del temps aprenent finances en comptes d'aprendre GCP. El domini ha de ser tan obvi per a tu que puguis escriure els requisits funcionals de memòria en vint minuts.
Bons dominis: reserves, catàlegs, inventaris, incidències, seguiment de flotes, cursos, cites, gestió de socis. Tothom entén com funciona una reserva.
Mals dominis: qualsevol cosa amb normativa complexa (sanitat real, banca, assegurances), qualsevol cosa amb algoritmes que són el producte (motors de recomanació de debò, optimització de rutes òptima), qualsevol cosa que depengui d'una integració externa que no controles.
Criteri 2 — L'abast cap en una frase sense la paraula «i»
Prova de descriure el teu projecte en una frase. Si necessites dues «i», ja és massa gran.
- ✅ «Una plataforma on els usuaris reserven places en refugis de muntanya.»
- ⚠️ «Una plataforma on els usuaris reserven places en refugis i els guardes gestionen disponibilitat i hi ha un marketplace de guies.»
- ❌ «Un ERP per a la gestió integral de refugis.»
L'abast es retalla abans de començar, no a mitges. Retallar a mitges vol dir llençar feina feta.
Criteri 3 — Pots generar dades fictícies plausibles
Necessitaràs dades per a la base de dades operativa, per al magatzem analític i per al component d'IA. Si el teu domini necessita dades que no pots inventar de manera creïble (imatges mèdiques etiquetades, transaccions bancàries reals), canvia de domini.
Un bon projecte es pot sembrar amb un script de 60 línies de Python que generi 2.000 files coherents: dates que tenen sentit, imports en un rang raonable, distribució amb una mica d'estacionalitat perquè el tauler de control no surti pla.
Criteri 4 — Exercita diverses capes de manera natural
El requisit d'«aplicació + emmagatzematge + base de dades + dades + analítica + IA» ha de sortir del problema, no forçar-se a sobre. Si has d'inventar una excusa per encabir-hi Pub/Sub, el projecte està mal triat.
Pregunta't: hi ha alguna cosa que passi de manera asíncrona? Hi ha fitxers per pujar? Hi ha alguna cosa per analitzar històricament? Si les tres respostes són que sí, el projecte encaixa sol.
Criteri 5 — Et ve de gust
Passaràs 50 hores amb això, moltes d'elles depurant permisos IAM a les onze de la nit. Si el tema t'avorreix el primer dia, el projecte no s'acaba. Aquest criteri sembla tou i és el que mata més projectes.
La taula de decisió
Puntua cada idea que se t'acudeixi d'1 a 5 en cada criteri. Si alguna columna treu menys de 3, descarta-la:
| Idea | Domini conegut | Abast acotat | Dades fictícies | Diverses capes | Interès | Total |
|---|---|---|---|---|---|---|
| Reserves de refugis | 5 | 5 | 5 | 4 | 4 | 23 |
| Plataforma de trading | 2 | 2 | 2 | 5 | 4 | 15 |
| Portal de clínica veterinària | 4 | 4 | 5 | 5 | 3 | 21 |
| Xarxa social generalista | 5 | 1 | 3 | 4 | 3 | 16 |
- Quatre propostes desenvolupades
Si no tens una idea pròpia clara, fes servir una d'aquestes quatre. Estan dimensionades per al mòdul, tenen dades inventables i exerciten totes les capes obligatòries. Les quatre són fictícies.
Proposta A — RefugioReserva (plataforma de reserves de refugis de muntanya)
El problema. Una federació fictícia de muntanyisme gestiona 12 refugis al Pirineu. Avui les reserves es fan per telèfon i s'apunten en un full de càlcul per refugi. Hi ha sobrevenda, no se sap l'ocupació real fins que arriba el cap de setmana, i no hi ha manera de saber quins refugis funcionen millor.
Què construeixes.
- Web pública on un excursionista busca refugi i data, veu places lliures i reserva.
- Zona privada on el guarda de cada refugi consulta les reserves del dia.
- Pujada de fotos del refugi a un bucket, amb generació de miniatures.
- Cada reserva publica un esdeveniment que alimenta el magatzem analític.
- Tauler de control d'ocupació per refugi, mes i tipus de plaça.
- Component d'IA: anàlisi de sentiment de les opinions que deixen els excursionistes (API preentrenada) o etiquetatge automàtic de les fotos.
Dades fictícies. 12 refugis amb nom, coordenades i capacitat; 2.000 reserves repartides en 18 mesos amb estacionalitat d'estiu; 400 opinions en text lliure.
Dificultat: mitjana-baixa. És la proposta de referència d'aquest mòdul i la que es fa servir en totes les solucions dels exercicis.
El que ensenya d'interessant. La gestió de la disponibilitat té una condició de cursa real (dues persones reservant l'última plaça), cosa que dona peu a una transacció de debò i a una prova d'integració amb sentit.
Proposta B — VetPortal (portal d'una clínica veterinària)
El problema. Una cadena fictícia de tres clíniques veterinàries necessita gestionar les fitxes dels animals, les cites i les històries clíniques. Avui fan servir un programa d'escriptori instal·lat en un ordinador per clínica, sense accés remot.
Què construeixes.
- Web autenticada on el personal dona d'alta animals i propietaris, i programa cites.
- Pujada de radiografies i fotos de l'evolució d'una lesió a un bucket amb classe d'emmagatzematge per antiguitat.
- Recordatoris de cita: la creació d'una cita publica un missatge que dispara un enviament simulat.
- Tauler de control d'ocupació d'agenda, motius de consulta més freqüents i facturació per clínica.
- Component d'IA: extracció d'entitats del text lliure de la història clínica (API de llenguatge natural) per etiquetar diagnòstics, o classificació de les imatges pujades.
Dades fictícies. 3 clíniques, 8 veterinaris, 600 animals, 3.500 cites històriques, 1.200 notes clíniques en text lliure.
Dificultat: mitjana.
⚠️ Avís important per a aquesta proposta. Encara que les dades dels animals no són dades personals, les dels seus propietaris sí que ho són. Treballa exclusivament amb noms, telèfons, correus i adreces inventats. No copiïs una base de dades real de cap clínica, ni «anonimitzada»: l'anonimització mal feta és reidentificable i et fica en un problema d'RGPD que no té res a veure amb aprendre GCP.
Proposta C — RutaFlota (gestor de flotes de repartiment)
El problema. Una empresa fictícia de repartiment d'última milla amb 30 furgonetes vol saber on són els seus vehicles, quines entregues porten fetes i quant triga cada ruta.
Què construeixes.
- Ingesta de posicions: un simulador publica cada 30 segons la posició de cada furgoneta en un topic.
- Servei web amb un mapa que mostra l'estat actual de la flota i el detall de cada ruta.
- Emmagatzematge dels albarans signats (imatges) en un bucket.
- Base de dades operativa amb vehicles, rutes, parades i entregues.
- Tauler de control de puntualitat, quilòmetres per ruta i entregues fallides per motiu.
- Component d'IA: OCR sobre els albarans escanejats (API de visió) per extreure el número de comanda.
Dades fictícies. 30 vehicles, 12 rutes, 90 dies d'històric amb unes 400 entregues diàries, i un generador de posicions GPS que segueix trajectòries plausibles.
Dificultat: mitjana-alta. És la proposta amb més volum de dades i la que més exercita el streaming, però també la que més fàcilment es dispara de cost si deixes el simulador encès. Llegeix-ho com un advertiment: aquí el requisit de cost és part del repte.
⚠️ La posició geogràfica d'una persona identificable és una dada personal de categoria sensible. Treballa amb vehicles i conductors inventats, mai amb dades reals d'una flota.
Proposta D — AulaViva (plataforma de cursos en línia)
El problema. Una escola fictícia de formació tècnica vol substituir el seu muntatge de vídeos en un disc compartit i matrícules per correu per una plataforma pròpia.
Què construeixes.
- Catàleg públic de cursos i zona privada de l'alumne amb el seu progrés.
- Materials (PDF, vídeos) en un bucket, servits amb CDN i URL signades.
- Base de dades operativa amb cursos, lliçons, matrícules i progrés.
- Esdeveniments de «lliçó completada» que alimenten el magatzem analític.
- Tauler de control de taxa de finalització per curs, lliçons on la gent abandona i activitat setmanal.
- Component d'IA: generació d'un resum automàtic de cada lliçó amb un model generatiu, o cerca semàntica sobre el contingut mitjançant embeddings.
Dades fictícies. 20 cursos, 250 lliçons, 800 alumnes i 40.000 esdeveniments de progrés.
Dificultat: mitjana. És la proposta que més s'assembla a aquest mateix curs, cosa que la fa fàcil de raonar i difícil que et sorprengui.
Comparativa ràpida
| RefugioReserva | VetPortal | RutaFlota | AulaViva | |
|---|---|---|---|---|
| Dificultat | Mitjana-baixa | Mitjana | Mitjana-alta | Mitjana |
| Hores estimades | 40-50 | 45-55 | 55-70 | 45-55 |
| Risc de cost | Baix | Baix | Alt | Mitjà (CDN, vídeos) |
| Exercita streaming | Poc | Poc | Molt | Mitjà |
| Exercita IA | Sentiment | Entitats | Visió/OCR | Generativa |
| Dada personal implicada | Baix | Alt | Alt | Mitjà |
| Recomanada si… | És el teu primer projecte al núvol | T'interessa la dada estructurada | T'interessa el temps real | T'interessa la IA generativa |
- Portar el teu propi problema (i l'advertiment que no et pots saltar)
Portar un problema propi és la millor opció si compleixes els cinc criteris de l'apartat 2. Un projecte que resol alguna cosa que tu entens i que t'importa es defensa molt millor en una entrevista que una plantilla, perquè així que et pregunten «i per què això?» tens una resposta de debò.
Però hi ha una línia que no es creua:
⚠️ No facis servir dades reals de la teva empresa, ni de l'empresa de ningú.
Ni una exportació «que ja està anonimitzada». Ni un bolcat de la base de dades de desenvolupament. Ni el fitxer de clients amb els noms canviats. Ni les converses del sistema de suport «que no porten noms».
Tres motius, qualsevol d'ells suficient:
- Legal. L'RGPD no distingeix entre «producció» i «un projecte que estic fent per aprendre». Si tractes dades personals necessites base jurídica, finalitat, minimització i una relació contractual amb l'encarregat del tractament. Un projecte de porfolio al teu compte personal de GCP no té res d'això.
- Contractual. Gairebé qualsevol contracte laboral o de confidencialitat prohibeix treure dades de l'empresa a un entorn que l'empresa no controla. El teu projecte de GCP és exactament això.
- Pràctic. Un projecte de porfolio s'ensenya. Es posa a GitHub, es comparteix la URL, es projecta en una entrevista. Si conté dades reals, acabes de publicar-les.
El que sí que pots fer: replicar l'estructura del problema real amb dades inventades. L'esquema, els fluxos, les regles de negoci i les dificultats tècniques són teus i no són confidencials; les dades, no. Un generador de dades sintètiques de 80 línies resol això en una tarda.
I si tot i així el teu projecte tractarà dades que s'assemblen a dades personals (noms, correus, adreces, encara que inventats), aplica des del principi el que vas veure a 04-07 i a 07-04: xifratge en repòs amb claus gestionades, mínim privilegi, retenció definida amb esborrat real, i registres que no escriguin aquests camps. No perquè les teves dades inventades ho necessitin, sinó perquè l'hàbit és el lliurable.
Plantilla d'una pàgina per validar la teva idea pròpia
Abans d'acceptar-la, omple això. Si alguna casella queda buida, la idea no està a punt:
# Validació d'idea de projecte
**Nom del projecte:**
**Una frase:** (sense la paraula «i»)
## El problema
Qui té el problema? Què fa avui sense la plataforma? Què li fa mal?
## Abast INCLÒS (màxim 5 punts)
1.
2.
3.
## Abast EXPLÍCITAMENT EXCLÒS (mínim 5 punts)
1.
2.
3.
4.
5.
## Com compleix els requisits obligatoris
| Requisit | Com el compleix en el meu projecte |
| --- | --- |
| App web contenidoritzada | |
| Emmagatzematge d'objectes | |
| Base de dades gestionada | |
| Ingesta o processament de dades | |
| Tauler de control analític | |
| Component d'IA | |
## Dades
D'on surten? (han de ser 100 % inventades)
Quantes files? Com les genero?
## Risc principal
Què és el que més probablement em bloquejarà?L'apartat d'abast exclòs és el més important del document i el que tothom deixa en blanc. Escriure «no hi haurà pagaments», «no hi haurà app mòbil», «no hi haurà multiidioma», «no hi haurà rols més enllà d'admin i usuari», «no hi haurà notificacions per correu reals» és el que et salva d'aquí a tres setmanes, quan et vingui de gust afegir qualsevol d'aquestes coses.
- Requisits funcionals mínims obligatoris
Aquests sis són obligatoris. Sigui quin sigui el teu problema, han d'existir. Estan formulats com a llista verificable: cadascun té un criteri de «fet» comprovable amb una comanda.
| # | Requisit | Criteri de «fet» | Com ho verifiques |
|---|---|---|---|
| RF-1 | Aplicació web contenidoritzada i desplegada | Hi ha una URL HTTPS pública que respon 200 i serveix la funcionalitat principal | curl -s -o /dev/null -w "%{http_code}" https://tu-dominio |
| RF-2 | Emmagatzematge d'objectes | Existeix almenys un bucket amb contingut de l'aplicació (imatges, fitxers, documents), servit de manera controlada | gcloud storage ls gs://tu-bucket/** |
| RF-3 | Base de dades gestionada | Existeix una BD gestionada (Cloud SQL, Firestore, Spanner…) amb el model operatiu i dades fictícies | gcloud sql instances describe / gcloud firestore databases list |
| RF-4 | Ingesta o processament de dades | Hi ha un flux que mou dades del sistema operatiu a l'analític (Pub/Sub, un job programat, Dataflow, una funció) | El magatzem analític té files noves després d'una acció a l'app |
| RF-5 | Tauler de control analític | Existeix un tauler amb almenys 4 visualitzacions que responen a preguntes de negoci reals | URL de l'informe de Looker Studio |
| RF-6 | Almenys un component d'IA | Hi ha una funcionalitat que fa servir un model. Pot ser una API preentrenada (Vision, Natural Language, Gemini) | Una crida d'exemple amb la seva resposta desada |
Detall de cadascun:
RF-1 — Aplicació web contenidoritzada. Contenidoritzada vol dir que existeix un Dockerfile i que la imatge es construeix a CI, no al teu portàtil. La recomanació per defecte és Cloud Run (07-02): escala a zero, no pagues quan ningú no la fa servir, i el contracte és senzill. Si tries GKE, que sigui perquè tens un motiu escrit, no per lluir-te: un clúster encès es menja el pressupost del projecte sencer.
RF-2 — Emmagatzematge d'objectes. No val un bucket buit creat per complir. Ha de formar part del flux: l'usuari puja alguna cosa, o l'aplicació serveix alguna cosa des d'allà. Aplica el de 02-02: accés uniforme a nivell de bucket, res públic tret del que ho hagi de ser, i una regla de cicle de vida encara que sigui trivial.
RF-3 — Base de dades gestionada. Gestionada, no un contenidor amb PostgreSQL dins. L'arbre de decisió de 02-06 et diu quina: relacional amb transaccions → Cloud SQL; documents amb accés per clau i escalat a zero → Firestore. Per a la majoria d'aquests projectes, Cloud SQL PostgreSQL a la instància més petita o Firestore són les respostes correctes.
RF-4 — Ingesta o processament. És el requisit que més gent interpreta de menys. No n'hi ha prou que l'app escrigui a la BD. Hi ha d'haver un flux asíncron o programat que porti dades d'un lloc a un altre: un topic de Pub/Sub que recull esdeveniments, un job de Cloud Run que cada nit bolca a BigQuery, una funció que es dispara en pujar un fitxer. És la peça que demostra que entens la diferència entre el pla operatiu i l'analític (04-01, 04-04).
RF-5 — Tauler de control. Quatre visualitzacions que responguin preguntes, no quatre gràfics bonics. «Quin refugi té més cancel·lacions?» és una pregunta. «Distribució de reserves» no ho és. Looker Studio sobre BigQuery és gratis i suficient (04-07).
RF-6 — Component d'IA. Comença sempre per una API preentrenada. Vision, Natural Language o Gemini resolen el requisit en dues hores i funcionen. Entrenar un model propi amb Vertex AI és opcional, costa diners i és la font número u de projectes que no s'acaben. Si et sobra temps al final, aleshores sí: substitueix l'API per un model teu i documenta la comparació amb la línia base, exactament com va fer la Lucía a DA-003.
- Requisits no funcionals obligatoris
Aquí és on aquest projecte se separa d'una demo. Vuit requisits, tots obligatoris, tots verificables:
| # | Requisit | Criteri de «fet» | Lliçó de referència |
|---|---|---|---|
| RNF-1 | Infraestructura com a codi | terraform destroy + terraform apply reconstrueixen el sistema sencer. Res creat a mà queda sense codi |
06-07 |
| RNF-2 | CI/CD amb almenys una prova automatitzada | Un push a la branca principal executa proves, construeix la imatge i desplega. Si la prova falla, no desplega | 06-01 |
| RNF-3 | IAM amb mínim privilegi i sense claus JSON | Zero comptes de servei amb owner/editor. Zero claus descarregades. CI/CD per Workload Identity Federation |
03-04, 06-02 |
| RNF-4 | Secrets fora del codi | Ni una contrasenya, cadena de connexió o API key al repositori. Tot a Secret Manager | 03-06 |
| RNF-5 | HTTPS amb domini o subdomini propi | L'app respon a https://algo.tudominio.tld amb certificat vàlid |
03-07 |
| RNF-6 | Observabilitat: 1 tauler + 1 alerta | Existeix un tauler amb les mètriques daurades i almenys una política d'alerta que notifica de debò | 06-04, 06-06 |
| RNF-7 | Un SLO definit i mesurat | Hi ha un SLI, un objectiu numèric, una finestra i un pressupost d'error visible | 07-06 |
| RNF-8 | Pressupost amb alerta | Existeix un pressupost al compte de facturació amb llindars al 50/90/100 % | 01-04, 07-05 |
Els tres que la gent es salta i no hauria:
RNF-1 (IaC de debò). El criteri no és «tinc uns fitxers .tf». El criteri és que el sistema es reconstrueix des de zero. La prova es fa a 08-04 i és implacable: destrueixes l'entorn de desenvolupament sencer i el tornes a crear. Si no arrenca, el teu IaC no era IaC: era documentació amb sintaxi de Terraform.
RNF-3 (sense claus JSON). Aquesta és la que més et diferenciarà. La majoria de projectes de porfolio tenen un credentials.json al repositori o, en el millor dels casos, al .gitignore. Configurar Workload Identity Federation entre GitHub Actions o Cloud Build i GCP costa mitja hora la primera vegada i és exactament el que fa un professional. I recorda el cas d'AlpinaShop: una clau perduda durant catorze mesos.
RNF-7 (SLO). Un SLO no és «vull que vagi ràpid». És: «el 99 % de les peticions a /api/* responen en menys de 800 ms, mesurat sobre finestra de 28 dies». Amb el seu pressupost d'error calculat i visible. Ocupa una tarda i és del que més impressiona en una entrevista, perquè gairebé ningú de nivell júnior no sap formular-lo.
- La restricció de cost: el requisit que més t'ensenyarà
Fixa ara un límit mensual i escriu-lo. El projecte ha de poder construir-se i mantenir-se dins del crèdit de prova de Google Cloud (300 USD / 90 dies en el moment d'escriure això — verifica-ho, les condicions canvien) o, si el crèdit se t'ha esgotat, per sota d'un límit mensual que fixes tu.
Valors de referència raonables:
| Límit mensual | Què t'hi cap | Recomanat per a |
|---|---|---|
| 0 € (només nivell gratuït) | Cloud Run, Cloud Functions, Firestore, BigQuery (1 TB consulta/mes), 5 GB de Storage | Qui no vol gastar res. Obliga a Firestore en comptes de Cloud SQL |
| 10-15 €/mes | L'anterior + Cloud SQL db-f1-micro o parada nocturna + domini |
L'opció recomanada. És el que costa el projecte de referència |
| 30-40 €/mes | L'anterior + Cloud SQL amb una mica més de múscul + CDN + registres amb retenció | Si vols marge i no t'importa la despesa |
| >50 €/mes | Ja no és una restricció, és un pressupost | Només si tens un motiu |
Per què la restricció és part de l'exercici i no un inconvenient. Qualsevol pot construir una arquitectura que funcioni amb diners infinits. El que distingeix un bon enginyer del núvol és construir-la amb els diners que hi ha. La restricció de cost t'obligarà a prendre exactament les decisions que es prenen en una empresa real:
- Escalar a zero en comptes de tenir capacitat reservada (Cloud Run vs. MIG).
- Triar la instància més petita que compleix, i mesurar si compleix.
- Apagar els entorns de desenvolupament a la nit.
- Particionar les taules de BigQuery per no escanejar 1,2 TB cada vegada que s'obre el tauler.
- No deixar un clúster de GKE encès «per provar».
- Posar cicle de vida als buckets des del dia u.
- Retenir registres 30 dies i no 400.
Tot això és 07-05 aplicat a la teva butxaca, que és la millor manera d'aprendre-ho.
El pressupost és el primer que es crea
Abans de crear un sol recurs. Literalment el primer dia, abans que res:
# Substitueix pels teus valors reals
export BILLING_ACCOUNT="0X0X0X-0X0X0X-0X0X0X"
export PROYECTO="miproyecto-dev"
# Pressupost de 15 € al mes amb avisos al 50 %, 90 % i 100 %
gcloud billing budgets create \
--billing-account="${BILLING_ACCOUNT}" \
--display-name="Pressupost projecte final" \
--budget-amount=15EUR \
--threshold-rule=percent=0.5 \
--threshold-rule=percent=0.9 \
--threshold-rule=percent=1.0 \
--filter-projects="projects/${PROYECTO}"I l'avís que cal repetir sempre: un pressupost avisa, no impedeix. Si deixes encès alguna cosa cara, el pressupost t'envia un correu mentre el comptador continua pujant. El que impedeix de debò són les quotes (07-07) i el costum de mirar l'informe de facturació cada pocs dies. Posa't un recordatori: cada dimarts i cada dissabte, obrir l'informe de costos. Trenta segons.
⚠️ Tots els preus d'aquest mòdul són ordres de magnitud, no tarifes. Els preus de Google Cloud canvien, varien per regió i depenen de descomptes i del nivell gratuït. Consulta sempre la calculadora oficial i la pàgina de preus del servei abans de comprometre una xifra al teu document d'arquitectura.
- Lliurables i el seu format
Set lliurables. Els tres primers són el projecte; els quatre següents són el que fa que el projecte es pugui avaluar i defensar.
| # | Lliurable | Format | On viu | Es treballa a |
|---|---|---|---|---|
| E-1 | Repositori de codi | Git, amb historial de commits reals | GitHub/GitLab públic | 08-03 |
| E-2 | Document d'arquitectura | Markdown amb diagrames mermaid | docs/arquitectura.md |
08-02 |
| E-3 | Infraestructura com a codi | Terraform amb mòduls i backend remot | infra/ del repositori |
08-03 |
| E-4 | Aplicació desplegada | URL HTTPS funcionant | Cloud Run + domini | 08-03 |
| E-5 | Tauler de control | Informe de Looker Studio compartit | Enllaç al README |
08-03 |
| E-6 | Document d'operació (runbook) | Markdown | docs/runbook.md |
08-04 |
| E-7 | Presentació | 12-15 diapositives + guió | docs/presentacion/ |
08-05 |
Estructura del repositori (es detalla a 08-03, però decideix-la ja):
mi-proyecto/
├── README.md # La porta d'entrada. Es llegeix en 2 minuts.
├── app/ # Codi de l'aplicació
│ ├── Dockerfile
│ ├── src/
│ └── tests/
├── infra/ # Terraform
│ ├── modules/
│ ├── envs/
│ │ ├── dev/
│ │ └── prod/
│ └── README.md
├── data/ # Generadors de dades fictícies, SQL, ETL
│ ├── seed/
│ └── sql/
├── ml/ # Component d'IA
├── docs/
│ ├── arquitectura.md
│ ├── runbook.md
│ ├── adr/ # Decisions d'arquitectura, una per fitxer
│ │ ├── ADR-001-eleccion-computo.md
│ │ └── ADR-002-base-de-datos.md
│ ├── diario.md # Diari de decisions i problemes
│ └── presentacion/
├── cloudbuild.yaml
└── .gitignoreCrea aquest esquelet avui, encara que estigui buit. Els directoris buits amb un README.md d'una línia que digui què hi anirà valen més que la millor intenció d'organitzar-ho després.
- La rúbrica d'avaluació
Aquesta és la rúbrica amb la qual t'autoavaluaràs a 08-05. Llegeix-la ara, perquè saber com et puntuaran canvia el que construeixes.
100 punts, repartits en set blocs:
| Bloc | Punts | Què s'avalua |
|---|---|---|
| A. Disseny i decisions | 20 | Arquitectura coherent, decisions justificades, alternatives descartades per escrit |
| B. Implementació funcional | 20 | Els 6 requisits funcionals existeixen i funcionen d'extrem a extrem |
| C. Infraestructura com a codi | 15 | Reproductibilitat real, mòduls, estat remot, res creat a mà |
| D. Seguretat i identitat | 15 | Mínim privilegi, sense claus, secrets gestionats, exposició mínima, TLS |
| E. Lliurament i proves | 10 | CI/CD funcionant, proves que fallen quan han de fallar, desplegament reversible |
| F. Observabilitat, SLO i cost | 10 | Tauler, alerta, SLO mesurat, pressupost i cost dins del límit |
| G. Documentació i presentació | 10 | README, arquitectura, ADR, runbook i presentació defensable |
Detall per bloc
A. Disseny i decisions (20 punts)
| Criteri | Insuficient (0-40 %) | Correcte (60-80 %) | Excel·lent (100 %) |
|---|---|---|---|
| Arquitectura documentada | No hi ha diagrama, o està desactualitzat | Un diagrama que reflecteix el sistema | Tres nivells (context, components, desplegament), coherents entre si |
| Justificació de serveis | «Vaig fer servir Cloud Run» | S'explica per què | S'explica per què i què es va descartar, amb el criteri |
| ADR | No n'hi ha | 1-2 ADR | ≥3 ADR amb context, opcions, decisió i conseqüències |
| Model de dades | Implícit al codi | Esquema documentat | Esquema + cicle de vida de la dada + on viu cada cosa i per què |
B. Implementació funcional (20 punts) — 3 punts per requisit funcional complert (18) + 2 punts si el flux complet funciona d'extrem a extrem sense intervenció manual.
C. Infraestructura com a codi (15 punts)
| Criteri | Punts |
|---|---|
| Estat remot en bucket amb versionatge | 2 |
Proveïdor fixat per versió, sense latest |
1 |
| Almenys dos mòduls propis reutilitzats | 3 |
| Variables per entorn, sense valors duplicats | 2 |
terraform plan net (sense canvis) sobre el sistema desplegat |
3 |
| L'entorn es recrea des de zero i funciona | 4 |
D. Seguretat i identitat (15 punts)
| Criteri | Punts |
|---|---|
Zero comptes de servei amb owner/editor |
3 |
| Zero claus JSON descarregades (WIF a CI/CD) | 3 |
| Secrets a Secret Manager, res al repositori | 3 |
| Base de dades sense IP pública | 2 |
Cap bucket accessible per allUsers tret que estigui justificat |
2 |
| HTTPS amb certificat vàlid i capçaleres raonables | 2 |
E. Lliurament i proves (10 punts)
| Criteri | Punts |
|---|---|
| Pipeline que construeix i desplega automàticament | 3 |
| Almenys una prova automatitzada que falla quan trenques el codi | 3 |
| Promoció de la mateixa imatge a producció, sense reconstruir | 2 |
| Procediment de reversió escrit i assajat | 2 |
F. Observabilitat, SLO i cost (10 punts)
| Criteri | Punts |
|---|---|
| Tauler amb els quatre senyals daurats | 2 |
| Almenys una alerta que ha notificat de debò (provocada expressament) | 2 |
| Registres estructurats amb identificador de correlació | 2 |
| SLI + SLO + pressupost d'error documentat i mesurat | 2 |
| Cost real dins del límit fixat, amb desglossament per servei | 2 |
G. Documentació i presentació (10 punts)
| Criteri | Punts |
|---|---|
README que permet a un altre arrencar el projecte |
2 |
| Document d'arquitectura complet | 2 |
| Runbook amb almenys 3 procediments operatius | 2 |
| Diari de decisions mantingut durant el projecte | 1 |
| Presentació de 10-15 min amb demostració | 3 |
Com llegir la teva puntuació
| Puntuació | Lectura |
|---|---|
| < 50 | És una demo, no un projecte. Falta almenys una capa completa |
| 50-69 | Projecte funcional amb deute important. Serveix per aprendre, no per ensenyar |
| 70-84 | Projecte de porfolio sòlid. És l'objectiu realista d'aquest mòdul |
| 85-94 | Projecte que un entrevistador recordarà |
| 95-100 | Sospitós. Torna a puntuar-te sent honest, sobretot a C i D |
Aquesta darrera línia no és cap broma. L'autoavaluació honesta és part de la nota: a 08-05 veuràs que reconèixer i prioritzar el deute tècnic suma punts, i amagar-lo els resta.
- Planificació: esforç per fase i cronograma
Estimació per a un projecte de dificultat mitjana, primera vegada, treballant sol:
| Fase | Lliçó | Hores | Què produeix |
|---|---|---|---|
| F0. Elecció i requisits | 08-01 | 2-4 | Idea validada, abast escrit, límit de cost |
| F1. Disseny | 08-02 | 5-8 | Diagrames, ADR, model de dades, estimació de cost |
| F2. Base: projectes, xarxa, IaC | 08-03 | 6-10 | Terraform funcionant, xarxa creada, pressupost actiu |
| F3. Identitat i dades | 08-03 | 4-6 | Comptes de servei, BD, buckets, dades sembrades |
| F4. Aplicació | 08-03 | 8-12 | App contenidoritzada desplegada i funcionant |
| F5. CI/CD | 08-03 | 4-6 | Pipeline amb proves, WIF sense claus |
| F6. Dades, analítica i IA | 08-03 | 6-9 | Ingesta, taules analítiques, tauler, component d'IA |
| F7. Exposició i observabilitat | 08-03 | 4-6 | Domini, TLS, balancejador, tauler, alerta, SLO |
| F8. Proves i desplegament | 08-04 | 5-8 | Proves, prova de càrrega, assaig de reversió, go-live |
| F9. Documentació i presentació | 08-05 | 4-6 | Documentació completa, autoavaluació, presentació |
| Total | 48-75 h |
Multiplica per 1,5 si és el teu primer projecte al núvol. No és pessimisme: és l'observació empírica que la primera vegada que configures Workload Identity Federation hi trigues dues hores i la segona, quinze minuts.
Cronograma de referència a sis setmanes
gantt
title Projecte final — pla de 6 setmanes (10 h/setmana)
dateFormat YYYY-MM-DD
axisFormat Set %W
section Preparacio
Triar problema i abast :done, f0, 2026-09-07, 3d
Disseny i ADR :active, f1, after f0, 5d
Fita 1 Disseny revisat :milestone, m1, after f1, 0d
section Construccio
Projectes, xarxa, Terraform :f2, after m1, 5d
Identitat i dades :f3, after f2, 3d
Aplicacio desplegada :f4, after f3, 6d
Fita 2 App viva en dev :milestone, m2, after f4, 0d
section Automatitzacio
CI/CD amb proves :f5, after m2, 4d
Dades, analitica i IA :f6, after f5, 5d
Fita 3 Flux extrem a extrem :milestone, m3, after f6, 0d
section Tancament
Exposicio i observabilitat :f7, after m3, 4d
Proves i go-live :f8, after f7, 4d
Documentacio i presentacio :f9, after f8, 4d
Fita 4 Projecte lliurat :milestone, m4, after f9, 0d
Les quatre fites són punts de control, no adorns. A cadascuna t'atures i comproves:
| Fita | Criteri de pas | Si no el compleixes |
|---|---|---|
| M1 — Disseny revisat | Els tres diagrames existeixen, hi ha ≥3 ADR, l'estimació de cost cap dins del teu límit | No comencis a construir. Retalla abast |
| M2 — App viva en dev | Hi ha una URL que respon i llegeix de la BD | Simplifica l'app. La funcionalitat no és el lliurable |
| M3 — Flux extrem a extrem | Una acció a l'app acaba visible al tauler de control | Redueix el flux de dades a un job nocturn simple |
| M4 — Projecte lliurat | La rúbrica et dona ≥70 i el cost és dins del límit | Prioritza D (seguretat) i C (IaC) sobre funcionalitat nova |
Si vas amb retard, retalla funcionalitat, mai requisits no funcionals. Una aplicació amb dues pantalles, IaC completa i seguretat impecable puntua molt per sobre d'una amb vuit pantalles i un credentials.json al repositori.
- Gestió del risc: els cinc errors que enfonsen un projecte final
Aquests cinc no són «errors habituals». Són les cinc causes per les quals els projectes de porfolio no s'acaben. Reconeix-los ara i tindràs la meitat de la feina feta.
Error 1 — Abast excessiu
Com es manifesta. La setmana 2 afegeixes «seria fàcil encabir-hi també pagaments». La setmana 3, notificacions. La setmana 4, una app mòbil. La setmana 6 tens nou coses a mitges i cap acabada.
Per què passa. Perquè afegir funcionalitat és divertit i acabar no ho és. I perquè l'abast exclòs no estava escrit.
La contramesura. La llista d'exclusions de l'apartat 4, escrita i signada per tu el primer dia. Quan se t'acudeixi alguna cosa nova, no la descartis: apunta-la en un apartat ## Següents passos del README. Això converteix la temptació en un lliurable de la presentació, on puntua.
Error 2 — Començar pel codi
Com es manifesta. El dia u obres l'editor i comences l'aplicació. Tres setmanes després tens una app bonica i cap infraestructura, cap IaC, cap seguretat. I aleshores intentes «ficar-li Terraform» a una cosa que ja existeix, que és el doble de feina.
Per què passa. Perquè programar és el que saps fer i la resta fa mandra.
La contramesura. L'ordre de 08-03: organització → xarxa → identitat → estat → dades → aplicació. L'aplicació és la fase 4 de 8, no la 1. I hi ha una raó tècnica dura: el projectId no es pot canviar i la xarxa no es pot refer sense destruir-ho tot. El que es decideix primer és el que és car de canviar.
Error 3 — Deixar la seguretat per al final
Com es manifesta. Tot amb roles/owner «perquè funcioni ara», una clau JSON descarregada «temporalment», la contrasenya de la BD en una variable del codi. L'última setmana intentes arreglar-ho, ho trenques tot i acabes deixant-ho com estava.
Per què passa. Perquè el mínim privilegi fa mal al principi: cada permís que falta és un error 403 i mitja hora de depuració.
La contramesura. Començar restrictiu i obrir només el que falla. gcloud policy-troubleshoot et diu exactament quin permís falta (ho tens a 03-04). Fa mal la primera setmana i no fa mal mai més. I el bloc D de la rúbrica val 15 punts que es perden sencers si fas això malament.
Error 4 — Oblidar el cost
Com es manifesta. Deixes un clúster de GKE encès un cap de setmana. O un job de Dataflow en streaming. O una instància de Cloud SQL gran «perquè vagi ràpid». El dilluns tens 180 € gastats i el crèdit de prova a la meitat.
Per què passa. Perquè al núvol no veus el maquinari. Un servidor apagat a casa teva no consumeix; una VM encesa al núvol sí, encara que no la facis servir.
La contramesura. Tres coses, totes de l'apartat 7: el pressupost creat abans que res, la revisió de l'informe de costos dues vegades per setmana, i el costum de destruir l'entorn de desenvolupament quan no el facis servir. Això últim és un superpoder que només tens si el teu IaC és de debò:
# Divendres a la tarda
terraform -chdir=infra/envs/dev destroy -auto-approve
# Dissabte al matí
terraform -chdir=infra/envs/dev apply -auto-approveSi això funciona, el teu projecte de desenvolupament costa zero quan no treballes. I de passada estàs executant la prova més dura de RNF-1 cada setmana, gratis.
Error 5 — No documentar sobre la marxa
Com es manifesta. L'última setmana t'asseus a escriure el document d'arquitectura i no recordes per què vas triar Firestore en comptes de Cloud SQL. Escrius una justificació inventada a posteriori, que es nota, i que a més potser no és la raó real.
Per què passa. Perquè documentar sembla que no fa avançar el projecte.
La contramesura. El docs/diario.md. Cada sessió de treball, tres línies:
## 2026-09-14 (2 h)
- Fet: xarxa i subxarxes amb Terraform, primer apply net.
- Decidit: una sola subxarxa /24 a europe-west1. Descartat separar per
entorn perquè cada entorn és un projecte diferent i no es parlen.
- Encallat: Cloud SQL amb IP privada necessita la connexió de servei
privada; se m'oblidava el peering. 40 min perduts.
- Següent: comptes de servei.Tres línies per sessió, vint sessions: seixanta línies que es converteixen soles en el document d'arquitectura, en els ADR i en la meitat de la presentació. És la inversió amb millor retorn de tot el mòdul.
Matriu de risc
| Risc | Probabilitat | Impacte | Mitigació | Senyal primerenc |
|---|---|---|---|---|
| Abast excessiu | Alta | Alt | Exclusions escrites + fites | Setmana 3 sense M2 |
| Començar pel codi | Alta | Alt | Ordre de fases de 08-03 | No hi ha infra/ al commit 20 |
| Seguretat al final | Molt alta | Mitjà | Restrictiu des del dia 1 | Veus roles/editor en un .tf |
| Cost descontrolat | Mitjana | Alt | Pressupost + destroy nocturn | Factura >30 % del límit a la setmana 1 |
| No documentar | Molt alta | Mitjà | diario.md cada sessió |
No hi ha commits a docs/ |
| Bloqueig tècnic llarg | Mitjana | Mitjà | Mètode de 5 passos (apartat 13) | >3 h en el mateix error |
| Abandonament | Mitjana | Total | Fites curtes, abast petit | 10 dies sense un commit |
L'últim és el risc de debò. La mitigació real contra l'abandonament és que el projecte sigui petit i et vingui de gust, que és el que deien els criteris 2 i 5.
- Com treballar amb la documentació oficial
Passaràs una part substancial del projecte llegint documentació. Fer-ho bé és una habilitat, i aquestes són les regles:
1. La documentació oficial és la font. Tota la resta és context. Un blog de 2021, una resposta d'Stack Overflow de 2019 o un vídeo de YouTube poden ajudar-te a entendre un concepte, però no per copiar comandes: la CLI canvia, els rols es reanomenen, els serveis es deprequen. El curs mateix, per molt actualitzat que estigui a 2026, és una foto d'un moment.
2. Les quatre seccions que cal conèixer de cada servei:
| Secció | Per a què serveix | Quan la llegeixes |
|---|---|---|
| Overview / Concepts | Entendre el model mental | Abans de decidir fer-lo servir |
| Quickstart | Fer-lo funcionar en 10 minuts | En començar a construir |
| How-to guides | El cas concret que necessites | Durant la construcció |
| Reference (API/CLI/Terraform) | El paràmetre exacte | Quan alguna cosa no funciona |
| Quotas & limits | El que et limitarà | Abans de dissenyar, no després |
| Pricing | El que costarà | A 08-02, sense excepció |
La secció de quotes i límits és la que menys gent llegeix i la que més disgustos evita. Saber que Cloud Run té un límit de temps de petició, o que BigQuery té un màxim d'operacions de taula al dia, canvia el disseny.
3. El registre de Terraform és tan important com la documentació de GCP. Per a cada recurs que creïs, registry.terraform.io/providers/hashicorp/google/latest/docs et dona els arguments exactes, quins són obligatoris, quins forcen recreació del recurs (ForceNew) i què es pot importar. Aquest ForceNew és la diferència entre un apply de 20 segons i un que destrueix la teva base de dades.
4. Les notes de versió existeixen. Cada servei té la seva pàgina de release notes. Abans de donar per perduda una funcionalitat, mira si va sortir el mes passat.
5. Quan la documentació i el missatge d'error es contradiuen, guanya el missatge d'error. I quan el missatge d'error diu «permission denied», gairebé sempre té raó: no és un bug, et falta un permís.
- Què fer quan alguna cosa no funciona
T'encallaràs. Diverses vegades. El mètode següent resol la gran majoria de bloquejos en menys de vint minuts, i l'important és aplicar-lo en ordre en comptes de provar coses a l'atzar:
Pas 1 — Llegeix l'error sencer. Complet, fins al final, inclòs el details i l'enllaç que de vegades inclou. La meitat dels errors de GCP diuen literalment quin permís falta o quina API cal activar.
# Els errors de l'API queden als registres. Els últims 20:
gcloud logging read 'severity>=ERROR' --limit=20 --format=json --project="${PROYECTO}"Pas 2 — Està activada l'API? És la causa número u d'errors inexplicables la primera setmana:
Pas 3 — És un permís? Si l'error conté 403, PERMISSION_DENIED o does not have permission, és un permís, sense excepció:
gcloud policy-troubleshoot iam "//cloudresourcemanager.googleapis.com/projects/${PROYECTO}" \
--principal-email="mi-sa@${PROYECTO}.iam.gserviceaccount.com" \
--permission="storage.objects.create"Pas 4 — És la xarxa? Si el símptoma és un temps d'espera esgotat i no un rebuig, és xarxa:
gcloud network-management connectivity-tests create prueba-bd \
--source-instance=... --destination-instance=... --destination-port=5432
gcloud network-management connectivity-tests describe prueba-bdPas 5 — El recurs és com et penses? Un describe desmunta la meitat de les hipòtesis equivocades:
I si al cap de vint minuts continues igual: canvia de tasca. Documenta el bloqueig a docs/diario.md amb l'error exacte i el que ja has provat, i vés-te'n a una altra fase. Tornar-hi l'endemà amb el cap fred resol més bloquejos que insistir tres hores seguides. Aquest consell sembla d'autoajuda i és purament estadístic.
- La teva decisió d'avui
Abans de passar a 08-02, cinc coses. No són opcionals i no porten més de dues hores:
- [ ] Triar el problema. Una de les quatre propostes o el teu, validat amb la plantilla de l'apartat 4.
- [ ] Escriure la frase. Una frase sense «i». Enganxa-la a la primera línia del
README. - [ ] Escriure les cinc exclusions. El que el teu projecte no farà.
- [ ] Fixar el límit de cost. Un número en euros al mes, escrit al
README. - [ ] Crear el repositori amb l'esquelet de carpetes i el primer commit.
Si no pots fer les cinc avui, el teu problema encara no està triat. Torna a l'apartat 2.
Errors Habituals i Consells
Triar un problema que no entens perquè sona impressionant. «Plataforma d'anàlisi de risc creditici amb IA» sona millor que «reserves de refugis» fins que et toca modelar el risc creditici. En una entrevista, un projecte senzill ben explicat guanya sempre a un de complex que balbucejes.
Confondre «complet» amb «gran». El projecte s'avalua per capes cobertes, no per funcionalitat. Dues pantalles amb IaC, CI/CD, SLO i seguretat valen 80 punts; quinze pantalles sense res d'això valen 45.
Crear els projectes de GCP abans d'haver llegit 08-02. El projectId és immutable. Si crees test-1234 perquè tenies pressa, ho ensenyaràs a l'entrevista. Espera't a la lliçó de disseny, on es decideix la convenció de noms.
Fer servir el crèdit de prova com si fos infinit. 300 USD semblen molt fins que deixes un GKE encès: un clúster estàndard de tres nodes es menja uns 100 € al mes ell sol. Cloud Run escala a zero; GKE Autopilot no costa zero però costa poc; GKE estàndard costa des del minut u.
Deixar el component d'IA per al final i triar entrenar un model. És l'ordre invers al correcte: posa l'API preentrenada a la fase 6 (dues hores, funciona) i només si sobra temps, substitueix-la per un model propi. Un component d'IA senzill que funciona val els 3 punts; un d'ambiciós a mitges val 0.
No llegir la rúbrica fins al final. La rúbrica és el plec. Tot el que facis que no estigui a la rúbrica és temps que no puntua. Tingues-la oberta en una pestanya durant tot el mòdul.
Consell: fes un git commit al final de cada sessió, encara que no funcioni. L'historial de commits és un lliurable en si mateix: un repositori amb 60 commits distribuïts en sis setmanes explica una història de feina real. Un amb 3 commits gegants n'explica una altra.
Consell: desa totes les captures i tots els números des del principi. La captura del tauler el dia que va funcionar, el resultat de la primera prova de càrrega, la factura del primer mes. A 08-05 els necessitaràs i reconstruir-los és impossible.
Consell: posa una alarma real al calendari. Dues sessions fixes per setmana, al calendari, amb nom. Els projectes personals no moren per dificultat tècnica: moren perquè mai no hi ha un moment.
Exercicis
Els exercicis d'aquest mòdul són fites del teu propi projecte. Les solucions mostren la mateixa fita resolta sobre RefugioReserva, el projecte de referència, perquè tinguis un model sense poder copiar el teu.
Exercici 1 — Defineix i acota el teu projecte
Tria el teu problema i omple la plantilla de validació de l'apartat 4 completa: nom, frase d'una línia sense «i», el problema amb el seu usuari, abast inclòs (màxim 5 punts), abast exclòs (mínim 5 punts), la taula de com compleixes els sis requisits funcionals, l'origen i volum de les dades fictícies i el risc principal.
Després, puntua la teva idea amb la taula de decisió dels cinc criteris. Si algun criteri treu menys de 3, canvia d'idea o ajusta-la fins que pugi.
Exercici 2 — Fixa la teva restricció de cost i crea-la
Decideix el teu límit mensual, justifica'l en dues línies i crea el pressupost real al teu compte de facturació amb llindars al 50, 90 i 100 %. Documenta en una taula quins serveis esperes fer servir, amb quina configuració mínima i quin ordre de magnitud de cost tens al cap (l'afinaràs a 08-02 amb la calculadora).
A més, escriu la resposta a aquesta pregunta: si d'aquí a tres setmanes descobreixes que vas al 200 % del teu límit, què és el primer que apagues? Aquest ordre de prioritat escrit per endavant és el que et salva de decidir amb pressa.
Exercici 3 — Planifica i prepara el terreny
Adapta el cronograma de l'apartat 10 a la teva disponibilitat real (hores per setmana que pots dedicar de debò, no les que t'agradaria). Produeix un diagrama mermaid amb les teves dates i les teves quatre fites, i per a cada fita escriu el seu criteri de pas i què retallaries si no el compleixes.
Crea el repositori amb l'esquelet de carpetes de l'apartat 8, el README.md amb la frase del projecte, les exclusions i el límit de cost, i el docs/diario.md amb la seva primera entrada. Fes el primer commit.
Solucions
Solució 1 — Definició i acotació de RefugioReserva
# Validació d'idea de projecte
**Nom del projecte:** RefugioReserva
**Una frase:** Plataforma on un excursionista consulta i reserva places
als refugis d'una federació de muntanya.
## El problema
La Federació Pirinenca de Muntanya (fictícia) gestiona 12 refugis. Les
reserves es fan per telèfon, entre les 18:00 i les 20:00, i s'apunten
en un full de càlcul per refugi. Conseqüències: sobrevenda en caps de
setmana d'agost (va passar 7 vegades l'any passat), el guarda no sap quant
menjar preparar fins que arriba la gent, i la federació no té dades
per decidir en quin refugi invertir.
## Abast INCLÒS
1. Cerca pública de disponibilitat per refugi i data.
2. Reserva amb dades de contacte i confirmació (sense pagament).
3. Zona privada del guarda: reserves del dia i del cap de setmana.
4. Pujada de fotos del refugi amb generació de miniatura automàtica.
5. Tauler de control d'ocupació i opinions per a la federació.
## Abast EXPLÍCITAMENT EXCLÒS
1. **Pagaments.** No hi ha passarel·la. La reserva es paga al refugi.
2. **Aplicació mòbil.** Només web adaptativa.
3. **Multiidioma.** Només castellà.
4. **Gestió de personal, torns o inventari del refugi.**
5. **Notificacions reals per correu o SMS.** Es registra l'esdeveniment i es
simula l'enviament; no es contracta proveïdor de correu.
6. **Rols més enllà de tres:** visitant, guarda, federació.
7. **Modificació o cancel·lació per part de l'excursionista.** Es cancel·la
trucant al refugi (igual que avui).
## Com compleix els requisits obligatoris
| Requisit | Com el compleix |
| --- | --- |
| App web contenidoritzada | Servei Python (FastAPI) a Cloud Run `refugio-web` |
| Emmagatzematge d'objectes | Bucket `refugio-fotos` amb originals i miniatures |
| Base de dades gestionada | Cloud SQL PostgreSQL `refugio-db`, IP privada, BD `reservas` |
| Ingesta / processament | Cada reserva publica al topic `reservas-eventos`; una funció ho escriu a BigQuery |
| Tauler de control | Looker Studio sobre `refugio_analitica.reservas_diarias` |
| Component d'IA | Anàlisi de sentiment de les opinions amb l'API de Natural Language |
## Dades
100 % inventades, generades amb `data/seed/generar.py`:
- 12 refugis (nom, altitud, capacitat, coordenades fictícies del Pirineu).
- 2.000 reserves en 18 mesos, amb estacionalitat: juliol i agost x4,
caps de setmana x2,5, febrer mínim.
- 400 opinions en text lliure (plantilles combinades, to variat).
- 3 guardes i 1 usuari de federació, amb correus `@example.com`.
## Risc principal
La condició de cursa en reservar l'última plaça. Si ho resolc malament,
la funcionalitat central està trencada. Mitigació: transacció amb bloqueig
de fila a PostgreSQL i una prova d'integració concurrent que ho
demostri (serà la meva prova automatitzada obligatòria de RNF-2).Puntuació amb la taula de decisió:
| Criteri | Nota | Raó |
|---|---|---|
| Domini conegut | 5 | He dormit en refugis; sé com funciona una reserva |
| Abast acotat | 5 | Una frase sense «i», set exclusions escrites |
| Dades fictícies | 5 | Un script de 70 línies les genera |
| Diverses capes | 4 | El streaming és fluix (un topic i una funció), la resta sobra |
| Interès | 4 | M'agrada el tema; no és apassionant però no m'avorrirà |
| Total | 23/25 | Endavant |
Solució 2 — Restricció de cost de RefugioReserva
Límit fixat: 12 € al mes. Justificació: el crèdit de prova ja està consumit, i vull que el projecte pugui quedar-se encès indefinidament com a peça de porfolio sense que em faci mal. 12 € és aproximadament el que costa un domini (prorratejat) més una instància mínima de base de dades.
| Servei | Configuració | Cost esperat/mes | Notes |
|---|---|---|---|
Cloud Run refugio-web |
1 vCPU, 512 MiB, min-instances=0 | 0-1 € | Escala a zero; el trànsit de porfolio és gairebé nul |
| Cloud SQL PostgreSQL | db-f1-micro, 10 GB HDD, sense HA |
7-9 € | La partida gran. Sense HA expressament: és un projecte de porfolio |
| Cloud Storage | ~2 GB, Standard, amb cicle de vida a Nearline als 90 dies | <0,10 € | |
| BigQuery | <1 GB emmagatzemat, <5 GB consultats/mes | 0 € | Dins del nivell gratuït |
| Pub/Sub | ~2.000 missatges/mes | 0 € | Dins del nivell gratuït |
| Cloud Functions | ~2.000 invocacions/mes | 0 € | Dins del nivell gratuït |
| Natural Language API | ~400 documents, una sola vegada | <0,50 € | S'analitza en sembrar, no a cada càrrega |
| Artifact Registry | ~2 GB d'imatges | 0,20 € | Amb política de neteja a 10 versions |
| Cloud Logging | Retenció 30 dies, <5 GB | 0 € | Dins del nivell gratuït |
Domini (refugioreserva.example) |
Registrador extern | ~1 €/mes | 12 €/any prorratejat |
| Total estimat | ~10 €/mes | Marge de 2 € sobre el límit |
Totes aquestes xifres són ordres de magnitud a data d'escriptura i per a
europe-west1. Cal refer-les amb la calculadora oficial a 08-02 abans de donar el disseny per bo.
Si arribo al 200 % (24 €/mes), aquest és l'ordre d'apagada, decidit per endavant:
- Apagar Cloud SQL fora de l'horari de treball amb un job programat (arrenca a les 9, s'atura a les 23). Estalvi immediat: ~60 % de la partida gran. Risc: la demo no funciona de matinada; assumible.
- Reduir la retenció de registres a 7 dies i desactivar els registres d'accés a dades si els hagués activat.
- Buidar Artifact Registry deixant només les 3 últimes imatges.
- Migrar de Cloud SQL a Firestore. És la mesura nuclear: elimina el 80 % del cost però implica refer la capa de dades. Només si les tres anteriors no basten, i seria un ADR nou amb les seves conseqüències.
- Destruir l'entorn de desenvolupament i treballar només contra producció, amb més cura.
El que no faria: treure el balancejador o el certificat (trenca RNF-5), ni desactivar el monitoratge (trenca RNF-6). Retallar requisits no funcionals per estalviar 2 € és canviar 15 punts de rúbrica pel preu d'un cafè.
Solució 3 — Pla i terreny de RefugioReserva
Disponibilitat real declarada: 8 hores per setmana (dues tardes de 2 h entre setmana + 4 h el dissabte). Sobre una estimació de 50 hores, en surten 7 setmanes amb una mica de marge, no 6. És preferible reconèixer-ho ara que anar amb retard des de la setmana 1.
gantt
title RefugioReserva — 7 setmanes a 8 h/setmana
dateFormat YYYY-MM-DD
axisFormat %d %b
section Disseny
Requisits i abast :done, a1, 2026-09-07, 2d
Disseny, ADR, cost :a2, 2026-09-09, 6d
M1 Disseny revisat :milestone, m1, 2026-09-15, 0d
section Base
Projectes, APIs, pressupost :b1, 2026-09-15, 3d
Terraform, xarxa, firewall :b2, 2026-09-18, 5d
Identitat i comptes :b3, 2026-09-23, 3d
Cloud SQL, buckets, llavor :b4, 2026-09-26, 4d
section Aplicacio
App FastAPI i contenidor :c1, 2026-09-30, 6d
Primer desplegament en dev :c2, 2026-10-06, 2d
M2 App viva en dev :milestone, m2, 2026-10-08, 0d
section Automatitzacio
CI/CD amb WIF i proves :d1, 2026-10-08, 5d
Pub/Sub, BigQuery, tauler :d2, 2026-10-13, 5d
Sentiment amb NL API :d3, 2026-10-18, 2d
M3 Extrem a extrem :milestone, m3, 2026-10-20, 0d
section Tancament
DNS, TLS, balancejador, CDN :e1, 2026-10-20, 3d
Tauler, alerta, SLO :e2, 2026-10-23, 3d
Proves, carrega, go-live :e3, 2026-10-26, 5d
Docs, rubrica, presentacio :e4, 2026-10-31, 5d
M4 Lliurat :milestone, m4, 2026-11-05, 0d
| Fita | Data | Criteri de pas | Què retallo si no hi arribo |
|---|---|---|---|
| M1 | 15 set | 3 diagrames, 4 ADR, cost estimat ≤12 € | Res: si el disseny no hi és, no es construeix. Es retarda una setmana |
| M2 | 8 oct | https://dev.refugioreserva.example respon i llista refugis des de Cloud SQL |
Trec la zona del guarda; queda només la cerca pública |
| M3 | 20 oct | Una reserva a la web apareix al tauler de Looker Studio en <10 min | Substitueixo Pub/Sub per un job nocturn que copia la taula a BigQuery |
| M4 | 5 nov | Rúbrica ≥70, cost real ≤12 €, presentació gravada | Trec la prova de càrrega i la CDN; totes dues sumen menys que la documentació |
El terreny preparat:
mkdir -p refugioreserva/{app/{src,tests},infra/{modules,envs/{dev,prod}},data/{seed,sql},ml,docs/{adr,presentacion}}
cd refugioreserva
git init -b main
cat > README.md <<'EOF'
# RefugioReserva
Plataforma on un excursionista consulta i reserva places als refugis
d'una federació de muntanya fictícia.
> Projecte final del curs de Google Cloud Platform. **Totes les dades són
> inventades.** No conté ni ha contingut mai dades reals de persones
> ni d'organitzacions.
## Límit de cost
**12 € al mes.** Pressupost amb alertes al 50/90/100 % creat el 2026-09-07.
## Fora d'abast (expressament)
Pagaments · app mòbil · multiidioma · gestió de personal · notificacions
reals · rols addicionals · cancel·lació en línia.
## Estat
🚧 En construcció. Vegeu `docs/diario.md`.
EOF
cat > docs/diario.md <<'EOF'
# Diari de decisions
## 2026-09-07 (2 h)
- Fet: triada la idea (RefugioReserva), validada amb la plantilla, 23/25.
- Decidit: límit de cost 12 €/mes. Descartat fer servir el crèdit de prova
perquè ja està consumit i vull que el projecte segueixi viu després.
- Decidit: 7 setmanes en comptes de 6. Només tinc 8 h reals per setmana.
- Següent: disseny (08-02). NO crear encara cap projecte de GCP:
la convenció de noms es decideix al disseny i el projectId no es canvia.
EOF
printf '%s\n' '*.tfstate' '*.tfstate.*' '.terraform/' '*.tfvars' \
'__pycache__/' '.env' '*credentials*.json' '*.key' > .gitignore
for d in app infra data ml docs; do echo "# $d" > "$d/README.md"; done
git add -A && git commit -m "Estructura inicial del projecte RefugioReserva"Fixa't en dos detalls del .gitignore: *.tfvars i *credentials*.json. El primer evita pujar valors per entorn que de vegades porten secrets; el segon és una xarxa de seguretat per si algun dia, amb pressa, descarregues una clau. No n'hauries de descarregar cap —RNF-3—, però la xarxa de seguretat no fa nosa.
I fixa't sobretot en l'última línia del diari: no crear encara cap projecte de GCP. És la disciplina que separa aquest mòdul d'un tutorial.
Conclusió
Ja tens el plec de condicions complet.
Saps què se't demana: una plataforma completa de principi a fi, no una demo, amb totes les capes del curs connectades i explicades. I saps què no se't demana, que és igual d'important: ni bellesa, ni escala, ni models propis, ni alta disponibilitat.
Saps triar el problema amb cinc criteris per ordre —domini conegut, abast en una frase sense «i», dades inventables, diverses capes naturals i que et vingui de gust— i tens quatre propostes desenvolupades amb les seves dades, la seva dificultat i els seus riscos, a més de l'opció de portar la teva amb una regla que no es negocia: dades reals, mai, ni «anonimitzades», ni de la teva empresa, per motius legals, contractuals i pràctics.
Tens els sis requisits funcionals amb el seu criteri de «fet» i la comanda que ho verifica, i els vuit no funcionals que separen un projecte d'una demo: IaC reproduïble, CI/CD amb prova, mínim privilegi sense claus JSON, secrets gestionats, HTTPS propi, tauler i alerta, un SLO mesurat i un pressupost amb avís.
Tens la restricció de cost entesa com el que és: no un inconvenient, sinó el requisit que t'obliga a prendre les mateixes decisions que es prenen en una empresa —escalar a zero, la instància més petita que compleix, particionar, apagar el que no es fa servir— i amb el recordatori que un pressupost avisa però no impedeix.
Tens els set lliurables amb el seu format i la seva ubicació, la rúbrica de 100 punts repartida en set blocs amb criteris verificables un a un, i la lectura honesta de la puntuació, inclòs l'avís que un 98 probablement vol dir que t'has puntuat amb benevolència.
Tens la planificació: 48-75 hores repartides en deu fases, un cronograma de referència amb quatre fites i, a cadascuna, el seu criteri de pas i què retallar si no hi arribes —sempre funcionalitat, mai requisits no funcionals.
I tens els cinc errors que enfonsen un projecte final, amb el seu símptoma, la seva causa i la seva contramesura: abast excessiu (exclusions escrites), començar pel codi (l'ordre de fases, perquè el projectId no es canvia), seguretat al final (restrictiu des del dia u i policy-troubleshoot com a aliat), oblidar el cost (pressupost primer i destroy els divendres) i no documentar sobre la marxa (tres línies de diari per sessió, la inversió amb millor retorn del mòdul).
A la propera lliçó, 08-02, passes del plec al plànol: traduir cada requisit a un servei concret amb la seva justificació i la seva alternativa descartada, dibuixar els tres diagrames que serveixen, decidir l'estructura de projectes i la convenció de noms abans de crear res, dissenyar la xarxa i la identitat sobre paper, modelar les dades amb el seu cicle de vida, estimar el cost amb la calculadora i comparar-lo amb el teu límit, definir els teus SLO i escriure els teus primers ADR.
I no toquis la consola de GCP fins llavors. El projectId no es canvia.
Curs de Google Cloud Platform (GCP)
Mòdul 1: Introducció a Google Cloud Platform
- Què és Google Cloud Platform?
- Configuració del teu compte de GCP
- Descripció general de la consola de GCP
- Projectes, jerarquia de recursos i facturació
- Regions, zones i model de responsabilitat compartida
- Cloud Shell i la CLI de gcloud
Mòdul 2: Serveis principals de GCP
- Compute Engine: màquines virtuals a Google Cloud
- Cloud Storage: emmagatzematge d'objectes
- Cloud SQL: bases de dades relacionals gestionades
- App Engine: plataforma com a servei
- Google Kubernetes Engine (GKE)
- Bases de dades NoSQL: Firestore, Bigtable i Spanner
- Com triar el servei de còmput adequat
Mòdul 3: Xarxes i seguretat
- Xarxes VPC
- Balanceig de càrrega al núvol
- Cloud CDN
- Gestió d'identitat i accés (IAM)
- Cloud Armor
- Secrets i xifratge: Secret Manager i Cloud KMS
- Cloud DNS, certificats TLS i publicació segura de serveis
Mòdul 4: Dades i anàlisi
- BigQuery: el magatzem de dades analític
- Cloud Dataflow: processament de dades per lots i en temps real
- Cloud Dataproc: Spark i Hadoop gestionats
- Cloud Pub/Sub: missatgeria asíncrona
- Cloud Data Fusion: integració de dades sense codi
- Orquestració de pipelines amb Cloud Composer i Workflows
- Govern de les dades i taulers amb Dataplex i Looker Studio
Mòdul 5: Aprenentatge automàtic i IA
- Vertex AI: la plataforma d'aprenentatge automàtic de GCP
- AutoML: models a mida sense escriure codi
- TensorFlow a GCP: entrenament i servei de models
- API de llenguatge natural
- API de visió
- IA generativa a Vertex AI: models Gemini i incrustacions
- MLOps: del model al producte amb Vertex AI Pipelines
Mòdul 6: DevOps i monitoratge
- Cloud Build: integració contínua a GCP
- Cloud Source Repositories i gestió del codi font
- Cloud Functions: funcions sense servidor
- Cloud Monitoring (abans Stackdriver): mètriques, taulers i alertes
- Cloud Deployment Manager i infraestructura com a codi nativa
- Cloud Logging i Cloud Trace: registres, traces i diagnòstic
- Terraform a GCP: infraestructura com a codi a la pràctica
Mòdul 7: Temes avançats de GCP
- Híbrid i multinúvol amb Anthos
- Computació sense servidor amb Cloud Run
- Xarxes avançades: VPC compartida, aparellament i connectivitat híbrida
- Bones pràctiques de seguretat
- Gestió i optimització de costos
- Fiabilitat: SLO, alta disponibilitat i recuperació de desastres
- Govern a escala: organització, polítiques i auditoria
