Things To Keep In Mind As A Software Developer
Intro
There are many things a software developer could think of and spend their time with but there are only a few really important ones. These are some I think are important.
Find The Purpose
If you don't have a goal, then you can never reach it. Before doing any work, you need to be clear about what it is you want to achieve, what is the purpose of the piece of software you want to write?
Look For Clarity
If you are not completely clear about the goal, you have to ask questions until you reach clarity and understanding of the problem i.e. the goal. Very often, grasping the problem correctly is 90% of the task.
Focus
Now that you have a solid grasp of the goal, you need to focus on the solution. Don't start other tasks in between. Don't work on anything else other than your task except if there is a high priority emergency.
Be Empathic
Always have the customer / user in mind. What do they want to achieve? How are they going to use the feature you are building? Try to put yourself in their shoes and see things from their perspective. This also applies to yourself in the future and your colleagues. Can I write my code a bit more descriptive so it's easier to understand?
Break It Down
The vast majority of solutions consist of more than one line of code i.e. they consist of multiple steps. You cannot swallow a whole apple at once. In the same sense, you cannot not finish a task in one step. That's why your first task is to try and break things down into smaller steps.
Find The Shortest Distance
The shortest distance between two points is a straight line. Your line might not be exactly straight but you have to focus on connecting A and B in the fastest way you can. Don't bother with elegance, best practices, design patterns, etc. Just connect the dots in the fastest way possible even if it's "dirty".
Be Pragmatic
Software has a lifecycle and is not finished in X amount of days. Rather, software is written in iterations. Pragmatism is about getting the job done in the simplest and fastest way without bothering about theoretical purity. Get the job done first then you can make it better in future iterations.
Keep It Simple, Stupid
Sometimes, our brains lead us to weird places and we start writing overly complicated solutions. We have to stay vigilant, try and notice when this happens. In case it happens, we need to stop and think about the problem again and ask "Is this really the simplest solution"?
Ask For Help
If you are stuck and not sure how to continue, ask for help and guidance. Find someone you think might be able to help you, tell them about your task and what you are trying to achieve. Tell them what you tried already and ask if they have an idea. Often, you will solve the issue just by describing it to someone.
Think About Things That Could Go Wrong
Murphy's law states: "Anything that can go wrong will go wrong". And it will probably go wrong at the worst possible time. Unlimited things can go wrong and we cannot think nor defend against all of them but being aware of them and tackling some of them, can make our software much more resilient and our customers happier.
Review Your Code
After you connected A and B and you have validated that your idea / solution works, go back and read what you wrote. I bet you will find mistakes, or things you might have forgotten to consider.
Ask Others To Review Your Code
No matter how smart you might be, your brain can never encompass the complexity of the world. But adding a few more brains might help in making our solution a bit better and catch missing pieces.
Be Open Minded
Your ideas and solutions might seem amazing to you, and maybe they really are, but no matter how much you might love your idea, you have to leave some space for the possibility of other ideas being better. Also, your idea might have a critical flaw that you didn't think of yet and someone will point it out to you. In that case you should be thankful.
Consider Trade-Offs
Trade-offs are situations where you have multiple, mutually exclusive, choices. One choice gives you a certain benefit but also comes with certain downsides. Another choice might not have the downsides of the first one, but then it also doesn't have the benefit. For example, one solution has very high performance, but not many features. Another solution has many features, but low performance. Which one you will choose, depends on your context, and what is important for your project at that time. Often, software development is balancing act.
Always Stay A "Junior"
A junior developer doesn't have an ego that might prevent them from asking questions, asking for help, asking about and listening to other peoples opinions and advice. A junior developer knows that there is so much they don't know yet and thus they are always ready to learn and expand their knowledge. By staying a junior in this way, you will never stop getting better at what you do.
Don't Reinvent The Wheel
Don't waste time solving problems that are already solved. If your business is selling flowers, don't be inveting a new JavaScript Framework. Work on providing your customer with the best choice of flowers and the easiest and most compfortable way for them to have the flowers delivered to them.
Separate Concerns
Imagine one person in a company being responsible for, sales, marketing, accounting, software development, shipping, etc. Does that make sense? Is that possible? Not really. That's why companies have departments and roles with different concerns and responsibilities. You need to break down your software in pretty much the same way and while working on new features, keep those concerns in mind.
Think, Ask, Research ...
Writing the actual code takes up, maybe, somewhere between 1%-10% of our job. The other 90%+ are about talking with team members, asking questions, sitting there, looking into the void, thinking and researching. The more you do of this, the better you will be at software development.
Be A Team Player
Talk with your colleagues, be honest, say what's on your mind, be effective and clear in your communication, be someone your colleagues can rely on, be open-minded, be kind, be respectful, give credit where it's due, etc.
Conclusion
These are some fundamental things I think are important to keep in mind while developing software. There are, of course, many more depending on your role and context.