Principles

antonNew York Jul 22, 2022

I’m an aspiring believer in “actions over words” maxim.

As Alfred Korzybski once said “A map is not the territory it represents.” In the same vein, words are not actions. But as we still need maps to start navigating where we want to go, we do need words to try to describe what we want to accomplish and in what manner.

That is why before starting Alto I decided to write down some core beliefs that I have about software and how it should be. My hope is to come back to this list in the future and see what was achieved and what was not. But I also want to explore how my beliefs changed over that time. Life is a learning journey, after all.

So in the spirit of openness and for the purpose of education and self-reflection later here is my list.

No lock in

Users of the software should always be able to not only put data in, but take data out. The effort and experience of those operations should match. It shouldn’t be appropriate to optimize flows for data import and make it incredibly hard to get data out.

Open formats and protocols

Strive for using open data formats. Strive for making data and software interoperable.

Trust and verification

It should be transparent about what software does. Changes should be traceable and auditable. This builds trust between user and software and people.

Bicycle for the mind

In 1980 Steve Jobs said that “the computer is the most remarkable tool that we’ve ever come up with. It’s the equivalent of a bicycle for our minds.” Software should be a bit magical and enable some new ways and modes of thinking.

80/20

Optimize software to handle 80% of most common cases, optimize UI flows for 80% of users, and so on. E.g. if you know the most common case - just apply it automatically and tell the user what you did. Also allow user to revert the change, so she stays in control.

Data vs UI

Data can be viewed in a lot of different ways. Tools we use to see something influence what we see. John Berger once talked about it applied to the works of art. Same principles can be extended to the software.

The goal here is to achieve a plurality of view possibilities over a single source of data. This can be done through building different options ourselves or by providing proper tools to do 3rd party implementations.

Multi-tenancy

Allow software to be used in local and cloud contexts. Maxim here is local-first software, which is not always possible to achieve, but a good goal to have.

People-first

Power of the people and to the people. Strive to write software that empowers people but also uses people’s contributions to improve the product for everyone.

No tracking for ads

If there is a need to collect analytical data, expose this back to users. Don’t collect data to use it for ads.

Make it personal

Software/product/company. Eg companies are not physical real world entities (in a way that Yuval Noah Harari talks about them). This is why this blog is written in first-person view. I write about what I believe in. It’s my playbook to stick to. I can try to make my team mates like and follow some of them, but ultimately everyone is their own person. And a company or a team as a single unified entity is an illusion.

Those are all aspirations at this point. Whenever I’ll make a decision to implement or not implement something, ideally it should connect to one of those principles.