Back

The Engineering Principles We Build On

Every team has principles on a wall. These are the ones we actually argue about in code review and live by when shipping client software.

The Engineering Principles We Build On
Written by
BSH Technologies
Published on2026-02-21

Principles only count when they cost you something

Plenty of companies have a tasteful list of values framed in a hallway, admired by no one and consulted never. At BSH Technologies, our engineering principles are not decoration; they are the things we invoke in code review, the reasons we say no to a tempting shortcut, and occasionally the rules we break on purpose, knowing exactly what we are trading and why. A principle that never inconveniences anyone is not a principle, it is a slogan.

Here are the ones that genuinely shape how our team in Thrissur builds software for clients, day in and day out.

Boring technology, chosen on purpose

We are deeply unimpressed by novelty for its own sake. When we pick a database, a framework, or a cloud service, our default is the well-understood, well-documented option with a large community and a long track record, typically on GCP or AWS where the operational story is genuinely proven and the failure modes are known.

The reason is simple: a client's software has to run, and be maintained, long after the excitement of building it fades. Boring technology has fewer nasty surprises, more engineers in the world who know how to fix it, and a far clearer path when something breaks at an inconvenient hour. Every exotic dependency is a bet that we will still understand it, and still be able to hire for it, years from now. We reserve the genuinely new tools for the specific places where they solve a real problem that nothing more established can, and we make that choice consciously rather than out of fashion.

Write for the person who maintains it

We write code for the engineer who will read it in eighteen months, very possibly someone who has never met the author and has no access to the conversation that produced it. That person might be a teammate, or it might be the client's own developers after we hand the system off. Either way, clarity is a feature we ship deliberately, not a happy accident.

  • We favor obvious code over clever code, even when the clever version is shorter and more satisfying to write.
  • We keep files and functions small and focused, so each piece does one understandable thing and can be reasoned about in isolation.
  • We write down the why, not just the what, because the reasoning behind a decision is exactly the part that gets lost over time.
  • We name things honestly, so that a variable or function tells the reader what it actually is rather than what it once was.

This is not aesthetic preference or fussiness. Maintainable code is simply cheaper to own, and a client's total cost of software is dominated by what happens after launch, across years of changes, not by the initial build. Optimizing only for the first version is a false economy that the client pays for later.

Make the change easy, then make the easy change

When a feature is hard to add, our instinct is not to force it in awkwardly and move on. It is to first reshape the surrounding code so the new feature fits naturally, and then add it. This two-step rhythm keeps a codebase healthy over years instead of letting it slowly rot under successive bolted-on changes that each made sense in isolation.

It takes discipline, because the pressure is always to just get it in and call it done. But the projects that stay genuinely pleasant and cheap to work on, release after release, are invariably the ones where the team consistently invested a little in structure before piling on the next feature. We have inherited enough neglected codebases to know exactly where the other path leads.

Tests as a safety net, not a ritual

We write tests because they let us change code with confidence, not because a checklist demands a particular coverage number for its own sake. The tests that matter most to us protect the behavior a user actually depends on, so we can refactor and extend a system without the constant fear of silently breaking something important and shipping it.

We are pragmatic about it rather than dogmatic. Highly visual work is often better verified by looking at it than by asserting on brittle markup that breaks every time the design shifts. The point of a test is to catch the failures that would genuinely hurt the client or the user, and we aim our testing effort precisely where that payoff is real, instead of chasing a number that looks good in a report but proves little.

Security and correctness are not optional extras

Because we also operate as a managed service provider and build for clients in regulated and security-sensitive contexts, we treat secure-by-default as a baseline rather than a feature to be bolted on near the deadline. Validating input at every boundary, never trusting external data from any source, keeping secrets out of source code and in proper secret management, and handling errors explicitly so nothing fails silently are simply how we write code. There is no separate hardening phase at the end, because security added late is security added poorly.

Holding principles loosely enough to grow

The last principle is about the principles themselves: we hold them firmly but not religiously. When experience teaches us that one of them is wrong in a particular context, we change it, deliberately and through discussion rather than by quietly ignoring it. A team that cannot question its own rules eventually ends up serving the rules instead of the client, which defeats the entire purpose of having them.

Work with BSH

If you want a team whose engineering values translate into software you can actually live with for years, not just admire on launch day, we would love to talk. Reach out to BSH Technologies and see how these principles show up in the real work we deliver.

From the blog

View all posts
Designing Multi-Tenant SaaS That Scales
Software Dev

Designing Multi-Tenant SaaS That Scales

Choosing an isolation model, keeping tenant data separate, and dodging the noisy-neighbour and migration traps that bite SaaS later.

BSH Technologies
BSH Technologies · 2026-06-14
Hitting Green Core Web Vitals in Next.js
Software Dev

Hitting Green Core Web Vitals in Next.js

A practical guide to LCP, INP and CLS in Next.js — image handling, font loading, the App Router boundary, and costly third-party scripts.

BSH Technologies
BSH Technologies · 2026-06-10