Philosophy
The philosophy of OctoMY
Topics
- philosophy
- architecture
Motivation
In most comercial endevors, the philosphy can be inferred. It usually boils down to the following:
- The owners want all the money for the least amount of effort.
OctoMY however is NOT a purely commercial endevor, thus the philosphy of the project will need some more explaining.
It may be unclear to some as to why anyone would take on such a large and complicated project without money as the ultimate goal!
Personal motivation
As the founder and maintainer of the project from the start, the initial goals were simple and perhaps a little naive.
I had decided for myself that robotics was kind of cool. I loved programming, and also tinkering with electronics in my spare time. What makes a better hobby to combine the two than robotics?
So after buying and playing with a few robot kits from the internet, I observed a pattern:
- Find cool robot kit online, and save money in anticipation
- Buy it & take it home in anticipation
- Unpack with excitement
- Build hardware of robot with excitement
- Connect robot to computer with excitement
- Install robot software on computer with excitement
- Realize how crappy the software is in disappointment
- Leave robot on a shelf to collect dust
My conclusion was that; selling a shiny robot is easy, creating quality software for it is really hard.
So after the 3rd or so time, I was like "I mean, this is utter crap. I could make something better myself, how hard could it be"? My hubris came from being a veteran C programmer at that point.
So to boil down my initial motivation:
- Make a better software experience for robot kits
- Learn cool robot stuff
- Show of how cool my robot was with my software on it
- Share this with all the robot enthusiasts out there so they don't have to collect dust on their disappointing robots!
Scope creep
After starting on a small MVP software project to replace the shitty software of my last robot kit, I had a nagging sensation of the enorous potential in this project. The number of features that were definitely possible to implement was just staggering, and at some point, I was overcome with temptation and decided to just plan to "make everything".
The wanted feature list quickly became completely unrealistic by most standards of software development:
- Many robots and many remote conrtrols could communicate in a distributed way
- Secure protocol for communicating between robot(s) and remote control(s)
- Resilient and nimble protocol that would work despite adverse network conditions/ slow connections etc.
- Unique robot personalities with distinct voice, eye-colors and more
- Flexible and user friendly system of configuring actuators and sensors to make even novices succeed with their robot project
- Advanced features such as face recognition, text to speech, speech recognition etc
- Advanced "mission planning" features
- Robot could operate autonomously in an environment, relying on identified landmarks etc.
- ...
But I kept comming back to the fact that all these features are definitely possible. The reasearch and example code exists out there.
The main problem is one of integration. While there are 100s of projects scattered on the internet, implemented in different programming langauges, on varying platforms, with varying degrees of discipline, quality and goals that all solve single pieces of this feature list, there exists no ecosystem or platform that allows them to co-exist on a single robot in a robust performant and user-friendly manner.
So a plan took shape. I would create a robot platform that would serve as the basis of an ecosytem where features could be added by anyone that needed them.
I would make good architectual decisions, create a standard of quality and then continue to implement each of the initial "minimally expected" features into the platform, one by one.
At some point the platform would go from being a concept into being a useful project that users could install on their robot and not be so thoroughly disappointed. And a community could form of people like me who could contribute cool features under a single umbrella.
Discipline
I am a very creative person, and for me this is a source of pride. However creative people are often (as I am) impatient in the face of repetitive work.
This project needs a lot of repetitive work. It needs every part to be fully formed according to a strict set of guidelines. It is very tempting for a creative person to skip all that "boring" stuff and just go on an adventure to create a new fancy feature.
This has nearly killed the project every day since the very start. At some point the project was a collection of half-done features that did not really fit together very well.
As I battled with this terrible state of the project, what I really did was battle with my own inability to maintain personal discipline.
I worked really hard on this for 4 years before burning out. At that point, I decided that I needed help, and the plan was simply to start a more commercial project that would earn me the money to hire actual developers that could help me with OctoMY.
Disaster & Catastrophe
After a hiatus from OctoMY to work on my commercial project for 3 full years, disaster struck a week before launch!
Putin invaded Ukraine, and my commercial partner at the time lived in Kyiv. If that was not enough, due to working 50% as a freelance consultant to cover my bills during Covid, I invoiced my work through a small personal company and basically done my taxes incorrectly for 2 whole years. This came back to haunt me and I suddenly over-night owed the government half a year worth of salary.
The cash I had stashed away to secure the launch of my commercial software into the market vanished and I had to take up a lot of really expensive loans. I was lucky that I did not have to sell my house. My commercial venture was put on hold indefinitely.
To ensure a stable life for my family and to survive I imediately got hired 100% in a higher paying consultant company where I work today.
Return of the Phoenix
After things landed a bit more, I helped my friend in his startup and he convinced me to take a larger role there than I had initially intended. It was a wild adventure all on it's own, and it may end up becomming a huge thing still. After all this distraction I finally returned to OctoMY.
My burnout was completely gone, picking up the project where I had left it was now a welcome adventure in itself! And I noticed thatthe time away had definitely matured me. I was more focused, more dedicated, better at prioritizing and beter at disciplined development for sure!
Design Philosophy
Who cares about design philosophy?
If you are one of the lucky people that just happen to check out OctoMY™for your project then you can blissfully move along. Nothing to see for you here :)
However if you are planning on becoming a contributor, this page is like totally super important.
The nature of open source.
Developers all know that a day job in IT often means working for a pointy haired boss. If you are lucky, you work for an organization with strong technical leadership, and observe less of this reality. But in the end any for-profit organization will have some constraints that affect you.
- You don't get to decide what features to make
- You don't get to decide what tools to use.
- You don't get to pick your team mates.
- You don't get to decide the amount of time and resources needed to make it "properly".
- etc.
To any company, IT and software development is just a tool to meet the current business goals, and that means that developers are tools to be used as well. It is expected that you as a developer do what your boss asks of you in return for a pay check.
What most developers also know is that when they get home from work, there is a small window of opportunity awaiting them, between the family and house chores and bedtime. Glimmering like a forgotten gemstone in the dirt, it allures many developers into the mystery of the night...
In this window all the restraints of the business world all but dissipate and suddenly you are in full control. With the whole internet at your finger tips, and the infinite sea of time ahead (albeit chopped up in annoyingly small chunks), you now suddenly command the mission.
Now you can make anything!
Yes, you can set yourself a goal, a timeline, and other restraints. You can even work towards becoming the boss of your very own company. But the beauty is that you can also decide to just pour all of your midnight energy into perfecting 10 lines of meaningless but poetic code. You can dedicate yourself to coding as an art form or coding as pure entertainment.
My midnight energy
I have decided to dedicate my midnight energy on what I hope will be the project of my life, namely OctoMY™. The main goals are more fundamental:
- I want to decide what features to make.
- I want to decide how to make it.
- I want to decide what tools to use.
- I want to pick my team mates.
- I want to decide the amount of time and resources to spend on OctoMY™for it to be done properly.
If you want to join me in my effort and become a successful contributor for this project I welcome you!
Core Values
To make collaboration possible it is important to communicate the core values of the project effectively to all involved.
That is why I have collected the core values for this project in a separate page for reference.
Philosophy
- Complete: The solution should stand on it's own and provide a complete feature set that gives more value to most hobby class robot projects.
- Nimble: Provide the important bits but avoid pulling in unnecessary dependencies and adding only nimble and useful features. Reap benefits of code reuse and simplicity by sticking to one platform. Qt can be deployed to Android/iOS devices, Windows / OS X and Linux desktops.
- Cutting edge: Harness the power of modern concepts in robotics like deep learning.
- Robust:Always provide a stable version. Follow good practices for maintaining the software in a stable state.
- Social: Provide a vessel for learning about all these advanced topics for anyone involved.