Breaking the Rules

by Jeremy Schwartz

This is a work in progress

Copyright © 2025 Jeremy Schwartz

Built using: mdBook

Intro

Mastery is not about perfection. It’s about a process, a journey. The master is the one who stays on the path day after day, year after year. The master is the one who is willing to try, and fail, and try again - George Leonard

Premise

The premise of this book is that there are three possible levels someone can reach with their work, craft or art. That third level is what we call mastery.

This level is what allows someone to innovate, to create and solve new problems in their domain. It allows them to develop their own style. They can find new ways of doing things and explore new paths. This level is what allows people to be excellent in what they do. They bend their domain to their will.

To me, new is the most exciting thing and to create new you need to reach that third step. If everyone is just learning and applying the past rules we are not moving forward.

Mihaly Csikszentmihalyi defines creativity as "any act, idea, or product that changes an existing domain, or that transforms an existing domain into a new domain"

Mastery is just applied creativity and as we go I will show that they are the same thing.

Second Gear

Most people, though, fail to get out of second gear and reach this level. They could be working in a field for years or decades and think they are crushing it, but they are not. They are stuck applying the rules but not innovating.

Titles or decades of experience are no guarantee that you will reach this third level.

The current zeitgeist is that it just takes time, put in the 10 years or, 10000 hours and you will reach it.

While I agree that it takes time, usually several years, that number is in no way a guarantee.

In the field of programming, it is clear that time is no predictor of reaching this level. There are endless “senior” developers that have that title by virtue of time, but not skill.

I think you can see this across many fields, where the so-called experts are horrible or mediocre at best at their jobs. They may know things but that doesn't translate into an actionable or predictive power.

Later research has debunked or failed to replicate the 10000 hours rule. 1

K. Anders Ericsson who was a Professor of Psychology at Florida State University that studied expertise, argued

that what matters is not experience per se but “effortful study,” which entails continually tackling challenges that lie just beyond one’s competence. That is why it is possible for enthusiasts to spend tens of thousands of hours playing chess or golf or a musical instrument without ever advancing beyond the amateur level and why a properly trained student can overtake them in a relatively short time. 2

Making the implicit explicit

For the people who do reach it, they often find it through trial and error and some form of obsession.

I think we can do better.

There is an aura around mastery, creativity, and talent. Some people just have it, some can't. I doubt that is true.

I think it is learnable, I think the human brain is super plastic and, with time and work, it can capture many things.

The problem is that it is difficult to describe and even harder to teach. There are very few books on what it takes and what it looks like. We use hours because we haven't had a better way to measure progress.

All the books are on how to be a begineer, because those books are easy, but what happens when you get behind basic skills and standard rules?

I think and hope that I found a way to break down and provide a framework for understanding what separates the masters of their craft.

Everyone's journey is going to look different, but the goal of this book is to provide a framework and definition for what it means to reach that next level and provide a workable path. To try to make the implicit skills explicit. The goal is to teach how to be an explorer.

This is your journey and that is the best part, and while there is no destination, you will end up somewhere no one else has visited. You make your own rules.

References

1

https://www.vox.com/science-and-health/2019/8/23/20828597/the-10000-hour-rule-debunked

2

https://personal.utdallas.edu/~otoole/CGS2301_S09/15_expert.pdf “

High Level Goal

The Three Steps

I think there are some common traits to people that have reached that third level or mastery share.

Let's start by trying at a high level to define the different levels using the rule of three, as everyone else seems to.

We have the standard beginner, intermediate, advanced or the apprenticeship model of apprentice, journeyman, master. 1

In Germany, there are still literal journeymen (Wandergeselle) that after their apprenticeship wander around working various jobs for several years before they can move on to becoming masters. It is called Wanderjahre (wandering years). 2

I will add my own version of this, I think these are the punk rock versions.

  1. Learn the rules
  2. Apply the rules
  3. Break the rules

What is a rule?

Let's define what I mean by rule before we move on.

A "rule" is basically a wishful promise of an desired outcome. If you follow this then you will get some result. The rule is a chunk, at some point someone took a goal and came up with a "rule" to try and reach that goal.

There is nothing wrong with that but what happens is that "rule" or chunk of thinking is taken on by people with no insight into what prompted the original rule. You goals maybe different.

DRY (Quick Rant)

There is a programming principle that is often repeated (ironically) with little thought called the DRY or "Don't repeat yourself" principle. I think this is a good case study in rules.

The principle basically says that in programming don't have multiple versions of code that does the exact same thing. Straight forward and practical, makes sense.

It comes from a very good book by Andy Hunt and Dave Thomas called The Pragmatic Programmer. This book is one of my favorites and lead me down this path.

I have no complaint and in general follow this principle, but it shoulnd't be followed blindly which is what happens too often. It is just a promise of a result.

There are very valid situations when you shouldn't do this. There are times when a piece of code is critical and complex and trying to change to fit some new requirement could break things. In large complex systems this maybe a scary prospect especially if a failure in that code could have real world impact.

If your site goes down and you loose millions in revenue, telling your customers oh but we didn't repeat ourselves in the code is not a great answer. In a perfect world you would have all these tests to make sure it doesn't break things but we don't live in a perfect world.

We will talk about this more throughout but the my point is that a rule = a goal or promise and it may not match your current goal.

In the critical code path one of the stability of the code is a higher level goal, vs if we have some code that really shouldn't be duplicated.

That is the essence of picking which rules to to use and which ones to break. Do they match up with the goal you are trying to achieve, not what the original goal of the rule was.

Levels

Let's view the levels through a woodworker of various expetise tasked with building a set of shelves.

Level 1 Rule Learner:

The beginner is learning the tools and techniques to do this. They will have to research, and may use other people's patterns. The building is slow, full of setbacks, restarts, and mistakes.

The end product may get done, but is not great. The quality is low and it took quite a long time. The shelves are basic, probably prone to falling off the wall.

They are just trying to make their way through the problem, they don't enough knowledge to really dispute the rules or practices. Just getting the work done is a challenge enough, they are in no position to think about anything beyond the basic task.

Level 2 Rule applier:

With our level 2 woodwooker, everything is better, the quality, the time. The rule applier has some techniques and tools that they can work from.

An upgraded version of the beginner shelves. As people get to the top end of this level, there is competency. Nice made shelves delivered roughly on time and on budget, no real surprises. They don't have to look or research too many things. They know what they are going to do and execute.

But there is nothing new or special, you get what you asked for.

The cracks start to appear if you take away any part of their normal workflow. They can't handle new constraints or challenges unless someone shows them a path.

Once something new or different is needed, they will either hobble something together using the techniques they know, usually providing a sub-par solution, or get stuck and fail. Possibly, a combination of both.

In applying the “rules” they cannot find simple solutions and overcomplicate things. They can only combine rules that they know, if that combination doesn't get them there, then that is where the project ends.

They can't move past the current rules and techniques.

Level 3 Rule Breaker:

The rule breaker can do everything the level 2 applier can do but better and faster. They have more tools in thier tool bag in order to execute better but as we mentioned in craft they have also improved their meta process on how they work.

Let's say now, in our shelving scenario, there are some new constraints added. The room is old and oddly shaped, or there are extra constraints given by the situation.

A master can reevaluate the whole project from a solution standpoint. They can apply first principles thinking, or thinking from the most basic absolute constraints.

They have moved beyond the route “rules” and can solve problems by drawing on and synthesizing many techniques and tools, and even inventing ones when needed. They can move past the rules to create new "rules".

This is where the level 2 people become beginners again albeit usually without beginners mind. They don't have any tools or techniques to work with in this new environment. They learned all the basic patterns, but this situation is new and unique and there aren't any standard patterns.

This is where someone who has gotten to that third step can flourish.

Another aspect or an extension of this is seeing new possibilities. Shelves are great, but what if with time you want to change them in various ways? Our third step person could say, what about a shelving system? You can move around the shelves to different positions.

They have the ability and skills to see that it is a possibility or invent ways to make it work. The master level allows you to move beyond what is there to start to make the world of that craft what you want it to be.

At this level a person can separate the tools from the solution and see them as separate things.

This level more things are taken into consideration. Not just how to build the shelves but how will the be used. If the whole space of possibilities is our domain then the level 3 person has captured more of the domain then the other levels.

A master chef is not thrown by new ingredients or a missing one but can make something amazing out of nothing. They understand that the ingredient is just one part and plays a role and is not the end goal in itself but a replaceable tool. They are stepping into design thinking.

When you haven't mastered something you making just what you can make and hope that it is good enough. When you have mastered something then you skill can match up with your desire and goal and your vision can grow.

The video below that I think shows many of the traits of mastery. To be able to have a goal that fulfills your needs and not be limited by what you can make.

Watch the video

Everyone is working in the system, instead of seeing that there is ways to break from of it and do things a new.

There is a domain of possibility and as you advance you can capture more of it.

Domain

The goal

Another way of putting this is that the goals of the master or aspiring one is to absorb what the domain is and what it could be.

Most people's goal is to understand the tools and techniques well enough so they can do x. That is it.

It is easier to "master" the known. A technique or a tool, there is very little doubt or uncertainty in that.

I am starting to see that this path is in many ways more about a mindset. The desire to move past the what of a domain, but to understand the why of the domain and to explore its full potential.

At a high level:

Can you work with intention?

You have a vision or a desire that you can articulate and execute on.

Are you consistent?

It is not enough to stumble on to something every once in a while. The true test is can you do this over and over again on demand.

Are you original or creative?

Are you bringing your own style or something new to the table? Have you made it your own?

More Concrete

There are many ways to show mastery, so this is not exhaustive. We will flush more of these throughout the book but let's start to define some of these traits clearer.

Ability to deliver high quality work

High-quality work can be subjective, and we will dive into how to define that for yourself in later chapters.

For now let's say the work is considered by peers or consumers to be at a level beyond the norm.

Ability to create something in a timely manner.

This can vary from craft to craft. For some fields, time is less important or more tolerated. If it takes a top artist years to put something new out, but the work is outstanding, then that is the price that we are willing to pay.

For many professions, though, you need to be able to deliver on time and be able to communicate and commit to those dates.

This inability highlights the difference in skill levels. It is not about the time, but usually about the haphazardness in which people work.

Given a task, they lack the ability to break down the problem and have a clear, focused path to solving it. They don't have the mental models or capability to hold the problem in their head.

They are not executing on a vision but stumbling towards a hopeful solution, and so they cannot deliver consistently as well as estimate how long the work will take.

A master can create something better in a fraction of the time often by doing less in a more focused way. Also they will have a clearer estimate because they have a plan from the start.

Ability to capture more of your domain in your work

As you level up and chunk more of your craft, it means you can pay attention to additional aspects of the space or domain.

You can then bring that into your process and decision-making.

Think of going from cooking at home, to cooking in a restaurant, to catering an event for 200 people. At each stage, there is more domain space and more to capture.

Cooking at home you have a small domain, but a restaurant is on a different level. How do you staff, how do you buy food, how do you prep? How do you organize so that food goes out on time?

At Michelin restaurants, it is not just the excellence of the meal, but it needs to taste exactly the same on subsequent visits. How do you do that?

The goal is to see and understand those aspects and address them as a part of your solution.

When you can capture all the aspects of your domain, that is mastery.

Ability to function with new constraints.

We will elaborate on challenges and constraints throughout the book, but being able to deal with new constraints is a sign of mastery.

Most people learn a way to work with things in a certain way, but if they can't use their normal methods, they struggle or fail.

The goal of mastery is to have control over an area, if changing conditions makes what you do fall apart, then you have no control.

Ability to see core abstractions

There is this brilliant book called Salt, Fat, Acid, Heat — by Samin Nosrat that I think captures this aspect.

What is cooking about? What are the core abstractions that once you understand them you can leverage them to really grasp your craft or capture more of the domain.

If you can see how an ingredient acts in a dish, then you understand the best way to use it or replace it. If not, you are stuck trying every combination.

Abstractions can be powerful tools, and by finding them you can unlock that power. If you are not seeing the abstractions, then every aspect is disconnected and has to be handled on its own.

The human brain is limited, so the goal is find large chunks that we can use.

Ability to work with economy of motion

This is more apparent in sports, or physical-based skills. You can see the way masters do things.

Watch a professional chef cook, there is no wasted motion. Every wasted motion has been stripped by time through repeated motion. There is intention in every movement.

This can be seen in the non-physical as well. The ability to strip away the needless steps and just work on the problem at hand.

Here is an example from Top Chef of head judge getting in the kitchen and doing a "quick fire" that the contestants normally do but usually with 30 minutes on the clock.

Watch the video

Ability to push

This is in the mindset category, but I constantly see this. This ability to keep going and to push for a solution or to work on something even after failure is a key ability. The ability to get unstuck, to keep making progress.

Or to not accept a flawed solution, to keep pushing until you find the best one.

It is the key ability needed to reach a level of mastery and to maintain it.

Ability to solve higher level problems.

Do things no one has done before. To find a path even though the path is not clear.

Ability to see higher level problems and solve those.

To see the pattern in the issues and address that commonality. In programming, there is something called the DRY (Don't repeat yourself) principle.

The idea is to not repeat the same code over and over again, to find a way to combine the code so it handles all the various requirements.

That is ok, but I think real leverage comes from what I call Macro-DRY. Seeing the larger patterns and seeing them as one problem.

This is part capture more of your domain, part abstraction. Will talk about this more in the design section, but I think the iPod was successful because it solved a higher problem.

Everyone was trying to figure out how to build a device that can hold ten thousand songs. The genius of Apple was realizing that is not the real issue. The number of songs was a solved problem at that point with everyone having access to the same small harddrives.

The real difficulty is how do you interact with a device that has ten thousand things on it? The scroll wheel was that solution, that was the higher level problem that not only solved the scrolling through ten thousand things but also became the standard interface, making it easy to add new UI elements.

Ability to create simple solutions to complex problems.

“Simplicity is the ultimate sophistication. - Someone ( Leonardo da Vinci ? )

Ability to simplify is a true trait of mastery. Mastery makes complex things look simple, but they are not.

We will talk more about this in the design section, but simple is not easy. Simple requires real skill and the ability to synthesize things in new ways in order to get to the essence of something.

It iPod scroll wheel was not easy to make, but was an simple solution to a complex UI problem.

The inability for people to simplify is one of the biggest gaps to mastery.

Ability to break the "Rules"

There are a ton of things that we do not because they have been reasoned out, but because it was how things were done.

The problem with “rules” is they are supposed to help us get to a goal. But if they don't, they need to be discarded. Oftentimes they are used as a shortcut for thinking and looking at things anew.

This constantly happens in programming. Someone will “design” something or establish a pattern, and for some reason this becomes gospel.

The thread throughout many of these aspects is substituting something easy for something hard. It is easy to stick to the rules.

Ability to be intentional

Related to breaking the rules, is having intentionality with what you are doing and in how you are doing it.

You know what you want and the manner to achieve it.

Can you answer what your goal is and why you are doing the things you are doing to achieve it?

Ability to see the trade offs

Everything is trade-offs, but most people are not aware of the trade offs they are making when making decisions.

Ability to bend your domain to your will

To not accept the status quo and see what is really possible.

Happiness of excellence - The by product of mastery

In the book Resilience, Eric Greitens, talks about three types of happiness, one of which he calls the Happiness of excellence.

“Pushing ourselves to grow, to get better, to dive deeper is at the heart of happiness.”

“This is the happiness that goes hand in hand with excellence, with pursuing a worthy goal, with growing mastery.”

To me, working towards mastering my chosen craft has been one of the most rewarding experiences of my life.

To feel like you are contributing something, and it is uniquely yours. That it is using all of yourself to create something, and that expression can only come after years of hard work honing your skills.

In Japanese Calligraphy, there is a drawing called an Ensō ring.

There are many meanings, but the one that I heard that stuck with me was this idea, that you train for a long time and after many years you just draw a circle and let it be whatever it is.

It is not the drawing of a beginner, but from someone who is highly skilled, but any “imperfections” are not imperfections but reflect the unique character and perspective that the person brings with them.

The beauty of mastering your craft is that you get to bring a totally unique view to your craft that no one else will ever exactly have.

References

1

https://classicalu.com/the-apprenticeship-model/

2

https://en.wikipedia.org/wiki/Journeyman_years

What is Craft?

"Focus on your craft, one time, before it's all over, You've died, you've squandered it. You fuckin' robots!" - Tenancious D

Another lens to look through this is that of craft.

A key part of craft is the creation of something. Before there was nothing, after there was something, and you were the reason that happened.

After the creation requirement is met, there are two other key dimensions.

In your craft you can produce bigger and better things, possibly things no one has ever seen, and you can improve on how you improve. The meta-improve.

Our woodworker can build better and bigger shelves, but has also refined their process to do that.

A programmer can work on big projects, but has also developed tools, strategies, and a programming style to execute at a high level.

That, to me, is the essence of what makes a craft.

It is a domain where you not only produce something, but there is space to explore the manner in which you do the work or the style of the work meaning you can exercise personal expression in what you do.

The difference between art or craft and science, is that it is impossible to write a playbook for every situation and often there is no clear right answer. This is where self-expression and style can come into play. Many mediums allow for a breadth of options when it comes to how something is made.

You may be in a building, and it has all the normal building things, but it may be a widely different experience if you are in something designed by Gaudi versus Frank Lloyd Wright.

That is what separates a job or a profession from a craft, is the depth of expression that can be achieved in doing it.

To me, that is what is enticing about a craft. It is not just that you can learn how to be proficient in something, but that you can get to a point where you can mold the medium in your own way.

To be able to produce elegant things in an elegant way.

The craft checklist

  • Create something
  • There is huge range of output and space for self expression
  • You can improve on the scale or quality of what you create and the efficiency with which you create it.
  • You can improve your meta skills and processes for the work you create

In the next section we will break down how we can start to improve in these areas.

Techqniue vs craft

A quick aside on technique in general and craft. Often I think these can be conflated. Techniques and tools are very important but that is not our goal. Our goal is create something new and unique and techinque is rarely that and not to highlight the technique.

The techniques you learn are there to support the creation often times used in concert with other techniques. In photography it is often thought of as import to get the right exposure, or the right amount of light for the photo. Which makes sense and having good technique to do that is helpful but that only doesn't make a photo interesting.

In the 90s there was this backlash against "electronic" music. It was seen as easy to just pickup some software and make a song. In the minds of the haters if an electronic song or band did well it wasn't earned because they were just some software.

So there were all these bands that came out that had "real" instruments. Even bands I like, like Rage Against the Machine, had this stance.

Putting aside the silliness of the fact they still were using electric guitars and probably digital recording techinques, plus various electronic based effects pedals and what not.

This is a failure for attributing the good to techniques. Oh this band has a fiddle player, ergo good. How many Yo-Yo Ma albums do you listen to?

The goal is to make a great song, to make people feel things. Nirvana changed music in the 90s and killed the careers of countless lesser bands, with a few power chords. (A power chord has only two notes, it is missing what is called the third of the chord). The constant refrain of oh "Kurt Cobain" can't play guitar).

While Jazz players are adding more notes in thier chords, Nirvana changed and solidfied an entire genre of music just using 2 notes. Jazz maybe technical impressive with lots of chord changes and various techniques but if it doesn't emote anything it misses the true goal of music.

Jazz is not about the listener but the artist. If your work is more about showing off technique then you have lost the plot.

Technique can be impressive but it is rarely moving. This is what Sean Tucker in his book "The Meaning in the Making" calls "majoring in the minors". Missing the major themes and goals of our work in favor of technique.

I think this happens because this craft thing is hard. It envolves diving into the unknown to find things, where a technique is concrete and easy to grasp, then can become a wayward goal to lead you astray.

Creativity

The goal is to create. At the end of the day isn't that what it is all about? Maybe it isn't for everyone, but for me, it is the yin to the yang of learning.

Creativity comes from the Latin words creare and facere, which mean "to create" and "to make" respectively.

You learn all the things, and then you get to create something.

So let's review our terms.

We are following Mihaly Csikszentmihaly definition of creativity in which

Creativity is any act, idea, or product that changes an existing domain, or that transforms an existing domain into a new domain

To Mihaly, creativity has to bring something new and valuable to the party.

While the terms and conditions for what changing a domain or value are up for debate but in general, the distiniction is between what I would better classify as creativity vs novelty.

Margaret a. Boden in "The Creative Mind: myths and mechanisms" defines it somewhat similarily

Creativity is the ability to come up with ideas or artifacts that are new, surprising, and valuable.

Mihaly says further that

A person cannot be creative in a domain to which he or she is not exposed

The destinction here is between creativity and novel.

We often say children are creative, but novel is a better term. Sure, they are creating, but the output isn't going to change the world. No one is lining up to see their latest fridge drawing. A picture of a hotdog fighting a fire maybe novel, but it is not ushering in a new art style.

This goes back to the rule learning phase, while our goal is to move beyond the rules, you still need to internalize them to some degree before you can create something new and valuable.

You need to travel to the edge of the horizon to move past it.

Everything comes from something

What a good artist understands is nothing comes from nowwhere. All creative work builds on what came before. Nothing is completely original - Austin Kleon

What is orginality? Undetected plagarism - William Ralph Inge

There is a lot of mysticism and romanticism around creativity. Many people believe that you either have it or you don't. Or that it comes only in flashes. The lighting bulb moment.

This is a trope in literature and movies, the story of a tortured artist who has an extreme life to stay in touch with that creative spirit. The searching for a muse.

It is not mystical, and it is not extraordinary. It is a skill that all of us have. Sure, some people are more creative, but like many things, it is a range, but everyone has it, and it is a skill you can strengthen.

It is just that we tend to glorify artistic work and not the office worker who finds a new creative solution to their work.

So let's start with the creative genius. This idea is that someone pulls things from the creative ether and creates. It is nonsense.

Mozart is often touted as one of these. But then, when you get past the surface-level details, you see something different.

Mozart's father was a successful composer in his own right and was obsessed with teaching his children music. Mozart and his sister got training from a successful composer from a very young age.

He is often hailed as a prodigy because he composed when he was a young teenager, but it wasn't anything great. It took time for him to come into his own as a composer until he made the things we actually, remember him for.

I am not trying to take a way for Mozart's accomplishments in fact, I think I am giving him more credit. He worked hard to be a musician par excellence.

Mihaly Csikszentmihalyi's take is that

Children can show tremendous talent, but they cannot be creative because creativity involves changing a way of doing things, or a way of thinking, and that in turn requires having mastered the old ways of doing or thinking.

Things are in the air

How about Newton, one of the most intelligent humans probably to have ever lived, who basically invented Calculus on a dare. Which seems incredible, and is, but he was not alone.

Leibniz also invented Calculus independently, and it is his notation that we use today.

While they are both exceptional humans, Calculus was in the air because the need for it was in the air.

Problems beget problems. You cannot see the problem two steps ahead. You need to solve them in order. So you solve basic geometry and algebra, but then still have questions about the universe and realize you need new tools to understand the motions of planets.

This is the spot that both of them found themselves in. The problem was sitting there waiting to be solved, but only when people were in a place to ask the question.

History is replete with multiple people working on the same thing at the same time.

People in a time and place steal ideas from other people in that same time in place by stealing ideas from people that just came before them.

No one in art or science hopscotches over time or, as Kirby Ferguson says, "Everything is a remix." or as scientist Stuart Kauffman defines as "adjacent possible". Everything has a lineage that can be clearly traced. Science has paradigms.

You must explore the first order, then the second order.

Until you are at the edge, the possibility is not visible.

Tales of three's

To make my point, here are three different but very similar descriptions of the creative process.

Three B's

This comes from the book The Runaway Species by Anthony Brandt & David Eagleman.

They break up the creative process in to these three buckets:

  • Bending: Take something preexisting and bend it a bit. The core idea is still there and the lineage is clear, but it is a bit different. Many internet memes function at this level. With time, something, could start to be considered a new thing altogether.

  • Breaking: This is where you take a part of something. Brandt and Eagleman reference things like Picasso and Cubism, or the technique of pointillism. You take a bigger concept and find a smaller atom within and run with that. Or, as Raph Koster puts it, "looking for core small bits".

  • Blending: This is where pull from multiple things and find ways of putting them together.

Everything is a remix

There is a great video essay on how "Everything is a remix" by Kirby Ferguson. Highly recommend giving it a watch.

Here are his three, what he calls "the basic elements of Creativity":

  • Copying: Similar to bending, you copy something, but you change it slightly. Or just by being an imperfect human, you fail at making a prefect copy.

  • Transform: "taking ideas and creating variations. " Similar to copying, but you are purposely trying to create variations.

  • Combine: This is blending, taking aspects from multiple things and combining them.

Humans make terrible copiers, so there is always noise introduced in the copy process, introducing new to the copy. Often times a new element is added, but the core is the same.

Watch the video

Three types of surprise

This comes from: The Creative Mind: myths and mechanisms - Margaret a. Boden

Three types:

  • Making unfamiliar combinations of familiar ideas (Blend/Combine)

  • Exploring conceptual space (Bending/Transform)

  • Transforming space (Transform)

When you have explored the space but want to move on, you need to transform the space to create new rules because the space currently limits what can be done.

Boden talks about how there are limits to writing say a haiku, and that if you like to move in a new direction, you need to transform the space.

Connections

Creativity is just connecting things - Steve Jobs

I might add the term connect to the mix. Often if there is an aha moment, it feels like it happens when you connect something to something else or what Raph Koster calls context replacement: taking something from one domain to another.

This is one of the most useful ways of finding new ideas, you find something that you can steal from one domain and bring to another.

Maybe it could be argued that it is just a form of combining, but to me, it is about seeing a universality to something. Finding a larger abstraction.

Assembly line is simply a general concept that can be applied to almost anything.

Velcro was invented by Georges de Mestral when he observed how cockleburs stuck to certain clothes, making a connection that this idea could be used as a sort of adhesive.

You see something through the lens of something else, and that allows you to apply the things you know from the former field to the latter. This lets you see the new field in an entirely new way.

The opposite of making connections is called function fixedness.

Functional fixedness is when you can only see a thing in a fixed, known way. You see a thing as only the thing it is "made" for.

A famous problem called the candle stick problem explores this very problem where people are given a candle, a box of thumbtacks, and matches, and then asked to attach the candle to the wall without dripping wax onto the table.

Spoiler alert, the trick is to see the box as a candleholder. Most people see the box as a box that held the thumbtacks not as a mini shelf. People often fail to take the box into consideration at all.

Creativity as vector space

Vectors

There is no math in this section, so don't worry. I don't really know any anyway.

There is a concept of vectors and vector space. It is a huge part of how LLMs like Chat-GPT work.

I think it is a good metaphor for creativity. If we think of creativity as exploring a search space then vectors are a perfect metaphor.

There are a few ways to think of vectors, but the easiest and the one we will use for this is the idea of an arrow pointing in space, in this case 2D space.

Vectors

Bending

For bending we are just moving the arrow a bit. It is in the same vicinity, but it has moved. Overtime and with many bends, it could end up being a totally new thing.

Same thing with copying, you can't make the same thing so you end up making something new.

Vectors

Breaking

Breaking is break and apart something to then recombine in new ways. We are trying to find a smaller atomic unit of a thing and then use that to explore a space.

Those little breaks lead to a different designation.

Vectors

Combining

In an episode of the show Flight of the Concords, one of the characters tries to replace their friends' camera phone. (This is from a some time back when those were still newish). So they tape together an old camera and an old cellphone.

This is just straight addition, and this is rarely a creative act. The additive parts retain too much or all of their original characteristics. They are not merged or blended in any way.

You really are just using the two ideas independently.

Combine is the vector addition where the two ideas are a mixture with other pulling the other in a new direction.

Vectors

William Shockley, the co-inventor of the transistor, wrote a paper on the variation in productive among scientists. It is pretty blunt, "It is well known that some workers in scientific research laboratories are enormously more creative than others".

One of the main things that he highlights is connections and holding different ideas in your head, and how that can increase the number of permutations you can bring to a problem.

Let say a person is aware of two techniques, or ideas, then the combination is (1,2) (2,1).

But if you can increase that even by one idea, then the permutations are much larger.

(1,2,3), (2, 1, 3), (1, 3, 2), (2, 3, 1), (3, 1, 2), (3, 2, 1)

The more ideas you can combine, the more possibilities and the more chance you have to create something new.

Amaury Guichon

This is Amaury Guichon and self-proclaimed "Chocolate Guy" and yes, if you are looking at that Instagram post, it is a chair made completely from chocolate. If you go through his feed, you can see all sorts of crazy things: full-sized Lego characters, giant strawberries, a full on life-sized bar.

It is incredible; not only has he mastered the techniques of making chocolate, probably creating some on his own, but he has taken his craft in his own direction.

I think he is a perfect example of someone mastering their craft. He most likely had to learn all the basic skills in pastry and chocolate making, but I doubt there is a book on how to make chocolate with enough structural strength for someone to sit on.

So he had to master the basic skills, probably invent or find new skills, and then synthesize many techniques as well.

Then, moreover, he has injected his own creativity and own goals for this to take this in a new way. His work is its own thing.

It fills every box on the craft checklist.

The craft checklist

  • Create something
  • There is huge range of output and space for self-expression
  • Improve on the scale or quality of is created
  • Improve your meta skills and processes for the work

Amaury Guichon

Goal

One of the themes of this book is that after a certain level of skill you are on your own. You can't just pick up a book on something that doesn't exist yet. This is the same with your goal for what you are working towards. Moving past the intermediate level, people will diverge.

Here is where it gets fun. I think everyone has their own view point, or the way their brain works. Our job is to accentuate that as much as possible.

After you have learned to apply the rules, now you get to find areas of your craft to focus on. It could be many things. Like focusing on your own style of art, or it could be meta skills, where you can organize something at a high level.

For me, my skill, I think, is that I hate to repeat myself and everything needs to fit. So my skill set is not so much in programming but in solving technical problems. While they sound like the same thing, they are not.

For me, I love simple and elegant solutions. What I have realized over my career is that I love solving problems and then moving on. The fun is creating something that truly solves the problem, so I can forget about it. If I can find a new and elegant way to do that, even better.

That goal though took time to figure out.

It is also what makes this journey so awesome.

You get to figure out what excellence means for you and where you want to break or create new rules.

So you are going to have to figure out what the bar means to you. What does excellence look like for you?

This is an ongoing process. This will be circular. As you go and improve and are more capable, you can keep pushing.

Our goal is the flag we put down, and then we work on elevating our skills until we can actually reach that goal, rinse and repeat.

So our goal is to set our own goals.

What would the best version of this look like to you?

What would the best that had ever done it look like?

Not knowing

On this front, I don't have too much advice except to say if you don't know right now that is ok. It can take time, and it is ok to explore. If you don't, then I would recommend trying as many things as possible, but it can't just be thinking about it.

You need to actually try something before your brain will really be able to give a thumbs up or thumbs down. Make small bets and try things. If you don't know what you want, try to exclude all the things you don't want. Sometimes that is easier.

Also, this is a cyclic journey, as your goals will change as go along. As you go and your skill improve, and you learn more, so does the next goal state.

Taste

Nobody tells this to people who are beginners, I wish someone told me. All of us who do creative work, we get into it because we have good taste. But there is this gap. For the first couple years you make stuff, it’s just not that good. It’s trying to be good, it has potential, but it’s not. But your taste, the thing that got you into the game, is still killer. And your taste is why your work disappoints you. Many people never get past this phase, they quit. Most people I know who do interesting, creative work went through years of this. We know our work doesn’t have this special thing that we want it to have. We all go through this. And if you are just starting out, or you are still in this phase, you have to know its normal and the most important thing you can do is do a lot of work. Put yourself on a deadline so that every week you will finish one story. It is only by going through a volume of work that you will close that gap, and your work will be as good as your ambitions. And I took longer to figure out how to do this than anyone I’ve ever met. It’s going to take a while. It’s normal to take a while. You’ve just gotta fight your way through. ― Ira Glass

As we try to do new things and move past the known, there is no one to guide you. So another way to define our goals, is to look at what we like and in some cases just as important what we hate. This is the one time when it is ok to be a hater. That hate is what drives us forward to not accept the status quo.

Our taste is what sets us apart, this is your natural bar for quality.

Your taste is the only thing that matters at the end of the day. We can steal and get opinions, all good things, but I think to create something great it has to be authentic.

This is really about finding what makes you happy, not anyone else. Maybe it is not about learning, it is about accepting and then refining.

You listen to more music to find more things that expand your views. You eat every type of food.

I think this is one part of this process which less additive and more subtractive. You are stripping away the things that are blocking you from following your taste.

That being said, as you get exposed to more things your taste will improve. Try to find as many things that can show the range of possibilities. That shows you the contrasts in possibilities.

Keep looking for "I didn't know x could be this" moments.

Rick Rubin

Rick Rubin has produced some of the most iconic albums of all time. Licensed To Ill, The Black Album, Wildflowers.

His resume is astonishing, producing even one of these albums would have been career defining, but he has done it over and over again.

How?

Well, if we are to take his word for it, he has no real musical or producing skills. He can barely play an instrument, and claims that he doesn't know how to even work a soundboard. 1

"(I have) No technical ability" "I know nothing about music"

"I know what I like and I don't like, and I am decisive about what I like and don't like"

"the confidence I have in my taste and my ability to express what I feel" Is the response to what he gets paid for.

I feel like he may be downplaying his talent a bit, but I tend to overall believe him.

When you make something it really is difficult to evaluate it. Having someone that you can ask is this good or bad that you actually believe is an insanely valuable person.

There is so much music that you listen to, and it is just baffling that it left the studio.

You need to be able to produce great art but at the same time need to know when it needs to be edited or reworked.

His whole job and career is basically a taste tester.

Steve Jobs

Comedian Bill Burr has this whole bit basically tearing down the hype and myth around how Steve Jobs was a great man.

His basic premise is that Steve Jobs couldn't do shit. He wasn't really an engineer, or programmer or designer. It was all the engineers, designers, testers, etc. that made these things possible.

It is not entirely wrong. This is also a hard aspect if you move from your craft to management, is the feeling that you are less if you are not actually doing the work directly. But that aside.

He is not wrong in that all these remarkable people brought a vision to life and all the credit or most of it goes to Steve Jobs.

But let's ask the question. What separates Apple from most companies? What made the iPod and then iPhone iconic?

It was taste and the ability to see what was really possible.

Steve Jobs had a unique and strong design aesthetic, he knew what he liked and what was good and not.

He also wasn't stupid or clueless. He studied tons of things and could tell when someone was bullshitting him. You couldn't bullshit him. He was a master at first principle thinking.

He knew what was possible. People don't do things until things are proven. Those people on the edge can push where others would stop.

There is this story of the early iPhone development, and Steve wanting it to be smaller. The engineers balked and said it couldn't be done. Steve threw the prototype in a fish tank and all these bubbles came out, showing that there were still pockets of air and space in the device. 2

"Those are air bubbles," he snapped. "That means there's space in there. Make it smaller."

What the engineers were really saying was that they didn't know how to make it smaller. That is very different from it couldn’t be smaller. These often get conflated.

This is why thinking from first principles is so important.

Here is the unfortunate problem. Most people don't push the boundaries. They stop at good enough.

There have been a ton of companies that want to do what Apple does, but they can't.

So while I agree that often people like Steve Jobs get too much credit, there is some truth to the idea that level of quality wouldn't have been reached without him. See Microsoft.

It is having a point of view and a standard, a refined taste.

Bauhaus

When I started off programming, I didn’t know really what it meant to be a good programmer, and sure didn’t know what it meant to write good code.

I didn't know what I was doing, so I started reading everything I could and many of those books were on design.

Books like The Design Of Everyday things.

I learned about Bauhaus.

Bauhaus was a response to refocus on the needs of the users of things. Workers need light to see what they are doing, in an era with limited electric lighting then pushing the constraints of the building to make windows larger makes sense.

It was about capturing more of the domain in your design.

While I was programming, not designing buildings, it gave me an aesthetic that I could use to judge my work.

Form should follow function.

In programming, you can write a program in a near or possibly infinite number of ways. It is like writing in a way.

So Bauhaus became my judge or better a filter on all the possibilities.

Finding Bauhaus gave me a framework or hook to what to shoot for. Form follows function. No bullshit.

https://news.ycombinator.com/item?id=12793624

But it is not that I converted myself to Bauhaus. Bauhaus was in me all the time.

We see new things and at times they can show us how great things can be, but that seeing is still coming from ourselves. Our own internal taste.

We find inspiration and that is great, but that inspiration enhances our internal taste and love, we are not swapping or losing something.

To me if perfection is when there is nothing else to take away.

If Bauhaus is not your thing, search around.

Look at maybe different areas of your own field.

Most of my programming career I worked more on the data side of things. I never wrote a professional game, but these developers have different constraints and in so have different tools and strategies.

What have they learned, what do they consider good? Can you steal from another area?

Go broad

There is a lot of commonality to problems and probably some field has dealt with it.

There is most likely some field that has already solved the problem or can be robbed for guidance.

Critique

Apple vs MS commercials

Challenge

Find and continue to refine your bar for excellence. What does excellent mean to you?

References

1

https://www.tiktok.com/@60minutes/video/7189964392400833834?lang=en

2

https://www.businessinsider.com/steve-jobs-threw-ipod-prototype-into-an-aquarium-to-prove-a-point-2014-11

Style

Constraints

Style is "nothing but the consequence of creating under constraints" - Cristina Videira Lopes

Let's talk about style, another aspect to our craft checklist. So what is style?

Every medium that we work in has constraints by its nature. A guitar or oil on canvas behaves a certain way. By its nature it doesn't just provide great results, you have to learn how to overcome these constraints in order to make something good.

Throughout our journey we are butting up against these. As we go it becomes easier, and I think this is an aspect we admire the most in masters. The effortless way they work with those constraints, by making them seem no longer seem present.

We also have the constraints that are self-imposed. I think these are the more important of the two, the natural or external constraints and our self-imposed constraints. The reason being is everyone will face the same natural constraints, it is our self-imposed constraints that sets us apart.

A photographer that only shoots in B&W or with film. Whatever it maybe for your space, as you grow you will often impose constraints on yourself. It is often thought that constraints limit what you produce but it is actually the opposite.

Micro-decisions

Style is a set of different repeated micro-decisions, each made the same way whenever it arises, even though the context may be different - Frederick P.Brooks, JR.

I am not sure it is irony but while there are constraints, at the same time there is too many choices. In technology, we call this the search space. The medium is constraining us in but at the same time there seems to be a million ways to interact with the medium.

I think many beginners feel this when getting into to hobbies, the shear volume of things. Oh, you want to get into photography, which of the numerous brands and types of cameras should you choose? It can be overwhelming. I want to paint a beautiful sunset, should it be water colors, oil, acrylics. What brush strokes should I use?

Often beginners will just choose anything that is convenient at the moment but often next time a similar situation arises they may do it differently.

They don't have any consistency or intention. The choose things based on trying to get through the moment, not on why you should do that way or not. To them, these decisions are functionally equivalent because they are unaware of what the differences are.

Each choice has many implications, most of the time made without any knowledge of what those implications are.

These often explicit choices are what enable us to reach our goals.

Part of reaching mastery is understanding that every decision can capture more of your domain. That is what can make one decision better than others.

This is a super contrived programming example to keep it simple for non programmers. Let's say we need to square a bunch of numbers and create a new list or array of them. The basic way is to use a for loop. A for loop, repeated over and over until some condition is reached.


numbers = [1,2,3]
squared = []

for num in numbers:
	squared.append(num * 2)
	
#squared ia now [2, 4, 6]

In Python and many languages though, there are other ways to do the same thing. In Python, there is a thing called a list compression that basically applies an operation to a list and returns a new list.


numbers = [1,2,3]

squared = [num * 2 for num in numbers]


This, to me, is better for many reasons, we won't get into all of them but a major one it is easier to understand. In programming we are trying to get computers to do things, but we also need to write code others can use, including or future selves. So part of my style is making choices that take that part of the domain into account. That part of the domain I am trying to capture is the cognitive load. Meaning, more complex code is harder to understand by others.

While both examples are simple now, but what tends to happen is things like this:


numbers = [1, 2, -3, 4, 5]
user_threshold = 0  # We'll pretend the user gave this value earlier

for i in range(len(numbers)):
    # 1. Convert negative values to 0 in-place
    if numbers[i] < 0:
        numbers[i] = 0

    # 2. Print debug info for every item
    print(f"[DEBUG] Index {i} has value {numbers[i]} before doubling.")

    # 3. Double the number in-place
    numbers[i] *= 2

    # 4. Check against user threshold (unnecessary nested logic)
    if numbers[i] > user_threshold:
        print(f"Value {numbers[i]} is above threshold {user_threshold}!")
    else:
        print(f"Value {numbers[i]} is NOT above threshold {user_threshold}!")

    # 5. Perform a second calculation for some reason (mixing logic)
    random_calc = (numbers[i] // 2) + 42
    print(f"[DEBUG] Another random calculation for index {i} is: {random_calc}")

print("Final numbers:", numbers)


This is a super contrived example that Chat-GPT wrote, but even then, this is far from the worst I have seen. So it is not that for loops are bad per se, but when you use them, you make a choice. That choice often has secondary effect. By using a for loop when something better exists, you open the code up to father terrible choices. The for loop is often the lazy option instead of structuring your code in a better way.

Each choice hopefully improves a secondary decision. We talked about how masters can show economy of motion, and that is because each choice is made to serve the next. In this case, it could also be to prevent things. In this case, by not using for loops, I am hoping to prevent further devs from just extended creating bad code. Also, for loops are often where bugs are introduced. By avoiding them, I am hoping to have first order effects, easier to read, the code is broken up into more logical steps, and secondary effects, try to prevent bad code and introduce difficult to find bugs.

The list comprehension by limiting its structure represents a constraint. This to me is another aspect of style or the lack thereof. People without style don't give themselves any constraints and will just tack on things and never reduce.

If we could define a big part of Hemingway's style, it would be around constraints and his disdain for adverbs. 1

We often think about style as the outward appearance. Hemingway writes like this, Steve Jobs dressed like this, a painter paints like this. Those are the symptoms, but not the core. There are underlying reasons and goals a person is trying to achieve, and the affectation is style.

Style working definition

To sum up, style is our intentional, consistent decisions and constraints through which we express ourselves.

Another way to say it, is style is our filter we use to block out the aspects we don't want and to focus on what we do want.

We develop our filter to focus on the things we care about, want to extenuate and highlight. The things that bring us the most value, while excluding the things that don't.

Developing your filter and finding your style

So our goal is to figure out what we want to achieve and then develop our style in hopes that it helps us reach our goals.

Like pretty much all the things in this book, there is probably no straight line to that answer. It is a mix of exploration and discarding. Exploring, looking for new things that help and discarding the things that don't.

So it will, may seem a bit contradictory that as we go we want to exclude increasingly in order to find our style, in the beginning though we should be exploring as much as possible. In fact, this probably never stop. I have been programming professionally since I was 17, and I am still not fully happy with my style and still exploring.

Overtime, what we choose to keep out of our style is just as important as what we keep.

Let's look through some strategies to help find our style.

Copy, copy, copy, copy

Nobody is born with a style or voice. In the beginning, we learn by pretending to be our heroes. We learn by copying. - Austin Kleon

Those who do not want to imitate anything, produce nothing - Salvador Dalí

Start copying what you love. Copy copy copy copy. At the end of the copy you will find yourself. - Yohji Yamamoto

In the beginning, we often don't have a good internal critic or goals on what is good or bad. We need to start somewhere, and that place is to imitate the people you admire. Some of the most famous bands started out as cover bands.

Daniel Coyle in "The Little Book of Talent" calls this engraving

"Chess players achieve this by replaying classic games, move by move, public speakers do it by regiving great speeches complete with original inflections; musicians cover their favorite songs; some writers I know achieve this effect by retyping passages verbatim from great works"

He goes on further to say that we are often told talented people acquire their skill by following their "instincts". But he says this is basically BS and "all improvement is about absorbing and applying new information"

Your natural instincts and likes and dislikes can come in the form of your taste, what you think is good and bad, but on the skill side, a lot of it comes from stealing or imitating others.

There are many goals with this practice.

  • Develop our inner critic and analyze what you like and don't like about different styles
  • Understand our goals better
  • Understand the space of possibilities
  • Steal as many techniques as we can.

Which brings us to our next step.

Steal

Don't steal the style, steal the thinking behind the style - Austin Kleon

If you just mimic the surface of somebody's work without understanding where they are coming from, your work will never be anything more than a knock off - Austin Kleon

Copying is a great place to start but what we really want is to steal. Great artists steal and such.

This highlights the idea that style is about a goal or what the creator is trying to capture.

We often see style as the end goal, but often it is a side effect of what the person is trying to achieve. We don't want to blindly copy and mistake some aspect or technique as the goal. This is the origin of cliché. We want to understand what the person was attempting to achieve and see if that matches our goals. If it does, then we steal that intention or that goal.

In the J.J. Abrams Star Trek reboot, he was criticized for the use of lots of lens flair. It is excessive, but it wasn't about using lens flair. He was attempting to find a way to make the movie look futuristic. That was the goal, the lens flair was just one (overused) technique to do that. We are looking for that level of understanding when attempting to steal from others. What were they attempting to accomplish?

We are seeking contrasts. The contrasts in working in different styles will highlight your own style better. It will bring out the consequences or implications of that style.

Break down the advantages and disadvantages of that style. The goal of your style is for it to be deliberate and to capture more of your domain.

Bauhaus or steal a design philosophy

When I was starting out in software, I had no idea what it meant to write "good" or "bad" code. It seems obvious now, but back then I just didn't have many mental hooks to judge it. Sure, your code should do the thing that it is supposed to do and also not crash, but how did that translate into the lines I wrote?

To start, we need some hooks or some scaffolding to start with. Some kind of measure we can stick in the ground to reference. The reference itself is not always that meaningful, and we may grow to move away from it. That is ok, but we need something. It is like being lost and finding reference markers to orient yourself.

For me, that was Bauhaus.

Bauhaus was an art school founded in Germany in 1919, which led to a design movement that influenced many areas, from art, to architecture, industrial design and many more. 2

This design philosophy focused on the function of things, and that the form of something comes from the function of it. Kind of how we have been talking that our style comes from the function of our goals and not the other way around.

A good example of this can be seen in Bauhaus influenced architecture. This building was designed by Bauhaus founder Walter Gropius in 1911. 3

Fagus

What may not be immediately apparent to our modern eyes is all the glass. This is quite common now, but back in the early 19 hundreds not so much. Building needed lots of support with the then prevalent materials. Will talk more about this as well in the design chapter, but they were trying to build buildings that stood up, they weren't as focused as much on the people who needed to use them.

This is where the form follows function comes from. The idea behind Bauhaus is that the part of the domain we need to capture is that people have to work in these buildings. People need light to work and in a time when electric light was also a new thing, natural light was a much-needed requirement. Even beyond that, having natural light and space provides a much better working environment.

The design of this building follows from those design goals. The glass to the corners isn't just a stylish aspect, it comes from a want to provide the most amount of light possible to the interior.

This idea directly influenced me when I was starting out programming. I should focus on what I want to accomplish and not how it looks. When I was starting out, all serious programming was done in a programming language call C++.

It is still used a lot today in game programming. That being said, C++ is a superset and a defendant of a language called C. So code written in C can be used in programs written in C++. To me, C++ was and is a language that has lost the plot on form. There are a million ways to do things in the language, so much that there is a whole series of books called "Effective C++" on how to use the language properly.

C is a minimal and elegant language where it is difficult to write things in meaning you are constrained, and by its nature, is difficult to add useless forms.

Which brings me to my next point.

Wabi-Sabi

tbd https://youtu.be/csfr1ht-uCc?si=VL58dzdqfmBhtS12

Constraints

While at the time I am not sure if I could give you a real flushed out criticism of C++ but my initial reaction was that there were many things that seemed superfluous. That being said, what was clear to me was that C++ was a huge league to master. Like I said, there were many hundred-page books written for people that already knew how to program in C++ but still needed guidance on how best to use the language. There were just too many choices that didn't seem directly related to my goal of creating good code.

My choice in using just C was also a decision to reduce the space of choices. C++ had so many features in it that learning all of it would take a lifetime, possibly several.

C is a minimal language and, while still requires time to master, its features do not.

My point is each choice unlocks even more choices and options. By limiting it, you can focus on a small subset of things first.

I am starting out in photography and there are so many options. Cameras, lens, editing and many more things.

Should I use this lens or this one, what is the reason for one over the other?

Our goal is not the lens or the camera but the photo.

For me, I find it helps to limit some choices at times to find something so you can focus on a smaller number of aspects.

We want to focus on the result and then see if the tools and techniques, lenses or languages are helping our hindering us.

Speed

Another aspect of style is speed. We talked about how masters can create faster than non masters and part of that is that many of the micro decisions have already been answered. By developing your own style you already have a framework on how to solve any problem.

When starting on a project, beginners and intermediates often have a blank slate and need to answer a whole set of questions. As you build your style and your filter, you have already eliminated those choices and can just work.

Style questions

These are a set of open questions to help with figuring out your style.

  • What is does it mean to write good code, take a great photo, etc?
  • What are the gaps between what you want to create and what you are creating?
  • What are the micro decisions?
  • What parts of the domain are you trying to capture?
  • What do you like or dislike in a style?

Exercises in Style

Exercises in Style by Raymond Queneau is a book where the same story is told in 99 different styles. 4

I learned of that book from the book Exercises in Programming Style by Cristina Videira Lopes, where she shows the code for the same problem written in 47 different programming styles.

  • What would be the "Exercise in Style" for your craft?

Mood Board

Create a mood board. Through everything you like on there and start to analyze what are the commonalities.

References

1

https://www.coleschafer.com/blog/ernest-hemingway-writing-style

2

https://en.wikipedia.org/wiki/Bauhaus

3

https://www.artsy.net/article/artsy-editorial-8-iconic-bauhaus-sites-visit-100th-anniversary

4

https://en.wikipedia.org/wiki/Exercises_in_Style

My style

This could be way longer but I thought I would show my version of the text frequency problem in from Exercises in Programming Style.

The goal of the programs is "Given a text file, we want to display the N (e.g. 25) most frequent words and corresponding freqeuncies ordered by decreasing value of frequency." As well as through out stop words (the, a, an, etc) and stadardize capitalization.

The Gettysburg address looks something like this as output:

here: 8
nation: 5
can: 5
dedicated: 4
shall: 3
...

Object Oriented Style (From Exercises in Programming Style):

This is in a style called object oriented programming, where part of the goal is to encsapulate complexity into objects.

import sys,re,operator,string

from abc import ABCMeta

class TFExercise():
    __metaclass__ = ABCMeta

    def info(self):
        return self.__class__.__name__

class DataStorageManager(TFExercise):

    def __init__(self, path_to_file):
        with open(path_to_file) as f:
            self._data = f.read()
        pattern = re.compile(r"[\W_]+")
        self._data = pattern.sub(' ',self._data).lower()

    def words(self):
        return self._data.split()

class StopWordManager(TFExercise):

    def __init__(self):
        with open('./stop_words.txt') as f:
            self._stop_words = f.read().split(',')
        self._stop_words.extend(list(string.ascii_lowercase))

    def is_stop_word(self,word):
        return word in self._stop_words


class WordFrequencyManager(TFExercise):

    def __init__(self):
        self._word_freqs = {}

    def increment_count(self, word):
        if word in self._word_freqs:
            self._word_freqs[word] += 1
        else:
            self._word_freqs[word] = 1

    def sorted(self):
        return sorted(self._word_freqs.items(), key=operator.itemgetter(1), reverse=True)

class WordFrequencyController(TFExercise):

    def __init__(self,path_to_file):
        self._storage_manager = DataStorageManager(path_to_file)
        self._stop_word_manager = StopWordManager()
        self._word_freq_manager = WordFrequencyManager()

    def run(self):
        for w in self._storage_manager.words():
            if not self._stop_word_manager.is_stop_word(w):
                self._word_freq_manager.increment_count(w)

        word_freqs = self._word_freq_manager.sorted()
        for (w,c) in word_freqs[0:25]:
            print(w, ' - ',c)


WordFrequencyController(sys.argv[1]).run()

Modern, hide everything away style.

My version

import string
import sys

def read_file(file_name):
    with open(file_name,"r") as f:
        return f.read()

def top_25(file_name):
    freq_dict = {}
    
    file_data = read_file(file_name).lower()

    stop_words = read_file('./stop_words.txt').split(',')
    
    punc_free = ''.join([c if c not in string.punctuation + '\n' else ' '  for c in file_data])

    words = [word for word in punc_free.split(' ') if len(word)]

    filtered_words = [word for word in words if word not in stop_words]

    freq_dict = {word: filtered_words.count(word) for word in set(filtered_words)}

    return sorted(list(freq_dict.items()), key=lambda tup: tup[1],reverse=True)[:25]

print(top_25(sys.argv[1]))


The exposed brick style

My style

Everthing here is done for a reason. Younger me would have probably compressed it even further to show off, but literate code is a better design goal, for yourself or others that have to read it. Also to note I am still not fully happy with this, there are a few things I go back and forth on, like the .lower after the read_file.

My current style is the fusion of functional programming and data programming.

The main part of the file is trying to be step wise literate, meaning anyone coming into this program can read it quickly from top to bottom to understand the entire flow. This is a small example by I still do this with larger programs. I hate code that I can't quickly get the jist of what it is trying to do.

This is a combination of some functional programming style, plus a data programming style. Everything is a transformation and there are steps. I like having basic steps that can be broke apart or changed, and most importantly debugged. When the code tries to do all the things at once, like if this was a big for loop reading and doing the steps one at a time, it sucks to debug or log or change.

With code like this, it is easy to log each step and see if that step is correct. When code is more nested any change could break the whole thing. But this builds on the previous step, if that is correct, then you can forget about it and move on.

There are also no ifs or explicit loops. Under the hood the list comprehensions are loops, but there is no typed out loops. The reason being is a large number of bugs are introduced when writing conditionals or end conditions of loops. Boundary conditions are a pain and easy to screw up, so best to just try and not use them. Let the code process a whole arrary or data stucutre. Then filter out what you don't need.

There are also no new data structuctures, so when possible always stick to native data structures so that other code can just use them. Cognitive load as a domain component.

At a high level here are some of the domain I am trying to capture in my style:

  • Lower cognitive load, readability, basic data structures, small functional functions
  • Lower state or make it explicit
  • Limit variables as naming is hard, conditionals and basic loops as this is a common area for bugs
  • Referential transparency - all functions should easily be readable and function is stateless
  • Composability - Use native or basic data structures and stateless functions to aid in composability.
  • Solve problems as a chain of seperatable operations, this makes debuging and changes easy.

Building your brain

The human brain maybe the most complex thing in the universe. That is fucking crazy. There are 100 trillion connections in the human brain. While AI is moving closer every day, as of writing, this it is still not three yet.

The human brain is an amazing pattern finding machine. It can learn patterns that we can't always put into words and describe. That is because often language is a poor medium for the things that the human brain can learn and capture from the world.

I think this is one reason there are so many beginner books. Beginner books are easy because there is a clear skill or pattern to describe. Most of these deeper patterns are very difficult to explain. There is a term called expert bias, where you stop seeing the world in the same way. As we develop our brains, the early layers of scaffolding fall away, and so we can't see them anymore. You probably can't explain how you tie your shoes. You just do, and with time you can build your brain to do the same things.

Our goal is to find ways of teaching our brains those deep patterns.

Here is how I break it down.

  • Survey the domain
  • Learn tools/techniques
  • Explore and experiment
  • Practice synthesizing them in order to find new rules
  • Use challenges, constraints and challenges to push ourselves and build our mental models

Learn tools/techniques

Surveying the domain

This journey never ends, but especially at the beginning, we need to survey and learn our domain. We are explorers setting out and drawing the map as we explore the terrain. There are a ton of skills and techniques that could be learned, but it is not always possible to learn everything. We need to survey and try our best to pick skills that will be useful for our goals. Especially to start.

In many video games, there is a tech tree of things that can be researched. What would a tech tree of skills look like for your craft?

Building the substrate

A fox knows many things, but a hedgehog knows one important thing. - Isaiah Berlin

Once we surveyed you need to build a foundation and master the fundamentals of your craft. There is a constant discussion of if you should learn one thing or many things even in one craft or art. The master of non paradox. You do you, but here is my advice. When starting out, I think it is good to survey as best as possible and then pick one aspect to master. Maybe this changes a bit early on, but I think it is really too helpful to master some aspect of your domain.

This would be a middle ground to the master of none or master only one thing. What our goal is to go deep on one thing to have a substrate or a grounding we can fall back on and a base to contrast new things with. It is effortless to just pick up new things. Now maybe when you have picked up a ton of new things, perhaps you reach a certain level. It could be. In my experience though, even people that know many different things, and I think this is helpful, still have a solid base in something.

In programming terms, there is this constant temptation to learn multiple languages. I would recommend mastering one to start, then branching out. There is something about getting to a highly skilled level in one aspect that I think you just don't get by jumping around. For difficult skills, you need to push to reach new levels, while to be honest, being a beginner is easier.

It is easier to get to intermediate in say a bunch of foreign languages, then it is to be able to speak near native level in just one language.

  • What are the key techniques in your field?
  • What are the large areas of study?
  • If you could, what would a map of all the key areas be?

Synthesize Techniques

In learning an instrument, you practice scales. The goal is not to play those scales in your music because they sound boring, but to build up dexterity and speed to build on that to make new music and melodies.

Having numerous techniques or tools allows you to rework them in new ways to achieve your goal.

In the Little Book of Talent this is described as a soft skill vs hard skill. 1

Hard skills are something that is more or less clearly defined. In playing guitar, there is a technique called bending where you bend the string to raise the pitch of the note. You have heard this countless times in guitar solos.

You can train that as a hard skill, where you work to make sure when you bend you are actually hitting the next note. Then you can practice the soft skill of soloing, where you bring in bending and other techniques to create a new solo.

When people are at that intermediate step, the question is: What should I learn next?

When you are evaluating what to work on next, the question becomes, is this a task that forces me to synthesize many techniques or create new ones to achieve the result? Or is this a technique that would be useful to know, to synthesize for the former?

Again though, be wary of too much technique

It is very easy to confuse the essence of what you are doing with the tools that you use - Gerald Jay Sussman

Internalize

Another aspect of building our brain is having our brain internalize more and more of our craft and domain. We will talk about how to do that in the Three C's section, but before want to highlight a couple of aspects or goals that we are aiming for.

Chunking (New)

There is a theory called chunking theory which tries to explain how experts like chess masters can remember so many different games and positions, where us mere mortals can't.

Most people can only keep between 5 and 9 things in their head at any give moment, but chess masters seem to defy that, and can quickly be shown a board of chess positions and easily recall it even though it may contain many more than 9 pieces. 2

What chunking theory and experiments show, is that they suffer the same limitations as everyone but there brain has chunked things in a way that larger groups of items become a chunk, then they are operating on that. 3

When experimenters showed chess masters boards where the rules of chess were not followed, meaning they would never occur in actual play, their memory fell apart and they did no better than novices.

Their brains had baked in the rules of chess and when the rules were gone, they were forced to just rely on rote memory. Then they were just using the standard 5-9 working memory.

We can do the same thing with our own domains. On our of goals in building our brains is building those chunks so we can hold more of our domain in our heads.

Finding Abstractions

Abstractions are just chunks that we can name. Well, there is more to it than that. I think this definition by one YouTuber is pretty spot on. 4

(The) technique of removing specific details to reveal an underlying structure is called abstraction - Eyesomorphic (YouTuber)

What we care about in a good abstraction is that it hides details we don't care about and highlights the parts that we want to leverage.

In the awesome book Salt, Fat, Acid, Heat by Samin Nosrat she breaks down cooking into those 4 abstractions.

The idea is to stop looking at an ingredient or even a technique as standalone but to see it instead as an abstraction, or in the case of cooking, what role does that ingredient or technique play?

Most cookbooks contain recipes, but learning a recipe is different from learning to cook. So instead of thinking about does this recipe use lime, lemon, or vinegar. You can learn about acid, one of our most basic tastes, the mouth-watering one.

By understanding that food often tastes better with some form of acid and then learning that things like lemon and lime or vinegar can be abstracted as an acid, then you can just think about it in those terms.

There is an episode of Top Chef where a team was making mac'n cheese out on a ranch and somehow didn't have all-purpose flour to thicken the mac'n cheese. This was a problem and the dish would be ruined without. Luckily, another chef had xanthan gum, which is this food additive that can be used as a thickener. Mac'n cheese is not normally made with it, but it worked, and that dish was a part of the winning team.

Instead of saying I need AP flour, and understanding that abstraction, you really need a thickener, and now you have tons of options.

Track vs file

One note on the possible pitfall of abstractions.

They can start to block the reality or a better view of a thing. This happens too often in software, where people get blocked by the abstraction.

Abstractions are like rules or a view of something, it is only useful if it helps you achieve a goal, but don't get locked into it.

I once worked at a startup building security video systems. Most of the team where these old video heads and there abstraction of choice was the track. In recording pre digital, you had physical grooves in the record where who record sound. Then you could have multiple, say when recording an album, one for the vocals, one for the drums, etc. After vinyl, multi-track recorders used tape, but the term track came along for the ride.

My task at this startup was to build a storage system for all the video recordings. In meetings though we kept butting up against this abstraction of the track because it was often limiting there thinking. A track was an abstraction that came with certain "rules".

Like that it was like a tape or physical media that it had to be read sequentially like tape had to be. But this was all digital and the "track" would be just files. File is a better abstraction in this case because you drop all the limiting ideas of a "track" must be. It could be multiple files, and they could be broken up in various was and there are a ton more operations that you can do with a file that you can when you think of your recording as a track of sequential bytes.

Grokking

To understand. Connotes intimate and exhaustive knowledge. When you claim to ‘grok’ some knowledge or technique, you are asserting that you have not merely learned it in a detached instrumental way but that it has become part of you, part of your identity. - Eric S. Raymond(The New Hacker’s Dictionary)

Wissen/Kennen German has two verbs for "to know" because, of course, it does.

Wissen is to know a fact. Kennen is deeper knowledge, more to have experience of something. You can know of something, or know that facts (Wissen), kennen is to be familiar, to have person experience with something.

In software there a similar idea, called grokking. As the quote states, it is a deeper form of knowledge. Let's say you can do basic things in Calculus, but that is it, you can operate and solve Calculus problems. Grokking is that the ideas in Calculus like rate of change, limits becomes part of your general thinking. It is like breathing, it stops being a conscious exercise but something you just exhale.

References

1

The Little Book of Talent: Daniel Coyle

2

https://www.scientificamerican.com/article/the-expert-mind/

3

https://onlinelibrary.wiley.com/doi/10.1111/j.1553-2712.2008.00227.x

4

https://www.youtube.com/watch?v=DrldYpmwN5s&list=PLoCKNPo3VR0I2wqT2wemCNIlpjdy_Ry_q&index=1

Learning to Learn

Until the machines take over, you need to be able to learn new things. There are always new things to learn and most crafts and skills are moving fast. So being an autodidact needs to be a part of your repertoire.

There are a ton of good resources on this, so I am not sure if I am bringing much to the party, but I am going to share what has helped for me. I think, like the rest of this quest, you will have to find your way to what works for you.

Find multiple sources

You are looking for someone to it explain it in a way that makes sense for you. We learn by attaching it to something already in our head. I typically try to find a few sources for anything I am learning. Some materials just suck or show expert bias in what they are teaching by omitting a bunch of things. They have already chunked and grokked many aspects and are not always good at reversing that to make a path for you to learn it.

I find this for picking up things like math. Most sources jump into it without giving any context on what and why we are doing something.

Like when you are learning Calculus and someone just drops "instantaneous rate of change". If I freeze time how can there be a rate of change, everything is frozen? This is often assumed that you just know that is a Platonic idea, in reality though we are measuring changes but just at tiny increments. Finding better resources can help remove unnecessary confusion like that. This is a sort of declarative definition and not procedural.

In declarative, you are given what the output should be, in procedural you are given the steps to see how an output is achieved. For me at least, it is helpful to have things that are explained in a more procedural way. Oh, the rate of change is actually a calculation of very, small increments. At the end of the day, something has to actually calculate a value, well, how does it do that? 1

System 1/2 thinking

There is an idea system 1 and system 2 thinking, which comes from the research Daniel Kahneman.

The basic idea is that there are things that you can remember or train your brain to do quickly and automatically. Remembering the capital of France or tying your shoes. Then there are things that no matter what, will take time to think through. A new calculus problem, for example. Even though it may be similar to other problems you have done, given that there is some variation you have to spend time and work it out.

We are going to use this to break down techniques and tools to help learn things.

For system 2 quizes and projects.

This is why often the problems in the book are straightforward, you remember a few steps and boom good. Then on the quiz it is a system 2 problems where you have to figure out how to unpack the problem to apply the steps.

Flash Cards/Spaced Repetition

This is great for quick things you want to remember, things where you are trying to build up that system 1 recall. There are many flash card apps and most use a system called Space Repetition that uses an algorithm to figure out the optimal time for you to review to etch it into your long-term memory.

Quiz

Flash cards are great for remembering things, they are not that great for system 2 problems where you need to work out a longer problem. There is a reason why the quiz hasn't gone away. It is still a useful tool to find your gaps in knowledge and practice system 2 works.

Projects

Each level below focuses on a small and manageable part of what you are learning. A project forces you to pull it all together and another place where you can find gaps in your knowledge.

A quiz is often highlighting an aspect that is not explicit clear. That is why exams often suck because you get a list of straightforward questions, but the exam asks you to synthesize the topic at a deeper level.

A project can act the same way.

We are trying to find gaps and synthesize techniques.

Build your tools

What I cannot create, I do not understand - Richard Feynman https://www.quora.com/What-did-Richard-Feynman-mean-when-he-said-What-I-cannot-create-I-do-not-understand

Pick one thing, make it small

This is a good challenge to better understand the tools you use and also deepen your knowledge of what they are trying to do.

There are often tools or techniques that don't have good hand holds and difficult to build mental models of them. One of those in programming, at least for me, is Regex's. They are really complicated, and I don't use them enough. If I was going to truly try and learn them, then I would do it by trying to build a Regex parser, albeit a minimal one. You can limit the scope quite a bit so it is not overwhelming and not achievable in a reasonable time frame. Through the process, you will be forced to see many of the reasons things are the way they are.

For programming, it could be writing a Regex parser, or a small DB, or if you are learning SQL, just the SQL Parser.

For cooking, maybe it is learning to make all the staple things you use mayo, stock, hot sauce.

For Photography, make a pin whole camera.

Teach

In medicine there is a teaching method of “See one, do one, teach one”.

Often we learn things, but we haven't really grokked it or understood the edges. Trying to teach something will immediately expose the gaps in your knowledge.

You will probably find that there are parts you just can't describe, and things will fall apart when you get a few questions.

Write

Same thing with writing. If you don't want to teach or want to practice beforehand, try writing out the thing. This will force you in the same way as teaching to fill in the gaps that your brain has just jumped over.

Lessons

It may not always be possible, but if you can get lessons, go for it. There are many resources now in various areas where you can find a tutor.

I haven't tried this yet but heard a tip about hiring grad students. They need cash, you need a good teacher, could be a good match.

References

1

https://betterexplained.com/calculus/lesson-2/

The Three C's

The three C's we will be talking about are: challenges, constraints, and contrasts.

These will provide a framework on how to improve.

The general idea for all of this is what is called deliberate practice, where you find gaps in your skills and try to create practices to work on those gaps.

Our goal is to

  • push ourselves to find gaps, in knowledge, skills, etc.
  • start to build mental models of the space
  • explore the domain, see what is possible
  • identify and question our assumptions

So how to we do that? By putting ourselves in situations that gives us new challenges, constraints us in new ways, or provides contrasts between things we normally take for granted. I think the brain learns a lot through contrasts.

A lot of advice on advancing in your career talks about switching jobs often. Why, because a new job often will provide all of those things, hopefully.

If you are at a big company and jump to a startup, everything from expectations to organizational and process will all be there, or maybe non-existent. Or even vice versa.

Desperation is the mother of invention

If you want to get better, or discover something new, constraints and challenges force you into a "desperate" state without hopefully the life fearing stress.

We don't tend to learn from abundance or success.

We need scarcity and failure to force use in new directions and to reflect.

Many stories of how people got great at something start with they didn't have a choice.

Intial D is a Japanese Anime, where a Japanese teeneger becomes an amazing driver because he is forced to deliver tofu.

He can't spill the tofu and he wants to get back to sleep as fast as possible, so with those constraints, he learns how to drive as fast and as smooth as possible.

Slow is smooth, smooth is fast.

A friend of mine is an amazing cook, when I asked her how, that when she was younger she was broke and had to feed herself, so she learned how to make simple ingredients taste good.

Failing

Discovery comes not when something goes right, but when something is awry, a novelty that runs counter to what was expected - Thomas Kuhn

Failing is not something to try and avoid, we are actively trying to fail. You need to keep strecthing and failing, if you are not failing in some ways then you are not challenging yourself.

For whatever reason we tend to not learn from success but failure, failure causes us to reflect and see that there is a gap. If you are hitting a wall then you need to look for a way around it.

It is easy to dismiss things and right them off but this is where the most growth can come from, identifying those nagging suspicions in the back of your head.

I have done this so much were I saw something, usually debugging a problem, and discounted it as a fluke, when I finally solved it, it wasn't a fluke but something much larger.

Some of the greatest discovires happened because people had something random happen and instead of just moving on they got curious. We wouldn't have pencillin if Dr Alexander Fleming had just moved on and cleaned his petri dishes.

This is how you build a model of things, you try it and fail and it forces you to rethink you model.

The goal with failing though is it has provide some information back. If you are just failing and not learning then there is no point.

Good failures are those that bring us valuable new information that simply could not have been gained any other way - Right Kind of Wrong Amy Edmondson

Useful accidents

Many types we make a mistake, screw up but that turns out to be useful. Often when we are too intentional and our focus is too small we miss out on things.

I have heard many stories of muscians practicing a bunch then slip up and love the sound of that, later turning that into something new.

We talked about the discovery of pencillin and how that was a usefull accident. We put in reps and do challenges to force the volume of mistakes in hopes to have usefull accidents.

Ground rules

For the following things you have to set the goal or guide lines ahead of time. Otherwise you don't learn anything because there is now review cycle.

We will talk about this more in the design section but there is a reason many programmers don't progress past a certain point. As thier projects get larger, they never evalute the success after a fixed time.

A large project could take months to release and maybe longer to trully evaluate how successful it was. Most of the time they have moved on to other projects and never look back.

Don't do this. You are missing half of the value of the challenge. This feedback loop is so crucial to learning. This is why certain expert classes suck. Because the time line is too long for anyone to remeber or care what they said 5 or 10 years ago. An economist can say anything as it doesn't matter because no one is going to fact check them 10 years later, let alone themselves.

For the challenge you want to

  • Set your goal as clearly and concretly as possible, also a end condition success or failure.
  • Run a pre-mortem. This is a future post-mortem. What do you expect to happen? This is so amazing to see what you thought would happen and then look back.
  • When you compelete run a post mortem. What went well, what succeeded what failed and why, and what was the gap between your pre mortem exptations?

Challenges

Challenges are the main tool to stretch yourself. The goal is to fail. The goal is to find gaps where you lacked something to achieve a goal.

A good challenge should force you to

  • learn something new
  • see the connection between things
  • become more efficient

We are trying to push past our current state and to force us into new situations.

Constraints

Constraints are your best friend. Constraints are often see as a negative but I think they are a real positive to force efficencies and to make things better because it narrows the number of choices and forces you to think about the outcome and not the tools.

Slight tangent and rant. I don't think George Lucas is a very good director. The orginal Star Wars didn't have a big budget and George Lucas was forced with a lot of constraints. Which I think was a gift, had he had the money to do all the stupid things that he wanted to do the movie would have sucked. I can easily prove this by all the pointless updates to the orginal trilogy that add nothing and only make things worse. We don't need a scene with Han and Jaba.

Many bands fall into this trip after they make it. It is not always the sole reason but when you have ample studio time and all the things you want then you don't have any constraints. There are too many options and nothing pushing you in direction, so often the result is a bloated mess.

Constraints are also a way to get over functional fixedness. If you are limited in what you can use then you can start to see the things you do have access to in new ways.

It is in constraints that we muss find other ways to do something and then we learn the problem at a deeper level.

Subsituting something in a dish because of a constraint requires you to understand how that indgredient functions.

Constraints:

  • Reduce the delimia of choice
  • Forces us to focus on the goal or output and not the tool
  • By not relying on certain things we must be creative and also see the problem in a new ofter deeper way
  • Come up with the most elegeant solution or approach.
  • identify and test assumptions

It can also allow us to practice key areas.

Daniel Coyle in "The Little Book of Talent", mentions how FC Barcelona, one of the best soccer teams in the world, play a game in a small room where they play keep a way and whoever can for the longest wins. By creating a constraint of a small space, the team can focus on a subset of skills.

I have been learning photography and there are so many options with everything but also lenses. What lense should you loose. So I have started out with a fixed lens. There is an oft heard quote, and that is to zoom with your feet. It is not bad but having a fixed lens is a good way to learn why people do use multiple lens. As you zoom with your feet sometimes the thing you really liked disappears. You see a cool curve but to get it and the other things you like as you walk closer that curve disappears.

This constraint shows us contrasts between options.

Contrasts

We notice contrasts, or, put another way, contrast enables us to see. - Molly Bang

We want to see constrasts. That is where our brains learn. Constrasts bring the hidden features into focus. A mask in order to see something that was hidden or hard to see before, or to focus on something.

There is a technique called Background Subtraction that is used in photos. Want a picture of a cool place but tons a people there? Take a ton of photos and then find the things that don't change.

Constrasts highlight the things that are difficult to see but always there.

You see x, then take an action and see y.

This why it large projects are hard to learn from, or if you don't keep track from the start.

By the time you end you are not comparing and seeing the contrasts.

We see the shape of things in the constrasts. When things are too similar we see no difference, and learning nothing.

It is the contrast that makes is possible to see the things that where always there but not obvious.

Are brains igrnore the common.

In photography light is obviosuly important but what does that mean specifically? For light it could be taking pictures of the same things multiple times per day. How does the weather, the time of day, the season affect the same photo?

We want to find exercises to incorparate that produce or highlight contrasts.

If you are trying to get better at programming and want to learn new programming languages, you should pick languages wildly different then the one you normally use.

Challenge Ideas

These are just a bunch of ideas for challenges that I have used.

Give yourself a time constraint

I think this is one of the best challenges. It is exposes so many weaknesses. This used a ton in competitions or what I have heard as the "gun to the head" heuristic. 1

There is a good reason for the time constraints. Masters are more efficient in not just how they do things but what they do.

The difference between a high productive person and a less is speed but that is a secondary outcome of efficiency. It is that the non performer often wastes time on stupid or useless step or lacks better ways of doing the same thing in a efficient manner.

Then how do you get better at speed, well force yourself to have less and find out the things that are not important and find new more efficenent ways to do things.

If you have problems with time management then this is also a good challenge.

Ideas:

  • Top Chef style quick fire: 30 minutes to do something that often takes hours
  • Plan/Execute split: You are allowed virtually endless planning but you must execute in a very short time frame. Code the hangman game you can plan for hours but you only have 15m to type in the code and run it.

Build the tool you use

Pick a tool you use that you want to better understand and try to build even a simplified version of it from scratch.

Try to pick a key aspect of it to buid, it doesn't have to be the whole thing. Think back to the early days of the craft. Probably there was a person just figuring things out. How was paint made before commerical paints. If you learned to make your own paint what could that teach you the medium?

Ideas:

  • Photography: Pinhole camera
  • Cooking: Build heat source or ingredients that you normally just purchase like mayo, sauces.

Reduce a tool or technique

Audit the things you normally use and challenge yourself to not use one. This isn't forever, but it is to force you to understand what the tool does or doesn't bring. Maybe it is not needed, or maybe it is blocking you from doing something in a better way. This is a staple of competition shows.

Ideas:

  • Photography: Using only one setting on your camera.
  • Coding: Use only a subsection of your programming language.
  • Coding: Code without a computer, write it on paper and then just type it in, does it work?
  • Cooking: Can't use an ingredient or a tool

Chaos monkey

At Netflix, they have a tool called Chaos monkey that turns random things off. While in software, we try to test everything as best as possible, but it is difficult to imagine all the things that could go wrong. So Netflix's chaos monkey introduces some randomness into the system to see how the rest of the system behaves and hopefully recovers and continues to function given the chaos.

Use the same idea to force randomness in your tools and process.

Extreme Performance

Pick one aspect and set an extreme goal. When I was starting out programming, one of the things that lead me down this road of craft and deliberate practice was just being tired of sucking. Well, more the stress of crashing the computers of fortune 100 and 500 companies that ran my software. My code crashed a lot and in some cases caused blue screens on the companies of banks and other large enterprises.

So for an oncoming project where I had the opportunity to start from scratch. It was a brand-new project, and so I set the goal that it wouldn't crash once in production. From where I was this was an extreme goal.

To do that, I had to think and research not just why programs crash but techniques and even different ways of writing code to facilitate it. I looked at how people that have the most on the line write code.

I looked at NASA's style guide. https://ntrs.nasa.gov/citations/19950022400

I learned about a technique called defensive programming. I removed all things that I could think of that caused memory issues.

If things got bad, it would fail instead of crashing. Now maybe that sounds like moving the goal posts, and perhaps it is in some ways, but when a program, in this case, running on a customers machine, crashes. It is harder to debug. Failing predictably is much better than crashing in chaos.

What is one aspect you would like to improve at? What goals or metrics can you set to create a challenge to find ways to reach it?

What would be an extreme goal from where you are now?

Mystery Box Challenge

On the flip side, we can also get stuck being comfortable with the things we already know how to use. In this challenge, you have to use something you wouldn't normally use.

  • Cooking: Where every step of the way you get a new ingredient or a new tool
  • Painting: You have to use a new color, brush, stroke style
  • Coding: You have to use a new language or new technique.

Style challenges

Take up a challenge to try what you do in a different style. The first part of this exercise is to start to document the different in your styles in your craft.

Once you have a few, pick one up and try to emulate it as best as possible, basically in good faith, even if you do hate it, which might happen.

Our goal is to find things to steal and to learn the intention behind the style.

Teaching

Writing is a good way to find gaps and to solidify knowledge, but there is nothing like trying to teach something. You make think you know something but when you go to explain it to some else if falls apart.

The goal with all of this is to force you to solidify and find gaps in your knowledge.

You can still easily skip over things in your head when writing, but when teaching it, the student will probably poke holes in your knowledge quickly.

Teaching is hard if you are good. You have to understand the material at a different level then just working with it.

You need to find ways to conceptualize it for others, that may mean finding common threads, ordering lessons.

Teaching is a good shortcut to better mastering a topic.

Richard Fenyman, a Nobel laureate, was a master and making the complex simple.

Feynman’s learning technique comprises four key steps: 2

  • Select a concept and map your knowledge
  • Teach it to a 12-year-old
  • Review and Refine
  • Test and Archive

Five ways

Often when we create something, we latch on to the first idea or solution. I have found that rarely is the first idea that great.

The goal of these challenges is to force you to come up with alternatives, it doesn't have to be five, but five is a good number to make you really stretch. Usually, you can think of a few alternatives, but you often need to work for 4 and 5.

Volume challenges

You can use this to make a skill or technique second nature or try to build a habit. This is also good when starting out with a new skill. It also can push you creatively as you might need to push to figure out how to make it work every day.

  • Do x for y days

Make it specific so you don't cheat but also low enough that it is doable.

  • Photography: take 5 pictures of 5 different subjects per day.
  • Coding: Write a small project every day, or work on a project every day.
  • Language Learning: Write 3 sentences every day.

Photography Challenges

Since I am learning photography, here are some of the challenges I put together to get better.

  • 10 pictures from challenge (James Popsys) : Try to get 10 decent shots from one location
  • 5 ways challenge: Try to take a picture of one subject 5 different ways 3
  • Black and White Challenge: Shoot only black and white
  • Fixed lens challenge: Only use one prime lens (no zoom)
  • Create a pinhole camera
  • Film camera challenge: Try to use a film camera
  • Cheap camera challenge: Get cheap or disposable camera and use it
  • Create mood boards: Create several mood boards of photos I like, study what I live about the photos
  • 1 subject challenge or one color challenge: Try to find one aspect or color and photograph it. Fire hydrants or anything orange.
  • Pick and emulate one new style
  • Document a place
  • 30 days of daily pictures

References

1

https://grantslatton.com/software-pathfinding#algorithms-we-develop-software-by

2

https://fs.blog/feynman-technique/

3

https://www.youtube.com/watch?v=GZ8nnbdmihA

Improving

"Creativity is the breaking of habits through originality" - Arthur Koestly (The Act of Creation)

Creativity is a skill and a habit. For any situation, we are looking to bend, break, combine or connect. We need to practice this skill. This is obviously a non-exhaustive list of areas to help improve your creativity. Will roughly break these up into two sections, input and output.

Input

You need input. As much as you can get, for everywhere. The further left of field the better.

While you are probably going to be learning things from your field, those new connections and new ideas often come from seeing your current field in new ways, so go wide.

Find new ideas wherever they live. There are wonderful people doing wonderful things in so many areas and they for sure thought of things that might be useful.

I was rewatching Top Chef for the millionth time, and they did this episode inspired by Frank Lloyd Wright.

Frank Lloyd Wright used this idea of creating tension in his buildings by using this idea of compression and expansion.

Parts of the building would be smaller in general size and ceiling height but that would lead to room that was wide with expansive with high ceilings. That contrast gives you a feeling that the bigger space is even bigger.

This is the epitome of good design, it pulled in human psychological response into the design, fucking brilliant.

The idea of creating tension with compression and then expansion can be used all over the place.

Read a random book on some area of history you may like. How does it relate to what you are working on, are there broader themes?

Oh, the Romans had this interesting blah blah, why did they do that?

You have to breathe in before you can exhale. Sean Tucker in the book, Meaning in the Making, talks about how when he was learning how to sing, before he could sing well, he had to learn how to breathe in first.

He uses this as a metaphor for finding inspiration or our curiosity before we exhale.

Creativity and Solitude

Without great solitude, no serious work is possible. - Pablo Picasso

You need to find space to breathe in. Group think is real and can block you from seeing a new idea or kill a good one too early. This is tied in with getting bored. It is good to get bored and lower our stimulus. It is easy to be on our phones consuming a bunch of nonsense so much we never can hear our own thoughts.

This can be extended amounts of time or small blocks of time either way creating boundaries of space and time to be creative.

Cabin challenge

Doesn't have to be a cabin, could be a hotel room or some space and try to stay in that space without your usual stimulus for a few days.

Daily Space

Try to set a time period where you again put aside normal stimulus and block some time and space to be alone.

Travel

Travel is my second favorite drug of choice. If you can, I highly recommend it. It doesn't even have to be somewhere crazy and exotic. But I have run the experiment so many times, and every time I can change my surroundings, especially somewhere new, it has a big impact on me. I think our thinking patterns can be worn in and tied with our routine and our places. Getting out of that shakes up the entire system.

Reading

Citation needed, but it seems like really creative people have a serious reading habit. It allows you to take in ideas from other places. Many problems have been solved, often though in unrelated fields. This is a great way to find ideas to steal.

I read this book "The Checklist Manifesto" by Atul Gawande, which talked about how checklists moved from aviation to medicine. How could that be applied to software. There are often similar problems in software where things become routine and easily fucked up. Which with certain work could mean taking down a high traffic website or a rocket crashing.

So in our reading it is good to read widely.

I heard this tip from comedian Bill Burr. When he feels like he needs a bit of a boost of creativity, he buys a bunch of random magazines, that he has no normal interest in, at the airport and then reads them.

In an interview with musician Chappell Roan, the interviewer asked where she got the line "Super Graphic Ultra-Modern Girl" and what it meant. She said she had no idea what it meant but lifted it from an architecture magazine she found.

Hopefully, you find an answer to a problem you have that just hasn't been transferred to your field yet.

Observe

“You see, but you do not observe” is a quote by Sherlock Holmes in A Scandal in Bohemia (1891, written by Sir Arthur Conan Doyle).

Sherlock Holmes is the greatest detective because he observes things that most people don't or just ignore. By observing these simple things, he can use them to put together a history of events. A scuff on a show tells a story that most people miss.

This can also include observing what is missing. The dog not barking.

If you don't observe the world, then you don't know what is missing.

There is where an open questioning mindset comes into play.

Everyday people do the same things over and over again, and look past the "common" but interesting things.

Become an observer of the world.

Observation challenge

Try to insanity 5 things you haven't noticed wherever you are. Maybe it is objects, but perhaps it could be things from your other senses. It is oddly quiet or smells like muffins. (it is rarely muffins)

Can find things that are missing? You probably have this happen organically time from time, like when you need a garbage can or a bathroom.

I would like more challenges, but I would just be stealing most from this great book: How to be an Explorer of the World by Keri Smith.

What sucks challenge?

What is annoying, irritating, or squeaky wheels?

Throughout a day, write down a bunch of things that were annoying.

Walk

In many books on creativity, especially books profiling creative people, walking is a common trait expressed. There seems to be something in moving and I think seeing new things that help spark creativity.

There is some research on this that I am too lazy currently to lookup, but walking seems really helpful creatively. Probably a combination of exercise and getting new visual stimulus. Try to switch up your path or incorporate nature.

Challenge

  • Walk in a new neighborhood/park
  • Do an observation challenge as you go. Try to find things you ignored, things that are missing, things that are all the same color, or count the number of x things you find.
  • A walking meditation challenge. Find a quiet place where you can walk unobstructed and walk slowly focusing completely on the movement of placing your feet and walking.

Become a collector

Become a collector of the things you love. Ideas, concepts, philosophies. These can serve as inspiration for later projects or ideas.

Like many of the suggestions, these are traits that many renowned artists seemed to have.

Andy Warhol was a serious collector of random things

Every month, he would open a new plain brown cardboard box, filling it with different scraps of ephemera that he encountered every day over the next four weeks. This included everything: takeout menus, letters from other artists, labels, and anything else that crossed his path. At the end of the month, it was taped up, labelled, and put into storage. 1

Challenges

  • Create a mood board of things you love that you find inspiring.
  • Start a common place book of quotes and ideas that you love
  • Keep tickets, cards or other things from trips and places and stick into a notebook, box, mason jar.

Output

We have breathed in, andd now it is time to practice the exhale.

Divergent Thinking

The key to being able to be creative is to be able to escape those well-worn mental procedures to go a different way or "generate more divergent ideas". 2

There is this research paper that talks about this aspect of creativity and how it could easily be measured. They propose a short test where your goal is to list a bunch of words and the test rates how unrelated they are. The more unrelated they are, the better. If I say car and steering wheel, that is not that creative. But if I say car and tuberculosis, they are further apart and may not have an obvious connection.

Challenges

Take the divergent test

Get a baseline for where you currently are. After sometime practicing, repeat.

Unrelated Words Test

5 minute brainstorm

Pick a topic or subject and set a timer for 5 minutes and write down as many thoughts, words, or ideas about the topic or subject.

After you will exhaust the initial ideas, try to push through and keep generating ideas even if they start to drift from the source. As they drift, try to find ways to link it back.

If you get stuck, use what you see around you to help with some input.

You see a wall. What is a wall? It is a barrier, possibly shelter, something in the way. How does that relate to your topic?

The goal of this is to strength those divergent skills. Filter nothing.

There are many versions floating around, so feel free to play with it, extend, whatever, but the goal is to get stuck and find ways to keep going.

Use challenge

How many ways can you use x? A brick can be used to build a house, a fire pit, it could be a door stop or an insane paper weight, a murder weapon, etc. It could be broken apart into smaller things.

"100 bad ideas."

This comes from a Reddit post. I am not sure the origin, but the idea is to create 100 bad x's of something. It could be product ideas, drawings, songs, photos. This is a quantity exercise designed to push past the usual and also just to play with things. Put the outcome aside. The goal it is for it to be bad.

https://www.reddit.com/r/TrueAskReddit/comments/adjqmj/what_are_some_proven_ways_to_increase_creativity/

Story Cubes

Another fun one is to use story cubes, writing dice or something similar. There are a bunch of these as products and probably websites. But basically, you roll the dice and each face has a symbol, and you use them to create a story.

Play

Actor and comedian John Cleese thinks of creativity as a way of operating. 3

He describes an open mode vs closed mode. In open mode you are exploring, playing and seeking other paths. This is the mode where you are looking for new. In closed mode, this is the application mode where you are just applying already known things.

You have to play and explore because often times there is no known linear path to a new result.

To be in open mode means allowing ourselves to be curious and be able to follow that curiosity. To have non-objective play, where we discover things, try things out and, hopefully, in Bob Ross terms, have happy accidents.

Side projects

Side projects can be a blessing and a curse, but let's focus on the blessings for the moment. They are a great way to explore some new things in a low stakes way. I have picked up a skill or some technique just by playing with and then later it was useful in my main work.

I think it is also really helpful for creativity, as you can see your main work through a new lens. How do they relate? How could this side quest help with my main quest?

Note-Taking

A notebook works like a map: It creates clarity - Daniel Coyle

Notes aren’t a record of my thinking process. They are my thinking process. – Richard Feynman

Buy a notebook or several.

I keep a notebook and pen on me at all times. In fact, my notebook is my wallet as well.

I think we tend to think of notebooks as just there to keep a record of something. Sometimes that is true, maybe you record your workout out or just take note of something, but it is a thinking tool, or can be.

As you write, you can see patterns in what you wrote or by just starting a page it forces you to think about the next step or what is missing.

You see patterns in thought, what are you interested in, what topics or themes keep coming up.

It is a good way to start to collect your thoughts on a topic. As you are out on your many walks, you think of an idea for your project and throw it in your notebook.

With think of a notebook as a place to record things, and it is, but it is also a thinking tool. Working on a problem, you put on a page and that space is now a workspace for thinking.

The reason I recommend a physical notebook, as there seems to be something more memorable to the human brain about the physical act of writing.

References

3

https://www.youtube.com/watch?v=Pb5oIIPO62g

1

https://www.acollectedman.com/blogs/journal/andy-warhol-collector

2

https://www.pnas.org/doi/10.1073/pnas.2022340118

Design

What is design?

There are many areas of traditional design work, I think we mostly associate with graphic arts, web or industrial design. I want to reclaim design and say that anyone can be a designer.

We talked about this idea of domain capture. That your goal in creating or solving problems is that more of the domain, meaning the possible options, is captured.

With design, we are trying to take in many aspects of the domain in at once and produce something.

Graphic design has to think about how it will affect the viewer, how it communicates a message, how it all works together.

An industrial designer probably needs to think about how materials go together, how could to be manufactured and so on.

In style, we discussed micro decisions made to reach your goal, well, I think that design is the macro level of style.

Often in our craft we are working at a certain level. You have created your own style, and you are creating. As you work on bigger projects, the domain and scale also grows.

You go from cooking, to trying to open a restaurant. Writing software to building an engineering team. From art to an exhibition.

To achieve this there is more of the domain that needs to be captured. We are working at a higher level, that is design.

All those micro decisions now become macro decisions. Our goal is to understand how things contribute to a goal.

If you go to an Apple Store and buy something. The entire experience from start to finish has been thought of and designed. Even the packaging and how you unwrap a product has had extreme care put into it.

Because they see that as part of the domain of building a great product. Not even the box the item comes in is separate from that experience.

Design is problem-solving with domain capture.

Where you work to understand what the real problem is, what the real tradeoffs are and you make something. This is a huge topic that could be a book on its own, but wants to highlight things I think are a good starting point to get into design and design thinking.

It is easy to spot bad design because it is everywhere

Even something as simple as a door can fail in design or capturing an important part of the domain, a human.

How many doors have you had trouble with because they were confusing? Do I push/pull? Is it sliding? The person that "designed" that failed at their job. Maybe they made sure the door would function in someway, but they failed in making it usable.

Don Norman in The Design of Everyday Things says

Two of the most important characteristics of good design are discoverability and understanding.

And goes on to say that it should be clear "what actions are possible and where and how to perform them"

A door that had a handle on the push side presents seemingly two possible actions even though only one is possible.

If you are designing things for humans, then part of your domain is human psychology.

So why does this happen?

Built not designed

This happens because most things are built, not designed. This goes back to our intermediate stage. Most solutions come out of just trying to get the job done using known tools.

People hobble together things to just get something to work. They lack the skill, time or money to create a good solution.

This is the Rube Goldberg method of building things.

To stay with the door theme, there is a set of doors in a very new modern shopping center near me that are the absolute worst.

There are two sets of doors and the problems are double.

They are automated doors that have an aggressive and shitty mechanism, so you just try and push on them the door fights you until it realizes you are not going to give up and then the "automatic" part kicks, and the door opens, painfully slowly.

Instead of just overhead motion detectors, they have added infrared sensors for some reason, but they really suck.

They are nowhere near the doors. So you have to walk out of your way to hit the sensors. Since they are not push and infrared, no touch, post covid style, they require you to wave your hand past them.

But the sensor is the size of a stamp, and you have to do it very slowly; otherwise it doesn't work. I hate these doors. They completely break your stride and there are two sets, so you have to either deal with the push, freezing or do the double hand wave things against to overly sensitive sensors that barely work. Either way, you are spending time just trying to get the fuck out of the building.

This is a good example of built not design. It is difficult to imagine that anyone person looked at the whole system at one time. This was probably a bunch of independent people making poor decisions.

I found cheap doors here, oh well, we have to by law have automatic doors, ok slap these sensors on, but the overall layout had already been designed, so there is no good spot to place the sensors, oh well just install on the wall 10 feet away from the doors.

This is why design by committee usually fails. Hallmarks of built not designed

  • No overarching design that captures all the aspects of the problem. (Multiple people looking at only a small portion of the problem)
  • Trying to Rube Goldberg a solution together with a bunch of things
  • Lack of skill to capture the true domain of the problem

With processes, this can drift into the Kafkaesque.

You need a bank account to rent an apartment, but you need an address to get a bank account.

Enough with bad design, how do we design good?

Capturing the right problem

Sometimes the problem is to discover what the problem is - Gordon Glegg

Another way of saying this is that most products/services/regulations etc. fail to capture or understand the appropriate problem.

MP3 Player

Let's use the original iPod as a case study. There were plenty of MP3 players on the market before the iPod. There were even ones with hard drives that stored a ton of songs.

Here is how they seemed to have been built by most companies. Get yourself a sound card, a hard drive, some off the shelf display, and boom you got yourself an MP3 player. Built not designed, more like cobbled together.

Ok, , but people need to interact with it in a multitude of ways. Power it on/off, navigate the now 10000 songs they have on the device, all the various play controls, also you have all the device settings. What do you do?

If you are boring, you do what is easy. Easy is what is low effort, you grab what is at hand and what is known. Well, the "designers" knew buttons, and they are easy, so let's just add more buttons. This constantly happens. Just add more buttons. This is a common thing, looking at your terrible microwave.

Ugh, look at these things.

MP3

Apple

What did Apple do differently? They realized that the real problem of creating a useable MP3 player is not building the basic hardware, is how do you realistically interact with 10000 songs? How do you find the Artist/Album/Song that you want?

This is the real problem. Having a huge hard drive of songs is useless if you can't actually play the songs you want. Clicking a button a thousand times is not fun.

There wasn't anything off the shelf that could do this.

So Apple invents the scroll wheel. The whole thing has basically three interface points. A screen, a scroll wheel, and a button (ok first one had buttons around the wheel, but they corrected that quickly).

The iPod's interface required just a second to get a fundamental grasp of how to use it and once you did, you were done. Every new feature fit into an already existing cognitive framework.

Once created it paid dividends for multiple generations of the device. The technology, thought, and work behind this was incredible and difficult, but it created a simple (not to be confused with easy) solution. The scroll wheel on the iPod was looking at the larger UX/UI problem and created a simple solution to it.

I can't stress the importance of this step. You will hear people just automatically jump to a solution or a tool. We need an SDK or an app. Why? Maybe it is true, but what are you trying to do? What major problem are you trying to solve?

Simplify

After you have figured out the right problem to solve, the next barrier is to find a simple not easy solution to the problem.

Simple isn't easy.

Simplicity is the ultimate sophistication - someone

Anybody can make the simple complicated. Creativity is making the complicated simple - Charles Mingus

Problem ComplexitySolution
SimpleSimple
ComplexSimple

Our goal is to solve problems.

I am cribbing a bunch from Rich Hickey's "Simple Made Easy" talk, but to define our terms better, an easy solution is one where it is easy for you to implement. You use what is at hand, what is easy for you to use.

The Rube Goldberg machine is the easy one.

You grab whatever is at hand and just start, linking things until you have something that kind of of works.

The easy solution has no coherent thread. It is hard to maintain, to extend and difficult to explain to someone else. Because it is made up of a ton of small parts, there is no overarching pattern to the system.

It is a mess of separate solutions being used to solve a bigger one.

The Rube Goldberg machine doesn't have a mental model. So there are no high-level concepts to grasp. Without these, every part is memorization and any changes require digging into specifics.

Easy solutions are about the effort it takes to make them.

Simple solutions are about capturing the problem in the right way so you can provide a simple answer. Instead of 20 buttons, one wheel. Simple solutions compress the problem space.

Simple solutions tend to capture more of their domain and do it with less.

If you can't make it simple you haven't understood the problem.

When a solution that matches the problem and does that using the most efficient way as possible, we call that elegant.

Design Process

The Co-Evolution Model

There is a design model called the Co-Evolution that is described in the book "The Design of Design" by Fred Brooks.

The basic idea is that design is a process that repeats itself. You design something and in doing so, you learn about the problem and the solution, which can improve your design, rinse and repeat. That is why prototyping is so helpful.

The prototype can serve as act in two parts. One to figure out the solution, but also to better understand the problem, which can then lead to better solutions.

I think SpaceX's raptor engines illustrate this idea well.

Raptor Engines

I don't know anything about rocket engines, but to me, this seems like a perfect example. In the beginning, there are cables, tubes, all sorts of things running around. With time, the problem is better understood, and things that seemed to be separate could be unified into one thing.

I am not sure, but it appears that the later ones are easier to understand and reason about. The early ones have so many parts that it is it seems harder to keep the whole thing in your mind.

Which is another reason to try and make simple solutions because people have to work on these things and if you can't build a mental model of a thing then you can't really work well with it.

At each step in the design process we are trying to reduce, simplify and combine.

Design Principles/Goals

It helps to have a design philosophy. When designing things, there are many decisions to make, micro and macro. Having an overarching design philosophy helps to fall back on when things aren't clear, or you are starting out.

Guiding principles that help you make decisions. This is where there are design philosophies like Bauhaus.

Apple has style for sure, but also a design philosophy on minimalism, sometimes annoyingly like removing ports. Regardless, across every product you can see a design principle present.

In software, a common design principle is orthogonality or often talked about a separation of concerns. Or as Frederick P. Brooks explains it, "Do not link what is independent".

In software, one of the beasts you are fighting is complexity and so it is a good design goal to try to keep things as separate as possible. If everything is connected, it is hard to reason about and when something fails, then the whole thing fails.

What are your design goals?

As you start designing, you should be reevaluating your goals.

  • What do you need to achieve for this to be a success?
  • What are the secondary goals that you hope to achieve?
  • What parts of the domain are you trying to capture?
  • Are you solving the right problem, at the right level?

For a software project, it maybe this needs to do X and scale to N requests per second.

A secondary goal might be that it has to cost < then Y.

Then domain capture would be around how are you going to maintain it, how do you deploy, test, and debug when it is live?

Again, we are going for mastery, it is not enough to just stand up a solution.

For things that interact with people, many of your design goals may be around ease of use. Even in programming, a design goal maybe making a system that is easy for some new to pickup.

We build things for others, and they are a part of the domain we are trying to capture.

Design Strategies

Solving problems by finding alternatives

Often times, people get locked into a path and think they need to solve things in a certain way. The problem is not wrong, but there are often simpler alternatives.

Like many transportation options around the world, things have digitized but often still requires some stupid app.

The London underground just uses RFID and not an app. So I could just use Apple Pay and get on the "tube". No app, no figuring things out. It is wonderful.

This requires a mindset shift - One to focus on the problem our outcome and to not settle for the first solution.

If you feel like your design still calls for a lot, look to see if there is an alternate way of doing something but getting the same result.

Making small bets

When haven't fulled figured out the problem, make small bets while iterating.

Try to avoid one way door decisions or things that are difficult to unwind, or another walk away from.

Rule of three

A slight version of this is the rule of three. If you are trying to design something, wait until you see three different examples before making big design decisions.

This could be three types of users, or if you are working with different devices, there different types of devices. The goal is to try and see the possible variations before designing.

Avoiding pre-optimization

Another thing that often happens, especially in software, is pre anticipating requirements. Oh, in the future I am sure a customer will need this, or the product team will ask for this. Or this needs to scale to x. Make sure those assumptions are correct because in my experience they are rarely and they have real consequences.

The reason we use the rule of three and make small bets is because it is very difficult to predict the future will actually turn out to need.

There are several products that ship with features that are never used. The original Nintendo NES console had an expansion port on the bottom that was never used. Maybe they used it internally, who knows, but if not, then hours were spent designing and building this thing. Money was spent on each console made for something that served no function.

Take away something.

Constraints not only shrink the search space, they challenge, the designer, often thereby stimulating a completely fresh creation - Frederick P. Brooks, JR.

This is something I try to do all the time, it is a challenge to try and design a solution by taking away your go-to tools.

This is a good exercise to prevent just adding buttons like on the cheap MP3 players. Take away something or limit yourself to a few things and see where that forces you to go. Can you combine things? Is there a better solution or a larger problem to be found? Oh, my problem is a UI problem, if I had a better UI like a scroll wheel, then this eliminates the need for all these other things.

I think this is a good challenge to push yourself in the design process.

Putting it all together now

This may seem like a lot, and quite frankly it is. Here is the good news, you can't do it all at once. So you don't even have to try. Pick parts to work on, sprint and take breaks.

This is about building patterns in your brain. Your brain learns what is important with reinforcement, and part of that reinforcement is taking breaks and coming back to things.

This shows your brain that it is important.

I can't stress enough how small things every day add up. When you get a bit tired of something, still doing something small every day to sustain you through your uninspired times still helps.

Even five minutes a day builds up over a month and a year. Say language learning. 3 new flashcards a day is a thousand words at the end of the year and is doable in 5–10 minutes.

Your motivation is going to come and go. That is natural, but finding ways to stick with it and change things up will keep you going.

Amateurs sit and wait for inspiration, the rest of us just get up and go to work. - Stephen King

Let's go through a high-level plan with something like photography. This is something I have become obsessed with for a bit now, and I have decided that I want to master it.

What does that look like?

Photography Plan

Goal

Start with my goal.

This will change as I go, but my high-level goal is to be able to capture the things I find interesting in the world. To use photography as a forcing function to really observe, not just see the world.

That is really broad, but it is a starting point.

Then mastery currently is figuring out how to capture those things and have them match up to my taste of what is good. Taste develops, but often it starts from something you already have. I know what I like in other photographs, but like Ira Glass talked about, I am in the gap between my skill and taste. Then I would like that to coalesce into a personal style. There is a set of well-earned micro-decisions that show in my photography.

I want to be consistent and not just wait for being in a wonderful place to be able to create a great photo.

So I have a rough goal and starting point.

What next?

Taste

On taste and the gap, I need to make what I like more concrete. For me, this is finding photographers and photos that I really like. Reading books, looking at many different photos. Building mood boards on what I like. This is not just an exercise to find out what I like and try to find those threads, but also a way of judging my own photos. Set a bar to compare against.

Style

You do not find your style, it finds you - Teo Crawford

In that exploration of what I like, try to build a map of all the styles. This could also be on what is missing.

What does the lay of land look like, street, landscape, portrait, abstract, etc?

Try to copy and emulate other photos, not to reproduce the work but to try and understand what they are attempting to achieve.

Learn to articulate what I do and do not like about a photo.

I need to find the goal of my photography, what I am I attempting to capture, then use that to help make those decisions. And finding some sort of consistency with it and to be able to work with intention.

What does style mean or what would mine be, I have no idea yet, but I can start to see things come into focus (see what I did there). It is consistent micro-decisions, so those could be subject, color, editing choices, composition, etc. So starting it about first enumerating the aspects of the domain I can control. Playing with them to find what I keep choosing.

I think that is what is meant in the quote above about it finding you. Through constant exposure, you see the things that you keep coming back to or keep showing up.

To do that, I can use the tools below to get me there.

Find a philosophy.

Find something that gives you a frame of reference or an abstraction. I think I am going to start with Wabi-Sabi. Wabi-Sabi is a Japanese philosophy that finds beauty in the imperfection and changing aspect of life. We often seek perfection and shy away from the changing aging of life. Wabi-Sabi embraces and celebrates this.

I found a number of photography YouTubers discussing Wabi-Sabi and photography, so I plan to play with that. The goal is not to try and take on a style or just accept it, but it provides some starting point to see contrasts on what I like and don't like.

Seek outside sources

I want to look at other arts and graphic design, and plan to get into drawing as a side gig. I think understanding perspective could help my photography.

Building my brain

Build a skill tree and find resources to learn them, and then challenges to grok 'em.

  • How to work a camera
  • Understanding exposure - Exposure triangle
  • Using manual mode
  • Lighting
  • Composition and Framing - what that all about, learn the rules to break
  • Editing
  • Color Theory

Start to learn these topics, and I that list will grow as I learn more. Then use the Three C's to drive them home.

The Three C's

Challenges

Here are just a few of the challenges I have done or lined up.

30-day challenges (Volume)

This is just about building routing and getting reps in. I want to accelerate the process for sure, but you need to put in work. Quality comes from quantity. 30-Day challenges are a good way to set aside time with a fixed goal and go for it. A friend a mine every February tries to write N number of songs. The whole month is detected just to songwriting.

Will add some type of constraint. Using one camera, one lens.

As well as try to use the challenge to see some contrasts. Shoot at different times of day, see the contrast between light changes, or season changes.

Manual Mode (Skill)

Learn to shoot in full manual mode and really grok the exposure triangle.

Black & White Challenge (Style/Contrast)

I think shooting a bunch of black and white photos will be good. I don't think it is something I would just normally do, I love the colors man, but it is a great exercise.

Black and white photos are all about the contrast, literally. That is what they capture best.

Style challenges (Style)

Try various types of photography, landscape, portrait, etc.

Build to understand

Building things to help understand things is a really useful tool. There are many ways to do this. This could be many things, like making a pin whole camera.

For me, I wasn't completely clear on the difference between hue, saturation and luminance. Wasn't really clicking for me. I am not sure if I have fully grokked it yet but to help I asked Chat-GPT to build a simple website that mimics the HSL sliders in Lightroom, so I could play with it in isolation, which was helpful.

HSL App

Lens challenges (Contrast)

Try various focal lengths, but pick one for an extended amount of time.

Creativity/Play/Exploration

For the first few years, I don't have any expectations, just to explore and play.

I bought two cheap cameras. One is a made for kids that has a built-in printer in it. Take a picture and outcomes a black and white photo. It is really fun. I got paper with sticker backing so I could make stickers with it. Super fun has tons of constraints and produces hopefully happy accidents.

Also bought a cheap film camera. I doubt I would ever go full film, but it is to play to see the contrasts.

The goal is to find ways to play and not take it seriously. To have happy accidents.

Permission to suck

This book is about how to accelerate the mastery process, and I still believe in that. That being said, you need time to suck. This is a part of building your brain. Sucking to give yourself permission to explore.

Sucking to get to the point where you get frustrated and decide to find ways to stop sucking. Maybe this is just another way to say fail, but it is ok to suck for a while.

Craft cycle

Further down the line when I want to take it more serious than the craft cycle will kick in.

Meaning, starting to set goals of projects or tasks that require more of my domain. This could be entering competitions or trying to build a book or portfolio. Maybe it is taking on paid gigs. Things that require more than just taking a photo, but more of the space of working in the broader domain of photography.

It is not so much about the outcome but finding harder challenges with external stakes. It is easy as an amateur to just post photos on the gram and call it a day, but to move up need it helps to find ways where there are external stakes so you can't fool yourself.

I need to find ways to fail. Fail to learn.

Cycle

This is a cyclic process.

You learn, and you expand, you change, you grok your domain and that lets you hit another layer. Rinse and repeat.

Like I said, it is a long road, but one I think is really rewarding.

I hope this is helpful and at the very least cleared some of the fog of war of what it means to master something.