Introduction
Hi Shivam, would love to know a bit about your professional background.
Hi, I’m Shivam! I'm a freelance software developer with around 7.5 years of experience.
On top of that, I run a company called Koding Korp to manage projects for clients that require more resources than a single developer can handle. Right now, I'm working full-time as a freelancer.
Day in the life of a software engineer
- What does a typical day look like for you as a software engineer?
I start by listing 2 to 4 important tasks for the day. Then check meetings and adjust priorities accordingly. Most of my time is spent planning and problem-solving. I focus on collecting information. Understanding the problem. And determining the best solution before coding. Testing is very important, especially for critical project areas like the payment system. So some of my time goes into that. Throughout the day, I handle messages and emails, and if I finish early, I explore new tech or learn something.
- How much time do you spend coding vs in meetings?
Honestly, I prefer written communication for documentation over meetings. The time spent in meetings varies, but I try to reduce it to focus on coding. There's no fixed ratio - I think the frequency of meetings depends on the project's needs.
- How much time do you spend fixing bugs versus developing new features?
It depends on the project stage. For projects in testing, I focus on fixing bugs as they arise. In live projects, customer-reported bugs take priority.
- What’s your mantra to get quality work done daily?
I make sure my environment doesn't have much chaos. Things are organized, and I have certain routines and alarms set for specific tasks.
The most helpful thing is setting my agenda at the start of the day. When I didn't do that, my workdays were chaotic. I'd think about what I needed to get done. But then messages and problems from different people would keep coming in, stretching me thin. Even if I did a lot of work, I didn’t feel like I accomplished much.
Setting priorities at the beginning of the day has helped me a lot. I decide what I'm going to do, and everything else becomes a non-priority.
Time management is an important one too! If I know no one will ping me for the next 4 hours because no meetings are scheduled. I'll turn off notifications, put on music, and get into a flow state to work on particular bits of code. That's when I do my best work.
Tech stack
With so many new tools popping up in the tech world every day, it can be hard to keep track! Can you tell us some specific tools that you swear by? Give us a peek into your tech stack.
1. Hardware Setup
I used to have an extra monitor, but due to recent travel, I've simplified to a MacBook Air. At home, I rely on an HP Omen gaming PC for heavier tasks like machine learning and video projects.
Since I have two laptops, one Windows and one Mac, I've set up a virtual machine in the cloud where I do all my work. I SSH into the cloud server from both computers and have all my projects there. When on the move, I use the MacBook Air due to its excellent battery life.
Regarding keyboards, I recently got a Bronx keyboard which I find very useful for navigating code without relying on the mouse. It can switch between Windows and Mac, so I can use the same keyboard for both.
2. Software
A) Go-to browser
I use Brave as my primary browser.
B) Core work and coding tools
Visual Studio Code (VS Code) for coding. One great thing about VS Code is that I can set it up to work directly with my virtual machine, allowing seamless coding regardless of which device I'm using.
For note-taking, I use Obsidian. Google Sheets and Docs are used for collaboration and documentation
C) Favorite programming language
My primary expertise is in JavaScript, which I find incredibly versatile for various projects. While I may use other languages like Golang, Ruby, or Node.js as needed, JavaScript remains my go-to for its adaptability.
Big companies vs startups
I noticed you’ve worked at both big companies (Zoho) and startups (Apna Klub). Firstly, can you tell me your preference between the two?
Right now, I like working with startups. It's a high-stress environment with a lot of things needed very fast. It's not very chill, and emotions can run high, but it's also kind of fun for me. Maybe later in life, I might prefer corporations more. I did enjoy my experience at Zoho, which was more relaxed.
- How would you compare startups with big tech?
1. Startups
Startups are all about getting the job done, however possible. There's a lot of energy and force behind most efforts. With a small team, everyone knows each other. But this also leads to a high-stress work environment because whatever you do is critical. You are accountable for everything you say and do.
In startups, they might emphasize less on code quality and more on getting things done quickly. Security might take a back seat to speed. Or, if they have automation set up, it could be very easy - you commit your code, and it goes live after some checks.
2. Big companies
Corporations are more process-driven. They put a lot of emphasis on meetings to get many unrelated people to work together effectively. It's slower, with more communication and overhead between teams.
In big companies, you only have to care about exactly what you're writing. If I'm writing a Node.js server and a specific feature, I only have to focus on that. I don't have to worry about deployment or database changes. Those responsibilities are given to other people.
- What are the key qualities of someone who would be a perfect fit for a startup versus big tech?
The main difference is mindset.
If you go into a startup, your goal is to improve your skills. You have to get better and build things because you have to get the job done. No one is going to sit there and teach you anything.
Someone who's a go-getter will fit well into the startup environment. They should be okay with the chaos, stress, and constantly changing priorities. In startups, you have to be okay with your code being entirely deleted because it's not required anymore, as startups are constantly experimenting. Don't get personally attached to your work.
In corporations, you need a different skill set. You need to be able to communicate, manage projects, and handle many people asking for your time. Time management is crucial, as is setting boundaries and communicating your priorities. You can learn a lot in a corporate environment, but you have to take the initiative, as your work is more narrowly focused.
I think If you want an environment that pushes you towards growth - a startup is good because you cannot survive if you don't grow. Your salary depends on the value you provide, and startups can't afford dead weight. They will push you to grow.
That's not to say you can't grow in a corporate environment, but it requires a different skill set. You need to be able to communicate, manage projects, and set boundaries. You can learn a lot if you take the initiative.
Ultimately, you can grow in both environments, but it depends on your mindset and approach. In startups, growth is pushed on you, while in corporations, you have to seek it out yourself to a certain extent.
Navigating a new tech role
- So you’ve been in the industry for almost 8 years now - I’m sure you must have picked up new skills during this time. Can you tell me what was your motivation for upskilling and how did you go about it?
1. First month
For the first month, whether it's a startup or a corporation, you'll mostly focus on figuring out how to get stuff done. They'll give you non-critical tasks like bug fixes so you can get used to the system and processes they follow.
Take this time to learn how to manage tasks, communicate, and do the basic parts of the job.
For folks with more experience - the expectations are higher, and the ramp-up time is shorter. You're expected to know how to communicate, figure things out, and have some project management skills. They might give you a brief orientation, but you're expected to contribute as soon as possible.
2. Next 3 months
Now you'll be executing the project management process yourself. You'll learn how to plan tasks, estimate time, discuss approaches with mentors, and present your plans.
After that, you'll follow the same process as other developers. Though, you might be given more time as you're still learning.
3. 6-12 months
At this stage, you should have a solid understanding of the codebase and the project management processes. You're no longer considered a newcomer, and expectations will be higher.
- If you had to give a KPI to know that you’ve succeeded in each of these phases, what would those be?
1. First month
During the first month, focus on getting the hang of things at work. Keep an eye on how well you're learning about the company's way of doing things and understanding how stuff gets done. Make sure you're getting the basics of the code and getting used to the tools they use.
2. The next 3 months
In the next few months, keep track of how well you're getting to know the code, especially the features you've worked on and how they fit into the bigger picture. Pay attention to how much you're learning from mentors and other resources. Also, check your progress in meeting deadlines and using the company's tech tools effectively.
3. 6-12 months
By the end of your first year, you should feel solid in your area of work. Check how well you know the features you've worked on and how you're handling more responsibilities in that area.
Keep an eye on how you're getting faster and better at doing tasks and using the tech tools. And keep pushing yourself to learn and improve—it's key to long-term growth in your career.
Upskilling in Tech
So you’ve been in the industry for almost 8 years now - I’m sure you must have picked up new skills during this time. Can you tell me what was your motivation for upskilling and how did you go about it?
1. Motivation
For me, software development is not just engineering; it's a creative process. I'm passionate about creating something out of nothing, just by writing code. That's what drives me to learn and upskill.
I learned JavaScript in college because I was interested in building websites. Later, at Zoho, I was fascinated by automation and how I could write code to make things more efficient. I upskill because it helps me achieve my passion for automation and development.
It's also a lot of fun. For example, when I wanted to buy a gaming laptop, I wrote a script to notify me when it came back in stock on Snapdeal. During the COVID-19 pandemic, I built a system to automatically schedule vaccination slots.
2. Learning Approach
I try to expose myself to new things as a part-time job, around 20 hours a week. I usually watch videos about new developments in my field. I also explore new programming languages, like Rust, which offer interesting concepts not found in other languages I've worked with. Even if a new language doesn't directly earn me money, the concepts I learn can often be applied to my current work.
3. Resources
I mostly learn from YouTube, as it has a wealth of information related to software development. Courses can be helpful, but they often become outdated quickly due to the rapidly evolving nature of the field.
I also follow some articles on Medium when they catch my interest. However, a lot of learning happens while trying to solve specific problems. When I google a problem, I often find many people who have solved it in different ways or using different tools. Understanding their approaches and customizing them to my situation is a great learning experience.
Qualities of 10x engineers
I'm sure you've come across your fair share of engineers often labeled as '10x engineers' in your career. What do you think sets these folks apart? Tell us qualities or traits you believe contribute to someone being considered a '10x engineer'?
I believe three things set 10x engineers apart:
→ Understanding the problem: These engineers know that they’re rarely building for themselves. They have an in-depth understanding of their users' problems, are patient, and have the ability to empathize with the user. They ask questions, figure out the key pain points, and then devise a solution. They start with understanding the problem, not the solution.
→ Being open to new perspectives: The mindset they carry is no one is above or below them in tech. Everyone's experience is different, and insights can come from anyone, regardless of their seniority.
→ Having the ability to get things done: When they commit to completing a task within a certain timeframe, they do their best to meet that deadline. This means reaching out for help, gathering information, and learning what they need to know to overcome obstacles.
Great engineers find a way to get the job done, whether through their knowledge, learning on the go, or seeking help from others.
- What advice would you give someone to become a 10x engineer?
→ Focus on becoming experts in your core skill set as quickly as possible.
→ Stay up-to-date with the latest trends in their primary tech.
→ Understand that the fundamentals of programming are similar across languages.
→ Prioritize deepening your expertise in your current stack before branching out to new languages or frameworks.
→ Continuously work on improving their strengths and then address weaknesses.
- How do you think companies can retain these engineers?
Retaining great engineers is very subjective I feel - because different engineers have different needs which makes them stay. I do think it's not just about money, although competitive salaries matter. But let's face it, not every company can afford to pay sky-high wages.
What keeps engineers around is the work itself. It's got to be challenging enough to keep them interested but not so tough that they want to bail. Offering a variety of interesting projects is key to keeping them happy.
Also, other companies are always trying to win over talented engineers with fat paychecks and similar gigs. So, it's important to make your workplace a great place to be. Build a culture where engineers feel valued and appreciated, so they're not tempted to jump ship for a bigger paycheck elsewhere.
In the end, it's a mix of good pay, exciting projects, and a supportive vibe that makes great engineers want to stick around.
Negotiating salaries in tech
I think it’s really important to first start with understanding the expectations for your role and how you fit into them. Then demonstrate how you've met and exceeded those expectations. Finally, prove your ability to learn and adapt to new requirements.
If you've met all the expectations and gone above and beyond, it's hard for them to deny you a higher salary unless their hands are tied.
Factors to consider
→ Consider the role's upper limit, as you won't get a senior developer's salary for a junior position.
→ Research on platforms like Glassdoor and others where people share their salaries for each company.
→ Take into account your current salary, as the industry standard for switching jobs is a 30-40% increase.
→ Assess how valuable you are to the company and if you can break past the generic 30-40% increase based on your ability to get the job done.
- Based on your experience, how do you typically determine when it's time to wrap up negotiations and accept an offer?
It's not a one-size-fits-all situation, as it depends on your circumstances. If you're offered a 30-40% increase, it might be wise to stop there. But, if your current salary is low and the company's ceiling for the role is higher, you can try to negotiate a bit more.
When negotiating, remember that you're talking to a person, not just a company. The words you use, your tone, and the way you communicate all matter. This is going to be the person who’s probably going to sit next to you at the same desk. Interviewers are often looking for someone who will work well with the team, so they want you to be committed and capable.
You can push a little more if you sense they are very interested in what you have to offer, but you need to gauge the dynamics while talking to them. Soft skills play a significant role in these negotiations.
Ultimately, the decision to stop negotiating depends on your situation, the company's budget for the role, and how much they value your skills and potential contributions. It's essential to find a balance between advocating for your worth and not jeopardizing the opportunity altogether.
It's not a one-size-fits-all situation, as it depends on your circumstances. If you're offered a 30-40% increase, it might be wise to stop there. But, if your current salary is low and the company's ceiling for the role is higher, you can try to negotiate a bit more.
When negotiating, remember that you're talking to a person, not just a company. The words you use, your tone, and the way you communicate all matter. This is going to be the person who’s probably going to sit next to you at the same desk. Interviewers are often looking for someone who will work well with the team, so they want you to be committed and capable.
You can push a little more if you sense they are very interested in what you have to offer, but you need to gauge the dynamics while talking to them. Soft skills play a significant role in these negotiations.
Ultimately, the decision to stop negotiating depends on your situation, the company's budget for the role, and how much they value your skills and potential contributions. It's essential to find a balance between advocating for your worth and not jeopardizing the opportunity altogether.
Assessing job offers: Beyond Salary
- How do you assess multiple job offers beyond just the CTC?
When evaluating job offers beyond just the salary, a major factor for me is understanding what kind of experience I truly want and can realistically handle. The startup and corporate environments are vastly different worlds.
If I'm looking to live more of a chill lifestyle - earn a steady paycheck, complete assigned tasks without crazy hustle, and have the flexibility to explore hobbies or travel, then a corporate role would likely suit me better. I'd aim for a company with a relatively lower-stress, stable work culture.
However, if I'm at a stage where I want continual high-intensity growth, to be constantly challenged and pushed to my limits, then a startup is probably the way to go. I'd get thrown into the trenches, dealing with the madness and pivots that come with startup chaos. But that sink-or-swim environment can be amazing for leveling up skills rapidly.
For freshers - I’d say don't get too hung up on the specific tech stack, as any exposure is valuable learning. What I zero in on is their project management processes. A total red flag is vague, unstructured tasks without clear tracking or defined scope. The requirements just keep changing with no system. I'd avoid places like that as it just leads to a nightmare of confusion and low productivity.
So in evaluating offers, it boils down to introspecting on the type of experience I want, assessing if a company's culture and operating style align with that, and ensuring they have structured ways of working. The tech stack is a lower priority for me at this stage.
Assessing job offers: Promotion vs new job
At some point, you or someone you know might have an offer for a new role outside your current company or a promotion internally. How would you decide between the two?
1. Role and responsibilities
Some promotions simply involve taking on more technical depth in a certain area like databases or system design. Others shift you into more of a people management role as a tech lead. The reality is only some great coders enjoy or excel at managing teams. I need to honestly assess if the particular promotion aligns with the type of work I truly enjoy.
2. The work style and level of interaction required
In a tech lead role, I'd be responsible for extracting work from my team - so much more people management. An IC promotion might have me spending more time architecting systems and interfacing frequently with other teams. I have to think about whether I'm a people person who enjoys collaborative problem-solving or if I prefer more heads-down independent work.
3. My current financial situation
If I have significant monetary needs, I may need to prioritize the role with the best compensation, at least in the short term. But if I'm at a stage where money is less of a constraint, I can weigh other factors like work-life balance and job satisfaction higher.
4. Preferences around work arrangement
I quite enjoy the remote setup. But it does bring extra overhead with more meetings needed to compensate for the lack of casual in-person communication. So in deciding between opportunities, I'm evaluating the true nature of the day-to-day work, the collaboration style required, compensation considerations for my current life situation, and very importantly - whether the role will make me excited to show up each day or start dreading work. The right choice is the one that sets me up to grow while also aligning with my personality and working preferences.
Avoiding burnout and maintaining work-life balance
Given that you’ve spent a long time in this fast-paced industry - what strategies do you recommend for avoiding burnout and maintaining a healthy work-life balance?
1. On Causes of Burnout
Feeling burnt out often happens when I have to do necessary tasks outside my domain of expertise, like finance or compliance work for my own company. Burnout stems from constantly trying but failing to achieve desired outcomes. For example, spending a week building a feature that ends up not being needed - that wasted effort mentally drains you.
2. On maintaining work-life balance
Take care of basic health needs - drink enough water, exercise, unplug from work on off days.
On days off, avoid thinking about office work. Code personal projects or learn new things, but give your mind a break from work.
Rigorously maintain work-life boundaries. If you have an 8-hour workday, respect that and don't routinely stay later. Optimize to get more output per hour instead. Set realistic expectations for yourself and your projects. Don't over-promise on ambitious timelines that will require working overtime.
Dedicate off days to true rest, fun activities, and hobbies completely unrelated to your work.