Yepp, more things I wish I'd known when I started, 6th edition.
You can find the first article in the series here.
And the previous article here
Don't try to predict the future
We suck at predicting the future.
Every time you make an architectural/design decision, you close options in your design and constrain your program’s options for change. Designing is balancing the current needs (requirements) with possible future change requests.
Your main goal is to satisfy the current requirements and leaving as many open options as possible to accommodate future changes. If you get a hunch that in the future you will get a request for X feature and design to accommodate that, two things can happen:
1- The request comes, and hurray! you can easily sneak it in.
2- The request never came, and you end up with a subpar design that doesn’t relate to your current requirements, shame on you.
Because the second thing is more likely to happen, you avoid making the rookie mistake of designing for things you are not sure will come later.
Design is about balancing two things: satisfying current requirements and leaving open as many options as possible. You want to keep flexibility, and designing for hunches poses unnecessary constraints in your program.
So go for designs that are easy to extend and don't build towards a feature that might never come.
Communicate with the users of your software
In a previous article in this series, we talked about our role as software developers. Our job, above writing code, is to provide value.
The most important prerequisites for being able to provide value is to know what our users need. Communication with end-users is important because as the creators of the software, we tend to have skewed ideas about the products we make.
There are many features and usability aspects that are obvious for us, but not for the users. Things that for us seem clear and intuitive can be difficult for people who... well, who didn't create the product. Communicating with users and understanding what they love and what they hate about our products is an important part of crafting the right solution.
It's true that we don't have those many chances to do this, but if there is a situation where you can talk to a user go for it. If it's not possible at all, become best buddies with your product owner and get regular feedback.
Remember that there are few things as sad as building a great product that solves the wrong problem.
Don't be a technomartyr
Career is important, but so is your private life.
I know this might not apply to you, but our profession is full of people who work a ton of extra hours. Neglecting family, friends and personal life in order to ship that extra feature is quite common among software developers.
I know you might need to stay in the office for a couple of extra hours on special occasions, it happens to everyone. But continuous neglect of other aspects of your life is impossible to sustain in the long term.
We are human beings, and the need to cultivate relationships and hobbies is an integral part of who we are. Having a network of healthy relationships around us not only makes us happier, but it also helps us produce better quality work. A happy and well-rested person with other interests tends to fare better in the long run.
It's not that extreme sacrifices will make you a star employee forever. Sooner or later you will burn out and your relationships will deteriorate, something that will ultimately impact your productivity if that's the only thing that matters.
So, spend time nourishing what matters. Your job will still be there later, and you will probably switch jobs several times in the following decades. Bet for sustainable growth and nourish all the aspects of your life.
Oh but I also knew all these things.
It's ok, maybe in the next article, you'll find something you didn't know yet.
Thank you for reading, I hope you learned one or two new things or at least got something new to think about.
What to do next:
- Share this article with friends and colleagues. Thank you for helping me reach people who might find this information useful.
- Read the next article in the series.
- You can find helpful books to continue investing in your carrer in the recommended reading list.
- Send me an email with questions, comments or suggestions (it's in the About Me page). Come on, don't be shy!