I've been a software developer for close to six years now, but this is the first time I'm writing a review about the year gone by. Or writing anything at all related to my career. Many reasons prompted this change:
- This has been a breakthrough year in multiple ways.
- My knowledge tree widened beyond what I thought was possible in such a short period, and yet the effort expended was not excruciating. In other words, the effects of compounding on previous knowledge have become as significant as acquiring more knowledge.
- I thought the learning curve I was on till the end of 2019 was roughly at a 60 degree angle - taking my work seriously, studying on weekends, solving others' problems on StackOverflow, and the occasional all-nighter. But when I started my new job at ThoughtWorks (TW) and saw how much people knew and learnt everyday, I realised my curve was closer to 20 degree. It really does make a massive difference when you surround yourself with the right people.
- I realised this year the value of keeping records of every little detail - both professional and personal. The mind is truly a horrible hard drive; it retains only those memories which have strong emotions associated with them. This year's strongest emotional connection to work stuff are the two internal talks I gave. The stage fright was tantamount to mild panic attacks.
- I've made a small adjustment in my career path due to the things I've learnt this year (explained below). I want to look back at this moment when I make my next adjustment.
- I realised I would enjoy reading these kind of posts years later.
- Unexpected benefits. If you expose your work to the outside world, sooner or later someone comes forward with a great opportunity, insight, or correction for you.
Got a new job at the beginning of the year.
It's been surreal so far. I had no idea smaller companies of cultures similar to FAANG existed in India. I feel fortunate to have landed here, and bizarre that they reached out to me for an interview.
Went into a mental slump and loss of motivation due to my new salary and seeing younger people knowing much more than me.
I had been working for three years to make a big jump. At office I used to get my own work done and help my colleagues as well. Sometimes I would help up to four people at a time. On many days I would wake up at 5 A.M. and start answering Stackoverflow questions without freshening up. I worked on FreeCodeCamp projects and posted them on Github. I posted code snippets I was proud of on Codepen. I learnt design basics and CSS in depth, to became the 'go-to guy' for styling in my team. I wrote code to solve my friends' and my personal problems (Python scripts).
But, when I started my new job two things happened: 1. The three year goal I had been working on was finally complete. I felt empty and devoid of purpose. 2. I thought I was fairly knowledgeable after all the hard work I had done over the last 3 years - that thought shattered when I met my new younger colleagues.
Turbo-charged my note-taking and started tracking all aspects of work and personal life with Notion.
Gave 2 talks.
I gave 2 internal talks within the span of 4 months. My previous record had been to give 1 talk roughly every 3 years. The company's culture of sharing knowledge was definitely the biggest factor that pushed me to do this.
Stepped into security for the first time.
Last year, I had made a plan that I needed to have sufficient knowledge in all areas - backend, frontend, devops, security, delivery, finding clients, etc. before I could think about being my own boss years in the future. This year, I took the first, most difficult and important step by starting to learn about web application security. Why difficult? Simply because I had a mental block that it was difficult and a black box unlike any other.
First ever responsibility that spanned multiple teams - facilitating security assessments.
This milestone illustrates better than any other the theme of my transition from my old company to new, as well as my transition into a senior developer. In my old company my work was limited to creating UI pages, and I interacted only with the lead developer and manager. Facilitating security assessments, however, was my first ever task that involved multiple teams across the company. It was also my first foray into security. Interesting to note: these kind of roles are very common at TW - you can volunteer for them the moment you join as a college graduate. TW truly breeds leaders.
Read Extreme Programming Explained and The Phoenix Project, which massively affected my thoughts of what it means to be a developer, a team player, a consultant.
Extreme Programming taught me how to think like an agile team member, and contribute towards the common goal. It is a well-written book, and I would find myself wanting to improve things right away in my team every 10 pages. The Phoenix Project taught me to think even bigger - the goal of a company, the importance of a smoothly running pipeline, and the illusion of progress when you use bad benchmarks. I hadn't read many software-related books before these two. I'm excited and in awe of how much more knowledge I could gain in the future from similar books.
Switched to a MacBook after a lifetime of Windows.
What a change. I don't ever want to switch back. Except for maybe playing games.
Turned from a UI specialist to a generalist.
Partly my decision, and partly from the requirements of TW, I have decided to spend time learning backend languages as well.
Realized I wanted to be a big-picture person like Elon Musk, and not a specialist like Tesla's head of AI. Also, I value the importance of hiring the right people and having the right culture.
I'm not sure where exactly this change originated from. Maybe from reading the above two books, maybe from seeing how much my colleagues can go down the rabbit hole (spending 8 months trying to get one pull request accepted), maybe from seeing how my health starts to get affected when I delve deep into topics. Or maybe from realising more than ever that all your special skills are worthless if you're not providing value to the customer. I think the last one is the most important. Providing value can be done through simple things as well, and doesn't always have to involve in-depth knowledge. Sometimes it could be as simple as making old ideas better.
Also, from observing the culture of TW and the interview process (which includes questions about one's views on social issues), I realised how important it is to hire the right set of people in order to maintain high standards in a company.
- Wrote my first co-authored post.
- Wrote my first coding related blog post (this).
- Used a web security testing tool (Burp Suite).
- Started solving web security lab problems.
- First ever responsibility that spanned multiple teams - facilitating security assessments.
- Attended an online conference (NodeJS).
- Gave 2 talks in a year.
New things learnt (unless stated otherwise, I learnt just enough to get work done. I can't be called the 'go-to guy' for any of these):
- ES6, ES2020
- React Native
- React performance tips from Kent C. Dodds
- Chrome snippets
- git rebase, filter-branch, stash, revert, gitignore_global
- Jest, react-testing-library
- A ton of new terms, like canary testing, regression testing, smoke test, TDD, hallway usability testing, contract testing, broken window syndrome, desk check, Iteration Planning Meeting, timebox, spike.
- Testing for memory leaks in NodeJS.
- How JS manages memory in the browser.
- Log aggregation
- Tree shaking
- How to make the browser and CDN cache data.
- State machines
- Web application security
It's never happened before that I do not have complaints for a full year. I truly couldn't have done anything better given the circumstances I was in, and not having the benefit of foresight.
My plan for 2021: Continue to learn about security and all other areas that would allow me to be called a generalist.