Functional Requirements Get You to 10 Users

▶ Watch (0:05)

Drawing boxes on a whiteboard, user to front end to API to database, tells you what the system does. It says nothing about what happens when a marketing campaign sends traffic up 20 times on day one, when one failed component takes the whole system down, or when a vulnerability leaks user data. The boxes stay the same. The design changes completely once you add scale, resilience, and security as hard requirements.

Why the Platform Cannot Do This Alone

▶ Watch (15:10)

Krzywda divides every NFR into two columns: what the platform covers and what developers must still implement. Platforms provide a replicated database with backups, a logging stack with retention and alerting, container image vulnerability scanning, and a hardened Kubernetes cluster with security configurations on by default. Developers must manage database credentials, write structured logs to standard output in multi-line JSON, keep dependencies patched, specify resource quotas, and implement fine-grained network policies for every component.

Observability: What the Logging Stack Actually Looks Like

▶ Watch (17:42)

The reference architecture runs Fluentd agents on each Kubernetes node. Those agents normalize, filter, and ship logs from all microservices to OpenSearch. OpenSearch runs in a separate Kubernetes cluster to meet tamper-proof log protection requirements. Developers write exceptions and errors to standard output using structured multi-line JSON. They also own application-specific dashboards and log-based alerts. The platform automates collection and indexing. Developers own signal quality and operational context.

Continuous Delivery: Push vs. Pull

▶ Watch (20:46)

Two deployment patterns appear in the reference diagram. Push style: GitHub Actions sends changes from outside into the Kubernetes cluster. Pull style: Argo CD watches a Git repository and applies changes from inside the cluster. Platforms should package both options into a golden path, a standardized deployment approach all application teams can follow. Developers write the automated tests that run during CI and then use the golden path rather than inventing their own release process.

Security: Four Principles Mapped to Kubernetes Primitives

▶ Watch (21:16)

Security by design means hardened Kubernetes defaults enforced automatically. Minimal need to know means namespaces configured to enforce restricted pod security standards, and container images built with a non-root user. Defense in depth means image scanning blocks high-severity vulnerabilities before production, resource quotas support scheduling, and network policies minimize blast radius when a component is compromised. Developers implement all three by keeping dependencies patched, sizing resource quotas accurately, and writing fine-grained network policies per component.

Resilience: Probes and Graceful Shutdown

▶ Watch (24:08)

Kubernetes resilience requires multiple control plane nodes at the platform level. At the application level, developers must implement startup, readiness, and liveness probes correctly. Krzywda gives three concrete patterns: fail the startup probe during database migration to extend that phase’s timeout; fail the readiness probe when a downstream service is unavailable; and handle SIGTERM by failing readiness, draining connections, then exiting cleanly. That sequence enables hitless rolling updates. The Velcin project at elastisys.io lists all 47 NFRs in full.

Notable Quotes

functional requirements tell you what the system should do and non-functional requirements decide where whether you can keep going under load under failure and under attack. Jakub Krzywda · ▶ 02:00

CI allows software teams to turn every code into either a concrete failure or a viable release candidate. Jakub Krzywda · ▶ 09:08

require uh configuring network policies the internal Kubernetes firewall rules to minimize the blast radius in case an application component is compromised. Jakub Krzywda · ▶ 23:19

handling a sick term by failing the readiness probe draining connections uh and exiting gracefully to allow hitless uh rolling updates Jakub Krzywda · ▶ 25:13

Key Takeaways

  • Platforms cover infrastructure guarantees; developers must still earn application-level NFR compliance.
  • Fluentd agents plus a separate OpenSearch cluster satisfy tamper-proof log protection requirements.
  • Correct probe implementation, startup, readiness, and liveness, enables hitless rolling updates on Kubernetes.

About the Speaker(s)

Jakub Krzywda is the Cloud Native Architect and Training Manager at Elastisys, a CNCF Ambassador, a Linux Foundation Authorized Instructor, and a Kubestronaut. He helps organizations adopt cloud native technologies and DevOps practices through training and consultancy.