1 min read

Under-engineered

Typically, with software, you only hear about projects that are over-engineered. Too many features. Code is too fancy. High level of effort to solve a fairly simple problem.

What's not obvious from the outside is that (at a certain point) app complexity is inversely related to code complexity...

Let me explain. Adding another button, feature, or widget to your app is usually done because you've made a decision. You wrote some code and added the thing. For your users, too many things starts to look "over-engineered."

Choosing not to add features, and instead build a highly flexible system for future development is way harder. The app looks under-engineered from the outside (minimal features/decisions made), but the code usually explodes in complexity to handle this flexibility.

The weird thing is that blockchains are a fairly complex undertaking to begin with. So, when the Koinos Group decided to build the most flexible blockchain framework ever built, I would think that would make the effort nearly impossible. It turns out that a lot of the complexity of existing blockchains came from over-engineered decisions. Examples:

  • Building Solidity and the EVM instead of using existing languages and WASM
  • Building a hierarchical multisig authority model instead of letting users write their own authorizers
  • Cramming all your functionality into the core blockchain instead of pushing those decisions out to smart contracts

The decisions made for Koinos are intentional and elegant. By under-engineering the Koinos framework (which took a lot of effort, don't get me wrong), they built a highly flexible framework where anyone can make whatever decisions they want.

-Luke

P.S. This flexibility required more effort in the short term, but it will pay off as the blockchain evolves with community demands and decisions in the future.