Thoughts about work, life and how I maintain a balance

I love to keep up to date with what's happening - on a variety of subjects! One of my favorite sources of reading and catching up is reddit. It is one of the last remaining social media platforms I really enjoy. I have been off facebook for well over 10 years now, and twitter has become a mess with bots and certain content being pushed down your throat. I feel a little more "in control" with reddit and especially on the technical subject mater there is a ton of really good people with really good content to share.

I mention this as I have noticed a lot of advice seeking questions on various groups that are typically just for technical discussions. Without any arm chair research (or with even minimal google searches), it does feel to me like younger or less experienced professionals really have a hard time finding some balance in their work. Expectations are often far from realistic and I see a lot of frustration coming trough in these posts.

Over the last couple of weeks, I have engaged with a number of these posts, but I thought it might be time for a blog post to which I can just share a link everytime these questions come up. This will also save a lot of my own time but of course it also provides an opportunity for me to reflect on my own life and all my experiences.

Disclaimer: I can't offer advice - I am not qualified in any professional career advice area, and on top of that my experiences relates to me and the very specific circumstances I faced over the years. I share what worked for me and what didn't. By doing this, I hope others that read this can compare notes, take what makes sense to them and ignore the rest. Most of all, I hope all readers can at least take a moment and reflect on their own life and their own experiences - we all need to do this from time to time. If you are just starting out your professional career, perhaps you will pick up some topics to really think about.

An unusual start, with a good measure of luck and timing

I know there is a whole lot of people that believe you can make it in life if you just try hard enough. Hard work will be rewarded and all that... Well, as I'm approaching a more senior stage of life, I realized that this thinking is mostly just wrong. I am not saying that you should expect everything to just come to you or that everything is just random luck of the draw - on the contrary, hard work and commitment to some form of basic principles and ethics does help a lot. But especially in the early years, you have to rely on someone willing to give you a crack at something that will allow you to build a foundation from where you can start to carve out your life.

Having said that, it is also important to note that things rarely work out exactly as we plan or even hope for. I really wanted to be a pilot, for as long as I can remember... I still don't even have a private pilots license (or whatever equivalent you may have in your country). Thankfully I love IT and that was a good enough second option for me to enjoy a very fulfilling professional life.

Lesson 1: be passionate about more than one thing. You can't always get what you want, but it helps if you are really passionate about more that one thing.

In my life, I actually started programming in school, way back in the late 80's. I loved computers and somehow instinctively knew that this was going to be a big thing! I started programming in Turbo Pascal on an IBM PC compatible running MS-DOS. My first programs were basically short terms contracts for a fixed fee. Of course back then this whole concept of contracting was unknown to me - I didn't even know the term back then! But, I ended up earning some really good money for two programs I wrote and it was enough to get me through high school (read more about schooling in South Africa).

The honest truth is I didn't know what I was doing. HOwever, by constantly experimenting and engaging with the client, I got both programs to do what the client wanted. What I did, without realizing, was some form of extreme agile program in which there were no tasks - just talking to the client, implementing something, demonstrating it, get feedback, rinse and repeat - until the client was satisfied.

Lesson 2: IT, as with many other careers, is about engaging with people. It is very social oriented and the idea of the nerd in the basement working in complete isolation is just wrong! You need to learn to engage with people to get work done. Along with this, always try to maintain good professional relationships. You never know who you will meet again in future and sometimes you may need old contacts to unlock a new level for you. I'm not saying you should use people (in fact, I dislike this concept very much!) - but at least acknowledge that you need people's help from time to time to progress in your career or professional life.

However, this great start would not have been possible if our school did not invest in a single IBM clone PC to begin with. On top of that, I had a very understanding science teacher that allowed me to use the computer, even after hours. He gave me the freedom to explore and only guided me when I really got stuck. The availability of the PC together with an understanding teacher changed my life. If either of these two basic things were not in place, I don't know how my life would have turned out...

Lesson 3: When an opportunity presents itself, take it. Sometimes luck and timing favors you and if you don't grab the opportunity, you may never have another change.

After school, I took a short break from IT by joining the South African National Defense Force and I became a medic with 7 Medical Battalion Group. It was a great experience and opened my eyes to a whole new world of opportunities! I really enjoyed the role and participated even in a civilian context to a limited degree. I met some amazing people, went to amazing places and got to play with some really cool and expensive toys! I am a qualified paratrooper and completed military freefall and completed several other specialist courses. It was an amazing time and I made life long friends which are like brothers and sisters to me.

However, after a couple of years, I realized that I should probably think about the future and perhaps even start to work for some real money... I'm sure many in these kind of roles can relate! So, I began to get into IT and programming once again. Now it was the late 90's, Windows 95 had become one of the most popular operating systems and Linux was also gaining rapid popularity on the web. The Internet was mostly an expensive dial-up affair which meant you had to plan your online time very well. I was programming again part time, this time using Delphi as it was closely related to Pascal. I created several Windows based applications, but in truth I was not as successful with these as previously. However, this new Linux thing was starting to draw my attention...

Lesson 4: Keep your finger on the pulse of trends and emerging technologies. Things happen fast in IT and you need to keep on learning about new technologies in order to remain relevant. You may have to try to see what the IT landscape will look like 5 years from now and then start as early as possible to gain the skills and experience for that future. Rinse and repeat often.

So, the Windows application development scene didn't work out for me, but in parallel I was playing with this new Linux toy and started to learn the LAMP stack. In those days, it was pretty much Linux, Apache, MySQL and Perl for me. I loved Perl and I got really good at it. I was developing web pages for several private entities and even learned a fair amount of interactive web development using the Common Gateway Interface (CGI). I also learned some C that enabled me to develop some pretty useful Apache Modules.

These were the days before HTTPS, React, Microservices etc. Looking back, I am very grateful for this long and eventful journey and that I was able to evolve with the technology. It was (and still is) a real privilege!

In this regard, I feel rather sorry for those just starting out an IT career. I wouldn't even know where to start if I had to do it again all over starting fresh today!

I still was not making any real money and by the time I left the SA Defense Force, I first tried making it on my own. It was a really early form of freelancing and again I didn't even know the terms existed at the time. I was looking for opportunities and landed at least one big contract - but unfortunately it turned out a bust and it almost financially ruined me. I made a huge mistake: I agreed to work on the project and only get paid at the end of the project (6 month contract). Well, at the end of the 6 months I delivered the final product. Functionally it worked well enough to launch to market, but the client was happy and they said they decided to cancel the project and move on. They did not pay me, and I did not have enough money left to pursue it legally. It was a hard and expensive lesson!

Lesson 5: If you are going to work on contract or freelance, make sure you understand the terms of your contract. Ensure you get payment at regular intervals - don't make the same mistake as me!

I was basically broke and technically bankrupt. I only had enough money left for perhaps two more months of just surviving. I started looking for full time employment, but without any formal computer training or any tertiary education, my changes were really slim.

Sometimes, you just need a lucky break and mine came in the form of a prominent and very successful retail bank in South Africa giving me a change to prove myself. The interview was very awkward, as I had virtually nothing in the form of any formal IT training. All I had at this stage was a total of 5 or 6 years experience. What was going for me was the following:

And there I was - starting at a major retail bank as a Perl programmer... This was a pivotal point in my life and I am so grateful for the people that was willing to give me a change. This was lesson 3 all over again!


Learning is really a life long exercise. You have to practice to get good and efficient at it!

Lesson 6: Learn how to learn

Most of what I know and use in my career was not something I learned at school or (later) in university. There are many meme's about IT guys googling for solutions or using stackoverflow solutions. These are great tools, but be careful of just blindly copying code that you don't understand. When looking for a solution, try to dig deeper and try to understand why people will present certain solutions. Relate the solution to your own scenario and perhaps even try different solutions to see what works best - it's not always the one with the most votes!

More importantly, engage with the community. Also share things that worked for you. This will often allow others to also comment or vote on your solutions. In the end, you may either help someone else or you may gain some valuable new insights that will ultimately improve your own solutions.

Lesson 7: Sharing knowledge helps everyone and in particular your own growth. Even if your solution to a problem is not perfect, by sharing it, you allow others to comment and critique your solution, and ultimately a "best" solution for a scenario will emerge. This open learning collaboration is one of the best sources of learning as it is practical and relevant, where formal training is often theoretical and abstract.

After many years without formal education, I eventually did enroll in university and today I have a Masters degree in Software Engineering (among others - but this is most relevant for this blog). As I stated in lesson 7, these types of learning can be very theoretical and abstract, but what I do like about it is that it lay's down some foundations for how to approach problems, choosing methods for solving problems and also what some of the major building blocks (or patterns) are and how to implement them - at least of some practical level. The actual real-world practical experience you gain by applying this knowledge in the field and to often reflect on what you have learned. Almost 10 years after my masters, I still occasionally encounter a scenario where I would then realize what was actually meant with a certain piece of theory or pattern or model.

Lesson 8: A masters degree can open many doors. Formal or tertiary education is not always required, but be careful to completely dismiss it. It serves as a good solid theoretical foundation from where you can expand your knowledge from your own experiences. If at all possible, pursue a degree, and even better, ultimately a masters degree.

With my masters degree and years of experience I was able to get an opportunity at an amazing company in another country in Europe - something that just would not have been possible for me otherwise.

As a final word on formal education, I can also state that one of the biggest advantages for me was actually the new people I met and the relationships we were able to build. You will be surprised how nice it can be to sometimes contact one of these old contacts if you perhaps need a second opinion. I have run into some old class mates a couple of times after university, and it was always nice to compare notes and discuss the past and future. These people can be excellent for testing some ideas you may have, especially since they are more or less on the same level as you, but with different experiences that will look at the problems you may face at a different angle. I also value my conversations with my old class mates.

Work ethic

Luck, timing, education, skills and all such things mean nothing if you cannot apply it to solve real world problems for your clients. Even if you are employed full time, still think of the end-users of your solutions as your clients. In order to create great solutions you need to be able to interact with your clients and understand their needs - what is important for them.

Lesson 9: Learn to listen to your clients. Your solutions is about solving their problems in the way they want it - it's not about you or your preferences.

Lesson 9 was a hard lesson for me... Sometimes what the client wants just doesn't make sense. But that does not matter. What you need to do is to make sure your client is happy. Happy clients will praise you and often this will lead to rewards - even unexpected rewards. In South Africa there was an Afrikaans writer many years ago called CJ Langenhoven. He had a number of really cool sayings and one of them was "Die slegte ambagsman beveel sy werk aan; goeie werk beveel sy ambagsman aan" - translated: "The bad craftsman recommends his work; good work recommends his artisan". The quality of your work today is important for your opportunities of tomorrow.

Lesson 10: Always deliver the best possible performance and quality, even for the most basic needs. Excellence is a worthy virtue. Ask yourself how you want people to remember you or think about you - then work towards that. Reflect often and listen to those that comment on your performance and your quality of work - learn from it and improve.

Through the years I have also learned that there is a balance to getting a job done perfectly, and when it is ok to just get a working solution out - warts and all. It's a fine line, but what I can say from experience is that the most effort usually happens at the end to get everything just perfect. Learn to listen to your client (or product owner) - if something is good enough for the client and they need it, deploy it. Any outstanding refinements is for the backlog. Through the years I have seen dozens of examples where I never got to these tickets and my only conclusion is that they were never really that important to begin with. There are exceptions however - times when you cannot compromise on quality. Information Security is one such area and as a minimum you should ensure that at least on that front you have your bases covered. Invest time in learning about secure coding and best practices - make it part of your DNA.

Lesson 11: Perfect and beautiful code is less important than you think, but secure code is really very important. Rather spend time on secure coding and best practices and less time on the rest. Secure code that mostly works is far more valuable than perfect code that gives you a 100% on your linting tool, but fails to satisfy the client.

Also remember that you will have to maintain a codebase at some point. If you are lucky, it may be some of your own old code. But more often than not, it will be someone elses code. Remember that they probably were also under a lot of pressure and probably applied the same basic guidelines as lesson 11. Don't be too hard on them. Remember that one of those old programmers could very well be your manager, and you may not even know it!

However, a good rule of thumb is to always at least try to improve one other thing apart from the actual changes you were required to make related to a ticket/task/story. Good quality matures over time. Time filters out the less important stuff - even though they may have seemed so important in the beginning.

Furthermore, quick feedback from your clients are worth a lot more than spending endless hours trying to get everything perfect. Get the code out there and get feedback as soon as possible. Improve incrementally and work towards perfection.

Lesson 12: Quality is achieved over time and relies on feedback many sources, including feedback from your clients using your software/tools/solutions. Value feedback and don't try to get everything perfect the first time - it's a waste of time and you will probably end up disappointed anyway.

I know with the last couple of lessons, there are some folks that might be crying in a corner now. Keep in mind that these lessons worked for me and is now part of my style. Over time I have also learned to adapt, so sometimes you work in situations where quality really is of utmost importance. You also have to learn to adjust and the best way to do this is to continue to talk with your clients and adjust to their needs. Manage expectations: it is not unreasonable to spend more time on a project if there are high expectations on quality.

Talking of clients, there is also times where you may not be able to "click" with your client (or employer, or company or whatever you choose to call it). It happens... don't take it personal. If you struggle to fit into a certain company culture, it may be time to move on. However, keep in mind lesson 2 - especially the part about maintaining good relationships. Things may not work out at a given employer - you may be very unhappy. However, that is no reason to make it even more unpleasant by being rude or unfriendly to people. Try to always keep things professional. Remain friendly and courteous - after all, you never know when you may work with some of these individuals again or how your paths may cross.

Lesson 13: It's ok to move on when things don't work out, or if something doesn't sit right for you. There is not much more frustrating than being frustrated in your work and in the environment you work. People are different and company cultures differ widely - and you will not function equally well in all environments.

Remember that in most businesses you are merely a number that exchange time for money. What you do in that time is a contractual agreement between you and the business. In the early years of your professional life, you may have to make some sacrifices even if it is just to learn and gain some experience. But, after a fair amount of experience, your life priorities may change. You may get married and start a family. Time with family means much more than time building your career. This is the one huge mistake I made in life - putting my career above family. I paid the price with two divorces. Reflecting back I can assure you that it is not worth it. When you reach that point in life where you start a family, learn to set firm boundaries with your clients and make sure they respect those boundaries. If they don't, move on. It's really as simple as that and I wish I could turn back time to fix this one thing in my life.

Selling yourself

I mentioned earlier that I wouldn't even know where to start if I had to start fresh in IT now. But having stated that, I think it's worthwhile to explore some things I did in the past that may still be relevant today.

The most challenging thing is landing that first job. I was lucky in school, but my own path to success is hardly a rule and you cannot expect it to work out the same for you. HOwever, something that does help is experience. The trick is to gain experience even before your first full time job (or big contract). But you can you gain experience without formal employment?

One thing I would propose is to get involved in Open Source projects. I believe this is a great way to get exposed to how the real world works. You will be exposed to the brutal reality of life in pull requests (here is Atlassians take on the subject, and here are some thoughts from GitHub).

Lesson 14: Build experience from day 1. Participate in Open Source projects and engage with the community. There is no formal course or money you can pay someone in order to learn so much as being knee deep in one of these projects. And you don't always have to code - sometimes you can add value and still learn a lot by just maintaining documentation. Maintaining you experience visible on platforms like GitHub will provide a handy way to add experience to your CV on top of any formal experience. It is very visible and open and can be used as a really strong selling point for yourself. Remember lesson 2!

It takes time to gain experience and it takes a lot of time to become really good at something (you can also think of the word "expert" here). The words "junior", "senior" and all the other terms around these terms, have slightly different meanings to different people. Personally I view a "junior" as someone with perhaps some formal qualification (in other words, they might know how to program in a particular language), but they lack some working experience. The word lacking here is key, and personally I view anything less than 5 years as junior. I have seen individuals with only 3 years experience marketing themselves as intermediate, but when they join a team it can quickly become clear they are still junior.

Lesson 15: Be patient early in your career. Use the first 5 years to learn as much as you can and be prepared to take a couple of punches along the way. Suck it up!

The lines between intermediate and experienced are a lot more fuzzy and here I usually consider someone with more formal education and more years experience as the more senior person - when comparing people at least. In recruitment I sometimes use someone else as a yardstick - for example a colleague who I work with and respect. It's not an exact science and the truth is that each person has their unique attributes and plus points they can bring to the table. It then becomes more a question of the negative points and if you, the company and the team could bear them. For this reason I like for everyone (myself included) to hit the ground running and deliver the first tasks already in the first sprint - even if it's the smallest of tasks. I hate to wait until the end of a probation period to see if things worked out or not. The sooner you can establish a good fit in the team and the role, the better. If it doesn't work out in the first two sprints (or first month), it is highly unlikely things will improve. Rather end it there and then.

But also keep in mind lesson 3... Something better can also be just around the corner, so don't get settled in so much that you become part of the furniture - unless, of course, that is your strategy for your life. It is up to each person to figure this out. For me, I like to grab opportunities as they come past. As a result, I have moved often. If I look back on my career, I think around the 2 year mark is a fair average in terms of how long I stayed in each position I held over the years. There are of course outliers... There are jobs I really liked, but only had for three months before something better cam along. I will admit - it's a bit of a roll of the dice, but that is my style and I am very comfortable with it.

However - I am now entering a phase of my life that I will not mind a little more longer terms stability. Time will tell if this is really what I want and if it is even possible for me to settle for a long running term with a single client.

In conclusion...

This turned out to be a much longer blog post than I anticipated. Turns out I have a lot to share from 30+ years of experience. There may be a follow up post in the future, but I think this is a good time to call it for this post.

I hope these experiences and lessons I learned can help you or at least make you think about these topics. We all have to figure out life for ourselves, but it helps if you have someone to compare your life with. My experiences may very well be the polar opposite of how you want to live your life - and that's ok.

I have referred to lesson 2 a couple of times and I think it is one of the most important lessons I have learned: engage with people and build and maintain good professional relationships. Everything else is more or less just details, personal experiences and such. But lesson 2 is something you can apply to your whole life, regardless of your profession.

Anyway - I'm going to stop here. Feel free to engage in discussion and share your thoughts!


work, life, balance