Skip to main content

Talk: The Developer Mindset

·1460 words·7 mins·

I was asked recently to give a talk in a weekly session performed at my company titled “Knowledge Sharing” in which a department, team, or even an individual, like myself in this case, shares some knowledge about the work they do, some skills they require, and maybe even display certain specifications that differentiate someone who is good at this great compared to someone who is great at it.

My topic was about the developer mindset. A set of processes and ideas that are either required or good-to-have for software developers. The idea was to explain to non-technical and non-developer people how software developers manage to find solutions to problems that might pertain a topic that is initially unfamiliar to them. Software developers have built banking systems, project management systems, video games, and everything software you use!

In this article, I go through the list of things I consider important to have as part of your mindset in order to be a great developer.

1. Systems Thinking
#

Systems thinking is the ability to see the full process of a series of actions. A better way of explaining it would be using an example.

You can look at your body and how it works on a high-level. It takes in two main sources of energy as inputs, food and drinks as well as sleep. The better you sleep, the more energetic you are. The better food you eat, the more energetic you are. You sleep only a few hours one day and you will feel the lack of energy the next day. You go on a diet or a fast and you feel the lack of energy.

In this case, “energy” is what is referred to a stock, this is the inventory part of the system. When you provide proper input, sleep or eat in this case, the stock, or “energy”, increases as well.

When we have lots of energy, we have more “outputs”. For example, we workout or do some focused work. Those are outputs. The outputs rely on the stock in the system and what is available. You won’t be able to workout if you low or no energy.

To build the full image. Imagine if you have the two inputs, Food & Drinks and Sleep that fill up the stock, Energy, which then allows for having outputs, which are Working Out and Focused Work.

Food & Drinks

Energy

Sleep

Working Out

Focused Work

The point of this whole thing, is to see this as a system, with inputs, outputs, and stock. This way of thinking, when considering most things around us like our work, gives a new perspective and allows for a more critical thinking.

2. Documentation & Version Control
#

Software development and architecture require have lots of different types of documentation. Technical documentation, API documentation, User documentation, Architecture Decision Records (ADRs), and more.

The reason why documentation is important, is because it is a recording of the current state of the system. It describes how the system documented can be used by developers or by end-users. When a user tries to use the system but are unfamiliar with it, they can go through the User documentation. When a developer joins the team and wants to learn how the system is built, which tools, what environment requirements, and what the architecture of the system is and the under-lying details of it, they can go through the Technical documentation.

While maintaining the documentation and keeping up-to-date might be annoying or time-consuming, it is efficient in the long run. Imagine if everytime someone joins the team, they have to come to you for a full explanation of the system. Or if everytime an End-User tries to perform an action they are unfamiliar with, they ask you.

Version Control is another trait that software developers and engineers alike should have and perform often. Version control is the act of keeping track of the different versions and changes done on a piece of content, whether it is a coding project, a document, or even a set of notes.

It allows you to revisit old content and view what exactly changeed in a specific file. This helps greatly when trying to see what changed from the previous versions. Perhaps a feature stopped working properly, you can revisit the old files and view what changed.

Overall, these two are essential traits that help developers in various ways.

3. Adaptability & Agility
#

Adaptability is the ability to adapt to a new situations or conditions. In Software Development, this includes but is not limited to:

  • New tools and technologies to be used for the development process
  • New domains and topics for the systems to be developed

Today you could be working on a project management app, tomorrow you could be working on an accounting software. You could be used PHP in one project, but move to Java in the next one. The ability to adapt to new tools and technologies and to new domains and topics is essential for being a great developer.

Having a favorite programming language is fine, but it is important to understand what its best use cases are, and not simply using it for every project, even those that could be better using other programming languages.

Agility is the ability to move quickly and easily, in Software Development, this means changing priorities as conditions change and delivering software more frequently.

Being to move from being a developer, to a tester, to a system analyst, allows you to be great at different points of the software development process. You might be working on the development of one feature now, but you might be asked to test a feature that was built by another developer, or you might be tasked with sitting with an End-User who needs the system to have a piece of functionlity to better understand their needs. You may even be asked to deploy the newest version of an application.

Having the ability to switch being one thing and another is a great trait to have as a software developer.

4. Understanding Different Perspectives
#

How can one build a system for a team or department, without knowing what issue it tries to solve?

Imagine you were building a simple banking app, you might create the withdraw and deposit functionalities. But did you build them the way an End-User would use them? Did you ensure that experience was smooth for even those who are not very technically proficient? If an old person tries to use this system, would they struggle, or would it be an intuitive process?

Software developers have built game design engines for game developers and designers, accounting tools, HR tools, project management tools, banking tools, and so much more.

You are not expected to instinctively know everything about what the systems End-User does. Therefore, you sit with them and understand what they do, how they do it, what issues they face with the current method, and how this new system would fix their issues.

I read something recently that discussed why many doctors reject some of the hospital systems presented to them. The reason was not necessarily that the systems were slow, or that the systems missed some features. The systems were rejected because the doctors had to click their mouse often to perform an action they need to do often. The developers didn’t take into consideration that the doctors get tens of patients a day, meaning they use their mouse often to view details of each patient, what tests they did, or what medications they have been taking.

5. “Rubber Duck Debugging”
#

“Rubber Duck Debugging” is a method of debugging, or finding bugs and faults in code, by explaining the code to a rubber duck.

The purpose of this is that it helps better understand the missing parts that are required to fix the issue, by explaining the entire process, line-by-line. When explaining the code, you will connect the dots between one line and the next, allowing you to find out what is missing and what issues were not taken into consideration while writing the code.

This concept has become so popular that the famous online platform Stack Exchange launched a website on April Fools’ Day called Quack Overflow, check it out here

Conclusion
#

The items listed above are only a few of many traits that are very beneficial or even required for Software Developers, Engineers, and Architects. You could learn more about some of the things discussed below by checking out the references below.

Thank you for reading this article, and I hope to see you in the next one!

References:

Hazem Hadi
Author
Hazem Hadi