Am I Allowed To Do This?

All creative endeavors are filled with people who have a disdain for rules and a strong conviction that their way of doings things is the best way.

Being a beginner in such an environment is harder that one might expect. There are no hard rules to follow to get results and your mentor, if you are lucky to get one, will have their own way of doing things and dealing with problems. Having neither a wrong nor a right answer makes the whole endeavor highly subjective and therefore highly criticizable.

What might be a good decision for someone will the be the worst for another one. There are no single sources of truth because the whole field is too big to learn for a single person so everyone is talking from their own personal experiences of what they managed to discover so far. "It depends" is a highly frustrating answer when you are trying to learn something new and have been banging your head against a wall for a while.

There is no way around the subjective side. Our own individual experiences in the field is what shapes it. We all end up developing our own taste for how things should be done and the results we think will be the successful ones. Fortunately, there is a way to keep things in balance by bringing in the objective side into the mix.

Any field has a few fundamentals and principles that are the bedrock of good decisions. A handful of properties that are opposite to one another or that should be promoted over one another. The more practice time you have, the more you increase your chances of getting the end result right. Don't aim for 100% accuracy, because even if you manage to freeze time until you are done or be so smart to get know everything right from the beginning, the result will still be judged subjectively.

Lucky us the software developers for having the computer to keep us in check. You can write code any way you want as long as it compiles, runs fast and uses as little memory as possible. These are the only three hard rules there are. All software does is to receive input data, process it and then do something with it. All the nuance on how to do these three things are based on the context in which we write software and the purpose for which we do it.

You will write code differently when working alone on a project, individually within a team on a component, leading the team on a new release, writing a new framework, working for a healthcare or a ToDo-app company. It is hard to navigate all the nuance that affects the decision making process while also learning the basic principles and properties. Everything is new at the beginning and not knowing which one is the subjective part and which one is the objective part makes it all even more confusing. Turning to the left will get you in trouble here and turning to the right will get you in trouble there. It might be that in a different context and for a different purpose things would play out in reverse. Not taking the time to learn what is what in order to differentiate between what is subjective and what is objective will have a downward spiral effect on morale that will have you throw up your hands and give up on the whole endeavor.

"Do we do this because it is how it should be done or because how things get done around here?" is a question that stays with you for a long time and it never really goes away. It will re-emerge any time you switch a project, a team or the company. The more you have developed your own taste the less time it will take to get accommodate.

Software, by its nature, enables everyone to work at any level of the stack from managing memory to changing the behavior of the app with a config. The only way to move forward is to develop your own taste by experimenting and see how it plays out, applying the same solution in different scenarios, taking on huge endeavors that will have unexpected problems, always pushing the limits to what makes software work or finding out what breaks it.

All the highly creative fields are so vast that you can't learn it all at first, all you have is the starting point and the end result you want to achieve. Tackling problems on your own is how you get a sense on what are the right questions to ask in order to know in which direction you should be looking for answers. And remember that even when you think you have all figured out, there plenty of people out there just like you creating new things to add to the collective all.

Having your own taste is how you determine what you are allowed to do and what not. Play it as a game of finding out what can you get away with and what will come back to bite you back.