What is a Hacker?
Every engineering process must go through the following cycle. If we are not going through this cycle or are skipping steps, or working backwards while performing this cycle we are optimizing first without understanding .
- Fix the “Dumb” Requirements
- What are we trying to actually accomplish?
- Do not trust the experts that gave you the specs but questions what they want to accomplish and why.
- Remove Unnecessary Parts/Processes
- Each requirement / process must have a person’s name next to it who owns it.
- Do not hedge your bets. Just remove a process.
- If you are not adding back 10% of the things you are removing you are not removing enough.
- Buy instead of build. Building requires time and maintenance, if someone else can do something better then use them to move faster while reducing overhead costs
- Simplify and Optimize is step 3. If you are optimizing a dumb requirement or process then you are mostly wasting time. So figure out 1. first before even attempting to optimize.
- Speed Up Cycle Time
- Every iteration of 1, 2, 3 should be faster. To do this metrics must be kept that shows the acceleration of these three steps.
- Lastly, automate the process.
How to become better with the Build, Measure, Learn, Share and Repeat process?
We seek openness as a First Principle. To make the world better we need people using powerful, open ideas and having those ideas made better over time. To unearth these ideas, we learn broadly things we do not understand and make unknowns, known by inventing new solutions. We will give away the knowledge of what we learn and apply what we learn into our tools and services. We will teach others what we have learned and help them succeed. We will not hoard knowledge but aspire to learn so we can share what we learn.
We do not aspire to have a monopoly on ideas, good ideas can come from anywhere, so we strengthen ideas regardless of where they come from. We will cooperate with others to improve their ideas if those ideas are better. We will learn using the paradigm of Learn, Do, Advance, Iterate. This paradigm’s emphasis is on solving problems from what is learned. We will learn something that requires the solving of a problem, we will solve the problem with what we learn, we advance by figuring out the next problem that we do not understand that needs to be solved, and finally we iterate to go back to learning to solve the next problem.
Good ideas are already shared freely in books and other media. We aspire to develop a broad understanding of humanity from understanding history, politics, war, economics, math, physics, biology, psychology, games, etc. We need to make wide and deep connections, and the best way to do that is to understand the world broadly. We must expand our horizon; we will connect dots from different fields and practice things that make us better in the long run. We learn to understand how to avoid pitfalls from the past. We read and learn how to do things from those who did things before us and use history and books as teachers and mentors. We must use the Past to Advance Humanity to the Future.
Learning and Applying our Learning means we will make mistakes. While are not afraid of making mistakes, we are not afraid of looking like fools, we are not afraid of taking crazy bets. We must figure out How We Learn and adapt. All learning must start small and focused and expand out so we can minimize the feedback loop. Do this by starting with that kernel that is solid and focused and expand out from there. We will fall down, make mistakes and may be wrong but we will get back up and learn from our impediments to become better. The biggest measure of our learning is how quickly we get back up against after falling from our mistakes. This, we will fail fast and fail often with the goal that each failure is a learning lesson that we use to improve ourselves.
Share knowledge and give away knowledge. Be proactive about sharing knowledge. We are here to Advance Humanity and that means we must make the knowledge we learn available to everyone. Others may use our knowledge and compete with us and that is perfectly fine. We want our knowledge to help better the world and that means having our ideas spread to everyone, everywhere.
How to build Mental Models to understand the world?
In the Structure of Scientific Revolutions, Kuhn noted that in science models are patched until there is no longer a way to modify the model anymore. Once there are too many exceptions to a model that model breaks down and a new model needs to be created to understand the world. This is called a Paradigm Shift. It is not only science that has these shifts society, culture and technology also go through these paradigm shifts. We must notice them to capitalize on them and that means creating Shared Mental Models of the world.
Shared Mental Models are a model for how we believe the world works which allows us to simplify communication as a team, understand the patches in that model, and figure out when that model is breaking down due to changes in technology. Shared mental models allow us to create scenarios and how we fit into that scenario allowing us to better understand how we need to maneuver. To understand and create mental models break things down using First Principle, and understand how each component of the model works and find bottlenecks, gatekeepers, and holes to capitalize on. Further, we must develop mental models to prevent us from gaining tunnel vision on what we are doing. For example, it can be hard to see what we are doing is entering a period of decline without figuring out the shifts in the model of the world.
Our mental models will be used to help test our hypothesis against the world and develop our capabilities to fit that model. Further, to enter new industries we need to first figure out the mental models of that industry. Once this is done we will develop the capabilities to enter that industry.
Don’t try to be right, be less wrong. Trying to be right all the time doesn’t work. Because it comes from a place of always knowing. This is just impossible for people since the world is complex and have so many variables that move it forward. However, the variables that allow you to be less wrong are pretty simple and apparently if you pay attention to them. If you can pay attention to the variables that prove you less wrong, and ignore the ones that push you to being right you benefit in two ways. 1) You learn to find where your faults are and address those faults in your thinking. 2) You don’t let ego get in the way of you trying making the approporaiate decision.
Savoie-faire Know what to do in any situation. This means learning and understanding broadly even if you don’t have understanding on the specifics of what you are doing. We live in a world of hyperspecialization where people end up being obsoleted faster than they can adapt. There is value in being really good at something, but it also helps to know a bit about everything. It helps to learn disparate things because your mind can connect the dots from different ideas and that marriage is the new idea. Learn to become adept at multiple things.
Truthseek. Be aware if you are following someone’s path or charting your own. It is easy to get stuck doing the same thing because someone else has. Many times there are good reasons for doing something a particular way, other times it makes no sense to do so. It may make sense to figure out if you can change this.
How to Apply the Unix Philosophy?
Keep things simple and composable. Build things that are hyper-focused which can talk to other things extendable. This includes tools, businesses, products and services. Do not fall for Not Invented Here, it is better to use someone else’s 90% tool than to make our half-assed one unless there is a Competitive Advantage for us to do it differently. Build things that follow the 80/20 rule. Do not try to do everything for everyone. Aim for perfection, settle for good enough. Avoid complexity that can result in cascading failures because of heavy coupling of systems.
Solve problems by brute force first to make it work before making it pretty. Remember Copy-Paste, Excel and Bash are all effective tools. Solve the problem first fast, go back and make it pretty and scalable, but always remember to keep things simple. We solve problems to Advance Humanity not build tech for tech’s sake, so build tool that are composable with other tools.
Build simple solutions with the skills we have now, not skills that we can develop in the future, or skills that need to be heavily specialized. Create tools that empower people to come up to speed quickly.
Remember always: Complex Actions that do Complex Activities Fail in Complex Ways; Simple Actions that do Complex Activities Fail in Simple Ways. Keep It Simple, Stupid. Can you explain it to a 6th grader?
One of the major things to scale and growth is the ability to reduce variables. The more variables that are in a system the more it can fail in convoluted, complex ways. The fewer variables the simpler the failure and the easier it is to diagnose the failure. This is not to mean that complexity cannot arise. It just means that complex systems that have simpler subsystems scale better. Reduce variables until doing so makes things more complex. This will be hard because the natural outcome is to want to add variables add different vectors.
One of the hard parts of keeping things simple is the fact that we have to subdivide. Modern society is based on division and dividing, but sometimes you just need to release something and it is better to try it out within the confines of an existing brand than to start from scratch building a new brand.
How to Release Fast and Often while Continuously Improving?
All things need code or routines that are followed to create a desired outcome. The reason for this is that when we have a program that we follow we can refactor it as opposed to working ad hoc. We will be able to ensure that we can move forward and still create the same outcome. Without code or a process definition we are each working independently without knowing if what we are doing is the most efficient way to go about our daily tasks.
So everything we do must be based on eventually process. What this means is if we do a task more than once as we do it it should get more and more defined or programetized. This means clearly having the tests and key metrics to ensure what we are doing is in fact helping us as opposed to hurting us.
Further, we should be able to split apart a routine whenever we need to and hire someone to do that routine as opposed to reinventing the wheel. Every routine like a good computer program should require fewer steps and cost less to accomplish the task.
Reduce the batch size and deploy something that works to production and to the customer as fast as possible. The goal is to always have a stable way of releasing features to customers. Reducing the batch size or size of code being released will allow us to constantly improve the quality of the code and reduce the number of errors.
However, to achieve this we must always work to ensure everything we have in the master branch will be deployable and can be deployable and is tested. We must be willing to move fast and that is only done by having reliable tested code and processes.
How to Fail Fast?
How to Learn From Mistakes?
We do not celebrate our mistakes but we seek to understand where we made mistakes in the first place.
In Behavioral Economics we are more prone to feeling pains from losses than equal amounts of gains. This is called Loss Aversion. This fear of losses makes us blind to when things are not working and killing something. We need to test our experiments completely but experiments can go wrong so learn to kill things when they don’t work. However, don’t celebrate when things fail. Failure is a means to understand, celebrating it is the wrong incentive since we are celebrating the failure instead of the ability to learn. Fail fast, learn fast.
It is really easy to live in the realm of the What. What and How give solutions to ready made problems but unfortunately they do not handle problems when you hit unknowns. When you hit anything unknown when you learned the What and How you are stuck because you haven’t dived deeper. Asking Why over and over until you have gotten to the root of a problem. From there work back up to answer the How. When you understand Why you can then think in terms of atoms and molecules. You can start making different permutations that we’re not available to you when you just we’re focused on the What and How.
Every field has a Why. The root that everything is based on. If you can find that Why and really understand it it lets you understand the root of what you are trying to accomplish.
Figure out how to reduce waste over time and increase quality. Increasing quality tends to reduce waste and cost over time as there are fewer defects in the service.
How to think in terms of “The Network is the Computer”?
Humanity is moving to ever connectedness. Everything that can get connected will get connected. The leads of this new world are those that can break and mold these networked systems together and wield them to their advantage.
As I write this the most important mechanism of power in the world is networks. We need to understand and exploit the network to ensure that we can attain our goals. This means we cannot be removed and fight a symmetric fight against an asymmetric node. We must fight asymmetrical and ensure that how we move the work forward is itself also decentralized as much as possible.
A network with the fewest nodes is easier to secure than one with thousands so ensure that each team can exploit the power of its network.
Having smaller systems make them more scalable as they are simpler and fewer people can have total knowledge over the entire system. This is true in computers as well as business. Small teams can achieve more faster because they can hold the entire product, sales and marketing strategy in their head. This is also how OpsZero will be organized.
We are building a Platform that allows us to create completely independent teams that work on verticals disconnected from each other but by building up a common infrastructure. This infrastructure will grow and evolve standardizing common tasks across teams while still enabling them to move independently.
This has a few benefits:
- We can try ideas faster by assembling new teams.
- We can scale resources to a team if it is growing.
- We can grow ideas quickly if we see a need in the market for that skill.
- We can work deep into a singular technology.
All of these are benefits. In essence we need to keep a firm simple. 8-10 people max per team and using freelancers to fill in any holes. A team can also jump off and work completely independent of our infrastructure if they want to.