๐งญ The idea Knowing how to code is not enough. In real use, good architecture, secure design, and scale matter more than raw syntax. AI is a strong tool. It does not replace the judgment and care of an engineer.
Why looks like it works is not enough
AI can create code that looks fine in a few seconds. That is not the hard part. The hard part is keeping that code safe, observable, resilient, and compliant over time.
Common problems in production from AI generated code
- Security gaps. Missing input checks, auth, encryption in transit and at rest, secret rotation.
- Non functional needs ignored. Latency targets, graceful fallbacks, back pressure, retries, circuit breakers.
- Compliance blind spots. POPIA and GDPR data minimisation, retention rules, audit trails, PCI handling.
Anti pattern
// naive logging leaks PII or secrets
app.post("/payments", (req, res) => {
console.log("REQ", req.body); // do not log card or email or tokens
// ...
});
Production posture
// redact and least privilege with auth
app.post("/payments", withAuth("payments:create"), (req, res) => {
log.info(
"payments.request",
{ amount: req.body.amount, currency: req.body.currency },
{ pii: "redact" } // server logger handles redaction
);
// ...
});
โ ๏ธ Rule of thumb If a change does not improve security, reliability, or day to day operation, it is not done, even if the demo runs.
AI is a tool, not a replacement
AI speeds up the easy part. Boilerplate, scaffolding, adapters. It cannot
- Take responsibility for correctness or safety
- Weigh trade offs across cost, maintenance, and risk
- Resolve unclear requirements or handle legal and compliance rules
Use AI as a helper. Pair with it. Keep your architecture guard rails, linters, tests, threat models, and review checklists.
Vibe coding and real delivery
A quick AI prototype is not the same as a real product. The gap is the work you do not see in a demo.
- Deployment. Environments, secrets, migrations, rollbacks
- Scaling. Auto scale rules, read and write separation, queues, idempotency
- Monitoring. Traces, RED and USE metrics, service level objectives, on call runbooks
- Security. Identity access rules, token scopes, key management, web firewalls, rate limits
- Process. Continuous integration and delivery, test pyramid, feature flags, canaries, incident response
๐ก A simple signal to remember Twenty percent code and eighty percent everything else. Delivering software needs operations, quality assurance, infrastructure, compliance, user experience, and many rounds of iteration. Without systems thinking, side projects stop at it runs on my laptop.
Job market and earning it
The junior market is tough. The baseline moved. AI raised the floor for pure coding speed. Teams now expect juniors who can
- Use AI well and still know the basics
- Join talks about architecture, security, and operations
- Deliver features end to end with care and ownership
The juniors who win pair AI with discipline. Small pull requests. Tests. Observability. Continuous integration. A habit of delivery to production.
โ Career unlock Build two or three tiny real systems end to end. Add auth, billing, background jobs, and observability. Your portfolio will speak louder than any CV.
The opportunity shift
Serverless, managed services, and the API world let small teams build big things.
- Prototype in weeks, not months
- Run on small budgets with pay as you go
- Deliver small software products that once needed full teams
This is the space we aim for with products like CashGrip and ElevateFlips. Lean systems with clear value, built on solid architecture from day one.
A practical blueprint you can copy
A) Baseline architecture
- Edge and API. Next.js or a minimal API in dot NET or Node with rate limits and web firewall
- Auth. Managed identity and short lived tokens with strict scopes
- Data. Managed database with read copies, backups, and point in time restore
- Async. Queue with idempotent workers, retries with backoff, dead letter queues
- Files. Signed links, virus scan, lifecycle rules
- Secrets. Key management or secret manager, rotate often, never log secrets
- Observability. Tracing with a request id, metrics like RED and USE, alerts on service level objectives
- Release. Continuous integration with tests and lint, progressive delivery with canary or flags, a rollback button
B) Security checklist
- Validate input on the server and encode output
- Role based or attribute based access, least privilege, step up auth for sensitive actions
- TLS everywhere, strict transport security, content security policy, cross site request forgery protection for cookie flows
- Redact personal info in logs and log in a structured way only
- Data minimisation with clear retention and deletion jobs
C) Operability
- Runbooks. If an alert fires, do the next step, then page the right person
- Chaos drills. Kill a pod, throttle a database, simulate a queue backlog
- Cost guard rails. Budgets and anomaly alerts, prefer back pressure over blank cheques
How to work with AI without delivery risk
Follow this flow every time.
- Set clear rules before you ask AI to write code
- State the goal in one line.
- List inputs, outputs, and validation.
- State the auth rules.
- State how logs must redact personal info.
- State the tests the code must pass.
- Example prompt:
You are a senior engineer.
Goal: create an endpoint POST /payments that records a payment.
Inputs: amount number, currency string ISO code, userId string.
Outputs: 201 with paymentId, 400 on invalid input, 401 if no auth.
Auth: require role payments create.
Logging: redact personal info, never log card data or email.
Validation: reject negative amounts, require known currency list.
Tests: unit tests for valid and invalid, auth test, log redaction check.
Constraints: typescript, express, zod for schema, no external state changes.
- Review the diff like you review a teammate
- Keep patches small and focused.
- Run tests and run the app.
- Ask three questions. Is it safe. Is it clear. Is it monitored.
- Add contracts so the code cannot lie
- Define types and runtime schemas with Zod or FluentValidation.
- Validate at the edge where data enters your system.
- Example:
const PaymentInput = z.object({
amount: z.number().positive(),
currency: z.enum(["ZAR", "USD", "EUR"]),
userId: z.string().min(1),
});
app.post("/payments", withAuth("payments:create"), async (req, res) => {
const result = PaymentInput.safeParse(req.body);
if (!result.success) return res.status(400).json({ error: "invalid input" });
log.info(
"payments.request",
{ amount: result.data.amount, currency: result.data.currency },
{ pii: "redact" }
);
// normal work here
res.status(201).json({ paymentId: id });
});
- Automate checks in continuous integration
- Run linters, unit tests, and integration tests on every change.
- Run security scans for code, dependencies, and secrets.
- Fail the build on high risk issues and fix them before merge.
- Track unknowns and clean them up
- When AI guesses, leave a clear TODO with a ticket id.
- Add a due date and an owner.
- Review these items in stand up until they are done.
- Protect risky actions with a human step
- For refunds, data deletion, and bulk changes, add a review step or dual control.
- Record who approved the action.
- Test the edges on purpose
- Add adversarial inputs and invalid data.
- Run load tests for both the fast path and the slow path.
- Prove that logs redact personal info.
Checklist
[ ] Prompt has goal, inputs, outputs, auth, logging, and tests
[ ] Diff is small and reviewed
[ ] Types and schemas validate at the edge
[ ] Continuous integration runs tests, linters, and security scans
[ ] No secrets in code or logs
[ ] All TODO items have tickets and owners
[ ] Human review on risky flows
[ ] Red team tests and load tests run
For hiring managers
- Hire for systems thinking. How would you prevent personal info in logs. What is your back pressure plan
- Check operational maturity. On call stories, incident write ups, service level objective design
- Expect AI fluency, and reward architecture discipline and safe change
For new engineers
- Pick a tiny idea. Deliver it to real cloud. Add auth, billing, and one background job
- Instrument everything. Logs, metrics, traces. Break it on purpose. Fix it
- Write the post mortem and automate the fix with a test and an alert
- Repeat this three times. That portfolio opens doors
Bottom line
Focus on three things
- Architecture first instead of only raw code output
- AI as an accelerant, not a replacement
- Professionalism. Security, reliability, and day to day operation are your edge
Do not blame a generation. The baseline has moved. Engineers who thrive blend AI speed with engineering discipline. That mix is rare and very valuable.
๐ Action step On your next feature, write three non functional needs. Security, reliability, and observability. Hold the work to those. AI can help you code. You are responsible for the system.