Interview Coach · privat
Nuvibit Interview Coach · Ali Chaghou
Code lesen, Architektur erklären, ehrlich bleiben
Ich muss morgen nicht beweisen, dass ich eine fertige Landing Zone gebaut habe. Ich muss zeigen, dass ich Code lesen, Architekturentscheidungen erklären und ehrlich zwischen Implementierung, Stub und nächstem Schritt unterscheiden kann.
Ich zeige nicht: „Hier ist viel Terraform." Ich zeige:
- Hier ist die Ressource.
- Das würde in AWS entstehen.
- Das ist die Architekturentscheidung.
- Das ist die Grenze.
- Das wäre der nächste Schritt.
Meine Gesprächshaltung
- Ruhig bleiben — Tempo rausnehmen, lieber einen Satz weniger.
- Nicht größer sprechen als das Repo. Ein Modul tief, der Rest ehrlich umrissen.
- Scope zuerst setzen, bevor ich Code öffne.
- Code nicht nur zeigen, sondern erklären — Ressource, AWS-Wirkung, Entscheidung, Grenze.
- Bei fehlenden Dingen ehrlich: „Das ist bewusst nicht implementiert und wäre mein nächster Schritt."
Opening für das Gespräch
Ich habe dieses Showcase nicht gebaut, um eine vollständige Landing Zone vorzutäuschen. Mir ging es darum, einen Kernbereich wirklich zu verstehen: das core-network. Ich möchte zeigen, wie ich eine Architekturidee in Terraform übersetze, welche Entscheidungen ich bewusst getroffen habe und wo ich die Grenzen offen benenne.
Code-Demo in 10 Minuten
-
README.mdZeige: Status-Tabelle (implementiert vs. Stub).Sage: „Ich setze zuerst den Scope: Das ist ein Showcase, kein produktives Deployment."Nachfrage: „Warum nur ein Modul tief?" → ADR-001 in DECISIONS.md.
-
docs/DECISIONS.mdZeige: ADR-001.Sage: „Hier sieht man, dass ich bewusst ein Modul tief gebaut habe, statt viele oberflächlich vorzutäuschen."Nachfrage: „Was hätte Breite gebracht?" → „Weniger Verteidigbarkeit. Tiefe zeigt Verständnis."
-
modules/core-network/main.tfZeige: Datei von oben.Sage: „Das ist der technische Kern. Ich gehe von oben nach unten durch die Ressourcen."
-
aws_ec2_transit_gateway · Z. 48–78Sage: „Hier entsteht der zentrale Transit Gateway als Netzwerk-Hub."Nachfrage: „Warum TGW statt Peering?" → „Peering ist nicht transitiv und wird zum n²-Mesh; TGW ist ein transitiver Hub mit Segmentierung über Route Tables."
-
default_route_table_association/propagation = "disable" · Z. 60/61Sage: „Die zentrale Entscheidung: Default-Association und -Propagation deaktiviert, damit jedes Attachment bewusst zugeordnet werden muss."Nachfrage: „Was passiert sonst?" → „Flaches Netz, jeder sieht jeden."
-
aws_ec2_transit_gateway_route_table · Z. 85–93Sage: „Getrennte Route Tables für Hub, Prod, Dev und On-Prem — Segmentierung über Routing, nicht über Security Groups."
-
aws_ec2_transit_gateway_vpc_attachment · Z. 101–121Sage: „Hier würden Spoke-VPCs an den TGW gehängt — parametrisiert, nicht auf eine Umgebung verdrahtet."Nachfrage: „Was ist appliance_mode_support (Z. 111)?" → „Stateful Inspection braucht Hin-/Rückweg über dieselbe AZ — deshalb der Schalter."
-
association · Z. 128–133 | propagation · Z. 143–148Sage: „Die wichtigste Stelle. Association = welche Route Table ein Attachment nutzt. Propagation = wo die Route dieses Attachments sichtbar wird."Nachfrage: „Unterschied in einem Satz?" → „Association = wohin ich route; Propagation = wer mich sieht."
-
RAM · Z. 182–212Sage: „Der TGW wird per RAM geteilt: externe Principals ausgeschlossen (Z. 189), Share an die Workloads-OU (Z. 207–212)."Nachfrage: „Warum OU statt Account-IDs?" → „Neue Accounts in der OU erben den Share automatisch — kein Re-Sharing."
-
modules/core-network/variables.tfSage: „Hier das Modul-Interface: was ich steuern kann, was parametrisiert ist, was nur vorbereitet ist."
-
network_firewall_enabled · variables.tf Z. 28Sage: „Das ist bewusst nur vorbereitet und nicht implementiert. Ich würde nicht behaupten, dass Network Firewall gebaut ist."
Code-Reading-Runbook
Jede Karte: Was entsteht in AWS · Warum wichtig · Was ich sage · Nachfrage · Gute Antwort. Zeilennummern gegen den aktuellen Repo-Stand geprüft.
A · modules/core-network/main.tf
locals / attachment_propagationsZ. 21–43
aws_ec2_transit_gatewayZ. 48–78
default_route_table_association = "disable"Z. 60
default_route_table_propagation = "disable"Z. 61
auto_accept_shared_attachments = "enable"Z. 66
aws_ec2_transit_gateway_route_tableZ. 85–93
aws_ec2_transit_gateway_vpc_attachmentZ. 101–121
aws_ec2_transit_gateway_route_table_associationZ. 128–133
aws_ec2_transit_gateway_route_table_propagationZ. 143–148
aws_ec2_transit_gateway_routeZ. 155–169
aws_ram_sharing_with_organizationZ. 177–179
aws_ram_resource_share · allow_external_principals=falseZ. 182–194
aws_ram_resource_associationZ. 197–202
aws_ram_principal_association · Workloads-OUZ. 207–212
B · modules/core-network/variables.tf
transit_gateway_enabledZ. 22
network_firewall_enabled · vorbereitet, nicht gebautZ. 28
transit_gateway_route_tablesZ. 90
vpc_attachments · associated_route_table vs. propagate_toZ. 104
transit_gateway_static_routesZ. 124
enable_ram_share · workloads_ou_arn · enable_ram_organization_sharingZ. 143 · 149 · 160
C · modules/core-network/outputs.tf
transit_gateway_id / _arn · one(...)-LogikZ. 5–13
transit_gateway_route_table_ids · vpc_attachment_ids · ram_resource_share_arnZ. 24 · 29 · 34
D · modules/organizations/main.tf
aws_organizations_organization · Trusted ServicesZ. 36–48
OUs · root_ous + workload_envsZ. 51–68
Basis-SCPs · DenyRootUserAccess + RequireMFAForConsoleZ. 71 · 92 · 119
E · modules/account-factory/main.tf
aws_organizations_account · Audit / Log-Archive / WorkloadZ. 54 · 62 · 70
aws_iam_role.account_baseline · root-Kopplung + bekannte GrenzeZ. 90–110
Harte Fragen, ruhige Antworten
Hast du das wirklich deployed?
Warum ist es nicht production-ready?
Wie würdest du es production-ready machen?
Warum Transit Gateway? Warum nicht VPC Peering?
Was ist Association vs. Propagation?
Wie verhinderst du, dass Dev Prod erreicht?
Wo ist Network Firewall?
Wo wird Security erzwungen?
Was hast du persönlich gebaut?
Was ist nur Stub?
Was würdest du als nächsten Schritt bauen?
Wie würdest du CI/CD dafür bauen?
Wie würdest du das testen?
Wo könnte dein Code aktuell noch verbessert werden?
Drei Zeitvarianten
5 Minuten
- README — Scope/Status
- DECISIONS — ein Modul tief
- core-network/main.tf — disable + Association/Propagation
- eine Grenze nennen
Kernbotschaft„Ein Modul tief — ich verstehe TGW-Segmentierung."
10 Minuten
- README + DECISIONS
- TGW + disable
- Association / Propagation
- RAM an OU
- Scope-Grenze Network Firewall
Kernbotschaft„Ich treffe bewusste, dokumentierte Entscheidungen."
20 Minuten
- 10-Minuten-Plan
- + variables.tf (Interface)
- + outputs.tf (one-Logik)
- + organizations (OUs/SCPs)
- + account-factory (ehrlich)
- + Stubs + nächste Schritte
Kernbotschaft„Ich weiß, was ich gebaut habe, was nicht — und warum."
Wenn ich unsicher werde, sage ich:
- „Das ist in diesem Showcase bewusst nicht implementiert. Ich habe es als nächsten Schritt dokumentiert."
- „Ich möchte hier nicht größer sprechen als das Repo ist."
- „Ich kann erklären, was gebaut ist, was Stub ist und was ich als nächstes sauber ergänzen würde."
- „Der Fokus liegt auf core-network, nicht auf einer vollständigen Landing Zone."
- „Ich habe das nicht deployed, weil ich kein produktives Setup vortäuschen wollte."
Drei Sätze, die ich fast auswendig kann
- „Ich habe bewusst keinen fertigen Landing-Zone-Anspruch formuliert, sondern ein Terraform-Showcase gebaut, das einen Kernbereich sauber erklärt: das core-network."
- „Die wichtigste Designentscheidung ist, Default Association und Default Propagation am Transit Gateway zu deaktivieren, damit Segmentierung nicht zufällig, sondern bewusst entsteht."
- „Was nicht implementiert ist, benenne ich offen — zum Beispiel Network Firewall, echtes Deployment, CI/CD und produktive Betriebsfähigkeit."