A Small Generic Guide For A Software Engineer Career. Part 1


I have been working professionally since mid 2017, starting with freelancing and then working at companies from the start of 2018
Over the years, these are some of the things that I have learned
There’s always room for improvement
I have always felt this, with respect to my career. I feel like I failed myself by not doing enough, since I could have done so many things! A recent conversation with a senior of mine about this lead to him confessing that he feels the same too and that this feeling is always gonna be there, and to kind of denote that it’s important to be okay with it
Apart from the regret of not doing enough, I think this idea can be taken in a positive manner, to always look for more opportunities in any job you are in. For example, these are some of the things I could have done:
Read Code
Read code. Seriously! There are a lot of people who write a lot of code, especially beginners, either by themselves or using AI. The thing is, it’s important to read more and more code, to be able to understand code, gain new knowledge, gain new perspectives, understand nitty gritties, notice and discover interesting patterns
If you are a newbie, start by looking at any source code that you can find in a programming language that you understand. It’s okay even if it’s not “good "code” or if it’s “bad code”. You will notice how people write code, what standards they follow, how they do error handling, how they design the software project - structuring the files, breaking down the software into smaller parts and writing them as functions or methods (in classes or similar). If you are in a company, look at the source code of different projects of the company. If you are not yet professionally working, just take a look at the source code of open source projects. There are many great open source projects out there
Look for Patterns
Whatever you do, look for patterns. I believe that humans learn very well based on patterns. Literally do pattern matching with patterns you already know, or discover new patterns you didn’t know. For example, look at patterns in source code, these can be design patterns. Look at patterns in software in general - in architecture, in algorithms. Look at patterns in how the company works. Look at patterns in how people do things and work. Look at patterns in how the team you work in works. Look at patterns in the system - both software world and the real world. It will help you tons. For example, I know Unmesh Joshi from ThoughtWorks, my previous company, who found patterns in distributed systems and shared it with the world through his blog posts and a book. It was an interesting thing indeed. And then there are many people who have done such things in the past, where they find patterns, and share it with the world
More references:
Patterns in Distributed Systems
https://martinfowler.com/articles/patterns-of-distributed-systems/
https://www.amazon.in/Patterns-Distributed-Systems-Addison-Wesley-Signature/dp/0138221987
https://www.amazon.in/Patterns-Distributed-Systems-Addison-Wesley-Signature-ebook/dp/B0CCD3F8BH
https://www.amazon.in/Patterns-Distributed-Approach-Designing-Implementation/dp/9361590529
https://www.oreilly.com/library/view/patterns-of-distributed/9780138222246/
Focus on depth too and not just breadth. Especially focus on basics, core concepts
As a newbie to the software industry, I was fascinated by the many things that were out there. I used to love trying out new things. And I still do. It’s great to try out as many new things as possible and learn from it. But it’s also important to stop and choose a few technologies and learn them in depth. Preferrably technologies that have been around for a long time and are still being used majorly and don’t seem to be going anywhere soon. These kind of technologies and concepts are usually core technologies and core that rarely get discarded or changed. For example, if you learn about CPUs, GPUs, RAM, etc, it will benefit you any day, until someone comes and changes CPU, RAM, GPU etc with something else, which is a rare thing and will take quite some time. So, focus on core concepts, basics. How do you know if it’s a core concept or basic? Just look at whatever you are working with and look one level deeper and understand how it works. You can go more levels deeper to understand how different things work. And you can keep doing this until you hit 0s and 1s (binary). So, there’s always something below the layer that you are working with. For example, you could be working with Programming Languages, Frameworks, Tools, Software Systems etc. But you may not always know what goes behind the scenes, like - how the programming language was built (language specification, compiler/interpreter, runtime etc), how the framework was built and how does it work behind the scenes when you use it’s features, how are the tools built and how do they work behind the scenes when you use it’s features, how do the software systems that you use work and how are they built and what are the core concepts that they are built on, for example, there are lot of people who don’t know what happens behind the scenes in a data system - say a stateful database, or a stateful message broker, and so on
Do more things outside of your purview
If you are in a project, you don’t have to do just your project. Try to see how you can help other people in other projects. Try to see if you can contribute to other projects and not just your project. Try to advocate the idea if it’s not appreciated in companies which say “Work just on your project”, kind of to say - “Stay in your bubble”. But it’s important that you don’t stay in your bubble always - that can lead to stagnation and also make you unaware of the things that go on in other projects and in the other teams and the company. It’s tricky because some companies are really huge - in terms of the product(s) and/ service(s) they provide, the number of people they have, the number of projects they have, the number of softwares they have, and use etc. But you can always do a bit more if you have got the time and energy and the will to do it, without affecting your Life and also career. Or else, you miss out on learning more by being more comfortable. This can be seen as a Fear Of Missing Out (FOMO) problem too. But yeah, it’s good to try more, do more, if not do everything especially in the case where there are too many things to look at or do that’s humanly impossible to do within a given small timeframe. Access etc to projects might be an issue in some places and companies. We talk about this later in a different section
Take up more responsibilities
I have noticed that the more we do, the more we are able to do. The less we do, the less we are able to do. Like, if you don’t use up your time to do anything productive and scroll social media for example, or similar distractions, you will end up doing a thing that sucks your time as a blackhole. And you will just use your time, which is probably a lot, to just get a small work done. Kinda based on the Parkinson’s Law, which is
Work expands so as to fill the time available for its completion
So, yeah, give yourself more to do, and you will most probably be able to do more, by managing your time and energy in a really well manner. But yeah, don’t end up burning yourself out. Get enough rest (but not too much :)). Try to balance work and life :)
Also, the more you do with your mind and body, the more you train your mind and body to do more, the more it will grow. Unlike the case where - when you do less with your mind and body, the worse it gets - it just rusts 😅 Unless you have a disability that disallows you to do something mentally or physically, I would recommend working on your mind and body by pushing it just the right amount - just right enough, to help it grow. This is based on science, so I recommend reading about this and not taking my word for it :)
Be Smart First, Then Be Hardworking
From a long time, I have usually always been the kind of person who postpones doing things, procrastinates, all in a very unuseful manner / unproductive manner. This lead to me preparing and studying for exams last minute and hard working, than doing something smarter and better, which is studying little by little everyday in a smart way and working hard on consistency, than crunching it all in one night or a week before the examination. The same can be applied to any situation - a work that you need to complete, a project that you need to work on and complete and so on and so forth. I recommend being smart and cutting down tasks into smaller tasks, smaller chunks, especially when the tasks are big tasks and then work on it in a smart way, estimate the time it would take and manage your time and energy while working on the task. Always aim for consistency in working over a time period than doing the work one time like last minute work.
Let me also tell you some of these things I did do in my career that helped me and that I liked / loved
Contribute to Open Source Software
I was fortunate enough to have been introduced to the concept of Open Source and Open Source Software and the different kinds of software from a long time, like, since high school. But in high school, I didn’t know much or understand much about the power of open source. Later in college, I realized how powerful open source and open source software is. By the way, there are open source hardwares, open source arts too, where people open source the blueprint of their hardware which could be the circuitry in case of an electronic or electrical appliance, or even the files required to print a 3D object in case of a 3D item, or even the source files required to modify and edit an art, say an image, or just provide images etc as open source. You can find some interesting examples of open source online. I also learned about open source licenses when it comes to open source software or any open source thing. It was interesting and in many ways complicated too. I was also fortunate enough to be able to contribute to open source software during my college time - to others projects and to build my own small projects. I was also fortunate enough to be in a team in my company that advocated open source software (to use it) and also advocated contributing to open source software.
But don’t let hope, fortune, chances and luck dictate what happens to you. Instead, steer clear and ensure you contribute to open source projects in case you are into it and it interests you and you have time for it. Or else keep it in mind for a time when you have free time and are bored and have nothing to do ;) Companies that allow people from different internal projects to contribute to other internal projects call the contribution as “internal open source” - so as to say that the projects (some of them or all of them) are internally open source - for anyone to read and even contribute in some cases, which is a pretty cool thing, because a lot of times you don’t even have access and authorization to read some of the code of some projects and software, and same is true for their documentation (architecture, use etc)
Network with people
I networked with people within the company and outside the company - in person and also on online platforms like social media, including professional social media platforms like LinkedIn. This helped me with finding new jobs, learning from new people, getting referrals and many more things. It opens up a whole lot of opportunities. So, if you haven’t done it yet, I would highly recommend networking more and more with people, regardless of your social skills (introvert etc) and interest, just to open up a new world for you and to open up a big can of opportunities with the help of people
Write Blogs. Create Content in general
A lot of people just consume content. They just read text, watch videos etc. It’s worse if the content is just random stuff, entertainment, social media doom scrolling etc. It’s great to read helpful books, blogs, articles etc that give you new perspectives, and same is true for audio, video and other forms of content. A great thing to note is - when you also create content, you create credibility by showing your content. This can be internal content within a company or organization or public content - for anyone in the world to see, in the form of physical (books, newspaper articles etc) or non-physical form (online blogs, ebooks, online articles, YouTube videos etc). Some content creation doesn’t take much time and effort. For example, recording audio or video is usually easy, assuming you are okay with not preparing much, because preparation and doing checks etc consumes a lot of time. I recommend doing things impromptu. Writing blogs and text in general can take up a lot of time and effort and you might end up reading and re-reading your content to look for mistakes etc. Try to be very casual about your content and just ensure you hit publish on that text (blog, article etc) or audio or video etc and try to do more and more of it, to the extent that you care more about content creation and less about criticism, peer reviews, and any other after effects of content creation, like no likes, no shares, no comments etc. Just do it for yourself first. It might come in handy for yourself to learn from your past self and also come in handy to show your hard work in content creation and also become a source of credibility and knowledge to show what you know, what you have done etc :)
Subscribe to my newsletter
Read articles from Karuppiah Natarajan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Karuppiah Natarajan
Karuppiah Natarajan
I like learning new stuff - anything, including technology. I love tinkering with new tools, systems and services, especially open source projects