Skip to main content
Intempt

Our teams

Engineering principles

How we write code at Intempt. These principles apply to every engineer and every pull request - whether you're writing it yourself or reviewing AI-generated code from Claude Code or Cursor. AI writes the first draft; you own the final quality. These sit alongside our broader Work Principles and Operational Principles.

💋 1. KISS

Keep It Simple. Methods should be 40-50 lines max and address one problem. Use simple constructions. If someone needs a manual to understand your code, it's too complex.

🏜️ 2. DRY

Don't Repeat Yourself. If code appears more than twice, move it to a separate function. Automate any manual process you find yourself repeating. Duplication is the root of maintenance nightmares.

🙅 3. YAGNI

You Aren't Gonna Need It. Don't implement functionality unless it's necessary right now. Implement essential features first. Speculative code rots faster than useful code.

📐 4. BDUF

Big Design Upfront. Design first, create a flow diagram, then implement. This helps uncover issues before you write a single line of code. Cheaper to fix a diagram than fix production.

🧱 5. SOLID

Five principles that keep code from turning into spaghetti. You know these. We actually follow them.

Single responsibility principle

A class should have one reason to change. One job, one owner. When a class does too much, every change risks breaking something unrelated.

Open/closed principle

Open for extension, closed for modification. Add new behavior without touching existing code. Use interfaces and abstractions to make this natural.

Liskov substitution principle

Subtypes must be substitutable for their base types. If your subclass breaks expectations set by the parent, your hierarchy is wrong.

Interface segregation principle

Don't force clients to depend on methods they don't use. Many small, specific interfaces beat one large general-purpose interface.

Dependency inversion principle

Depend on abstractions, not concretions. High-level modules shouldn't depend on low-level modules. Both should depend on abstractions.

🐌 6. Avoid premature optimization

Root of all evil, per Knuth. Ship the simple version. Profile it. Then optimize the part that's actually slow. You'll be wrong about which part it is.

📏 7. Measure twice and cut once

Plan and prepare thoroughly before taking action. Verify requirements. Develop blueprints. The cost of planning is always less than the cost of rework.

😲 8. Principle of least astonishment

Code should be boring in the best way. If a function says “get,” it shouldn't modify state. If a button says “save,” it shouldn't delete. Surprise is a bug.

🧰 Our stack

The tools we use every day to build Intempt. Our backend runs on Java 21 with Spring Boot WebFlux, our frontend uses React with TypeScript, and the marketing site runs on Next.js.

Java 21Spring Boot WebFluxTypeScriptReactNext.jsPostgreSQLClickHouseKafkaApache FlinkNeo4jRedisKubernetesAWSDocker
Engineering Principles | Intempt Handbook