Yeah, so I left my job today so I could finally focus on some of the ideas I've had full time. I've always thought that I would have come up with a consumer business on the side while I was working, but that hasn't panned out as I would like. Mostly just focused on work and creating my own infrastructure software and libraries.
What Have I Done Already?
Let's talk about that non-exhaustively. I write mainly in Rust, Java and JavaScript. Any other language is because of third party software, which is very much acceptable.
Created my own RPC library supporting (a)sync client/server and pub/sub so I can communicate between applications written in them over ZeroMQ. I wanted to create a plain object and communicate it without generated boilerplate like GRPC/ProtoBuf and Capn'Proto. There aren't many uses I've seen of ZeroMQ, but it is definitely being used out there.
Created a Service Discovery application that heavily leverages ZeroMQ. It also serves as the application dictionary. Any application should be able to get the host/ports of any running services. I should be able to register and configure a service. Super interesting project for me and a serious use of Rust and RocksDB.
Created an Asset Management software because I strongly believe that any assets that are produced should be easily uploaded, tracked and deprecated. Images on local file system, S3 or other hosting service counts towards space and it is not prudent at all to not know what assets are still in use. First use of RocksDB and written in Java.
Created a Database Migrator for MySQL, so I could perform idempotent migrations. Written in JavaScript.
Created Build/Deployment software so that applications would be built and deployed with easily written commands. Uses docker to build applications. It needs to talk to SystemD over DBus to start/stop/activate the application, so I learned about policy management to give permission without sudo to the deployment application. It leverages the RPC lib and is written in JavaScript.
Created an Event Processing and Notification software, so time series/log streams emitted by software are checked against rules and eventually trigger notifications to email or third party. I have some really strong views on how visualizing, alerting and incident response should work and this is one part of it. Written in Java.
Created a publicly available Configuration Provider library called C5Store in Java, JavaScript and Rust, which is one part of the config triad (Provision, Manage, Provide). The inspiration comes from never having to think about what config library to reach for. I strongly believe that application configuration should be provided by multiple sources, easily encrypted/decrypted if needed and any changes should be published to all subscribers. I'll publish more on the config triad later.
Created Rust, Java and JavaScript libraries that I won't talk about here and contributed to some on GitHub. I believe that one should be able to move between languages with very little loss of data structures and operations.
Did a bit of Network Engineering so I could access the private IPs of my servers from homeĀ with anymore SSH tunneling. Very useful since I've defined the software network architecture to accommodate it.
Why do all of this?
I like learning about how software works, making sure of high performance and desire a vertically integrated stack where 100% of the features are active and managed properly. Automation is a very big focus for me so I do not have to constantly maintain small issues such as server/application restarts or even recovery. I'd surely like to be notified and record such events in a low priority way. Any third party software that cannot be instrumented easily to deliver on automation will be expunged. I'm not interested in fighting small fires in the long run.
The building blocks are there in the open, so what I do is not entirely from scratch or "reinventing the wheel" as one would think. The wheel is constantly improved and reconstructed with different materials and that will continue to happen.
I have more plans for making sure my infrastructure is vertically integrated. It includes Config Provisioning and Management, Server/Hardware management, IP management, Time Series DB and Visualization. I have no plans to make my own tracing software, logging or server provisioning, so I'll use software geared for them. I don't find interest in these currently, but if they don't do what I expected properly then I will get interested.
- * Visualization should definitely be handled only in the UI. One could add some really interesting features in to Grafana to make it easier to automate dreary tasks such as creating "standard" graphs and keeping them updated. I'd still rather create my own specialized one to integrate with my TSDB.
As always I never recommend doing what I do. It is not for the faint of heart, but don't be discouraged from doing it.
What do I plan to do?
Lots of code and software, so where do I plan to go with this? Thought
about it for some time and a consumer product that provides task
management is the first focus. Looking to get a public release next
year. I'd like to see how bad task management software is for people that they are willing to defect to a better product that delivers a good feature set, high performance and delivers an interface that doesn't bombard with information. I looked at a ton of software and have to say that Monday is good task management software hands down. That is really good competition and validation that there is always going to be space for new entrants.