Principles
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.