Most of software development is about solving problems. For some time now, I have been trying to work out whether there is a formula or strategy that can be taught about how to solve a problem. In pursuit of an answer, I cleared my day and shadowed Amitai, Gizra’s CTO, for a few good hours - hoping to learn something from it - and it was fascinating!

For most of the day Amitai was busy writing code in Elm. I don’t (yet) know Elm so I understood very little of the code, but the truth is, it didn’t matter - because I learned a lot about his way of working.

I’m not sure I’ve found an answer to how to solve a problem, but I certainly recognize some characteristics that are needed to become a better developer: great work processes, the right attitude, and staying humble. And because what I love most is to teach others what I have learned, here are my observations:

Without Shortcuts

Work in an orderly manner. Take small, but correct, steps. Focus on one thing, and don’t jump from one place to another. If you must leave a loose end, record it so you can easily go back at a later time. Write organized code with clear hierarchies, using clear names for variables and functions. Do not be stingy with comments to explain what the code does.

Recording

Document every step you take in GitHub, even if you are the only one working on the project, and no one else is going to read it. The documentation forces you to constantly be aware of your steps, and if you get lost, you can always go back and check what you have already tried and what you didn’t yet get to.

Write in a way that everyone can understand. Watching Amitai doing a code review helped me appreciate how hard it is to go inside another developer’s mind. Be kind, explain clearly what you did, attach screenshots when you submit a Pull Request - it makes life so much easier for others.

Don’t Believe Yourself

Even though you know you are a good developer, you can’t trust yourself without checking your work. Check your code again and again - see with your own eyes that the code is doing what you expect it to. Do this for small pieces of code, so it will be easier to identify where the problem is if the code does not work.

Don’t Panic (Get Discouraged) When Things Do Not Work

Problems are part of the journey and you need to believe that you can solve them. While Amitai was struggling with the code, I heard him say over and over sentences like “We will be there soon” and “Believe me we will reach the end … “. This is a sharp contrast to the usual sentences many of us easily say to ourselves: “This is not going well.”, “This is too difficult for me.”, or “I’m not good enough for this task.”

I admit there were moments I thought he should have turned for help. I was very impressed by the fact that he didn’t even mention this options - it was clear he was going to figure it out. Guess what? In the end, he succeeded solving the problem.

Dare to Start over Again

We want to be good - the best we can.
You worked hard, invested time and thought, but you’re not happy with what came out? Do you think you can do it better? Do not be afraid to throw everything out, and start over.

There are times it is not clear about how to approach a problem, but sometimes you just need to start. Then, you learn that you are on the wrong path. In such a case, you have to be brave to admit it, and bold to choose a new path.

This is exactly what needs to be done - without looking back, without regret about the time spent, without getting stuck on the previous path just because you already went there. Always keep an open mind, be willing to try and make a mistake, this is the best way to learn and grow. This is what success is made of.

Be Glad to Get Comments, It’s Free!

No one likes to get bad comments, and it may be frustrating to get them for every little thing, but I think it is necessary. If you want to be the best, this is something that you should not compromise on. This is a wonderful opportunity to get better, and I think people should be thankful that someone has taken the time to review their code carefully and write comments.

When I watched Amitai, I noticed that he wrote detailed and accurate comments (which I very much appreciate), but on the other hand, his compliments were general and only contained one or two words or just an icon. I brought this to his attention, because I believe that when someone does something well, they need to hear specific positive feedback to feel valued for their efforts. When it is warranted, there is no need to save on good words.

So this is an area Amitai has the chance to improve himself.

As I was saying, comments are a gift you should take with both hands! You also should enjoy the compliments. Did you receive positive feedback? Read it at least twice - it’s satisfying and you earned it!

To summarize, it was inspiring and an amazing learning experience to watch another person work. I highly recommend everyone do it at least once. Choose a good developer, ask to be their shadow for a few hours, come curious, ask them to verbalize what they are doing, take a good look, pay attention to the details, ask questions, write notes to yourself. I promise - you will learn a lot!