Introduction
Hi Keval, would love to know a bit about your professional background.
Hi, I’m Keval. I've been into web software engineering for around two and a half years. When I started my engineering, I was an electrical engineer
By the time I graduated, COVID came up, and there were more software jobs available, and the entry barriers were low. I started with big companies like TCS and Web Pro, which are mass recruiters. Later, I moved on to startups because I saw more growth and learning opportunities there. My first job was at Big Local Technologies, a fintech company.
After two and a half years, I made a switch, but it didn't turn out very well. I was then looking for jobs and landed up at Six Sense, where I currently work. That's been my journey in software engineering so far.
Day in the life of a software engineer
What does a typical day look like for you as a software engineer?
In startups, there's no typical workday because every day presents new challenges and tasks. It also depends on the company's hierarchy and structure.
When I was in my first fintech company, I was directly reporting to the CTO. Every day, there were new client requirements, issues, and features that needed to be addressed. From 7 AM to 9 AM, I would go through my messages and inbox to gather the rough requirements. From 9 AM to 10:30 AM, I would be on calls, listing up the messages, aggregating tickets and requirements, and finalizing the technical specifications.
At 10:30 AM, I would plan out the day, distribute tasks, and decide what I could handle myself. From 11 AM to 1 PM, I would spend time coding and having discussions with other developers to ensure we were all in sync.
After lunch, from 1 PM to 4 PM or 5 PM, everyone would go into deep coding mode in their own cubicles. Around 4 PM or 5 PM, people would start creating pull requests to merge their code into the company's codebase. This would involve code reviews, either one-on-one or with multiple people, depending on the feature's complexity. We would review the code from multiple angles, such as UI, suitability, security, and platform integration.
Once the development tasks were over, most developers would leave. However, I would stay late to ensure the testing team's rounds were completed successfully before calling it a day.
What’s your mantra to get quality work done daily?
When I started as a software engineer, I realized that constant context-switching wasn't an effective way to work. To address this, I make it clear to others that any concerns they have for tomorrow should be stacked up, and I'll handle them the next day.
The key is to get the priorities sorted out during daily stand-ups or scrum meetings, depending on the company's methodology. It's important to be realistic and understand that no software engineer can complete all the planned tickets in a day. So, I prioritize the tasks based on their importance and urgency.
Once the priorities are set, I organize my calls and sync-ups accordingly to ensure I have uninterrupted time for focused work. When you have that dedicated space and time scheduled, your brain automatically functions accordingly, allowing you to maintain quality and focus on your tasks.
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
In terms of hardware, I was given a MacBook, which comes with great keyboards and mouses. I do use an external mouse occasionally for certain tasks and context switching, but it's not used often.
I find that a bigger screen helps me get more work done, so I use a 27-inch Samsung monitor. Apart from the monitor, mouse, and laptop, I keep my workstation minimal and decluttered to avoid distractions.
2. Software
A. Go-to Browser
I generally use Chrome and Brave as my browsers. While some software developers argue that they are outdated and there are better alternatives available, I choose them because a lot of common users worldwide use Chrome, Brave, and sometimes Safari.
As a developer, I need to work in an environment that closely resembles what my intended customers will be using to access my applications or web content.
B. Core coding tools
For coding, I primarily use Visual Studio Code (VS Code). It has a lot of useful coding plugins and features like IntelliSense, which I find helpful. However, I don't use any extra heavy plugins, as I don't think they're necessary for most coding environments. I do use Git tools, Git PR, and Git CLI plugins for version control and collaboration.
Apart from that, I like to keep my setup relatively vanilla. I also use Pieces, which is an intelligent software development copilot. It's open-source and uses an onboard LLM (Large Language Model) for edge computing, rather than uploading everything to the cloud. This is important to me as an enterprise user, as I have to be cautious about my code being uploaded to the cloud and potentially being accessible to others.
Big Tech vs Startups
I noticed you've only worked in startups until now. Do you prefer them over big companies?
Feedback loops are very important to me as an engineer who's just starting out. In big MNCs, I've observed that the feedback loop is often incomplete. When I develop something today, it might take four months to go into production and reach the end-user base. Even after alpha and beta testing, the complete release cycle can take around eight months.
Although there are feedback systems in place, and I can see the matriculated feedback, it is usually anonymized and lacks the quality and feel that I want to get from a user. If the feedback loop is incomplete in the initial years, I feel that I lose a lot as an engineer.
Startups allow me to complete the feedback loop because of their flat hierarchy.
I can talk directly to the client or to the person who's talking to the client, such as salespeople or the CTO. This direct communication helps me understand what's going on and get valuable feedback.
Another reason I prefer startups is that they are ready to take more risks. For example, the position I currently hold would have required at least five to six years of experience in an MNC. They don't want to make subjective decisions, whereas startups can. If a startup sees that a person has the experience, knowledge, and capacity, they can offer them the position, even if they don't meet the traditional experience requirements. I don't think an MNC can do that.
Navigating a New Tech Role
1. First month
→ Don't try to shine out; instead, focus on absorbing everything, not just in terms of the codebase.
→ Interact with different teams, including the business team, product team, and sales team, as much as possible while you're still new.
→ Understanding the business is more important than just the software, as software is just a medium to deliver a service. Knowing the end client and their requirements will help you make better decisions as a software engineer.
2. Next 3 months
→ Once you have a good grip on the business, dive into the codebase and see what has been done, what could be done, and what can be improved
→ Before suggesting changes, ask questions about why things have been done the way they are. There are usually reasons behind the current setup that may not be visible at first glance.
→ Asking questions will help you understand the nuances of the business, clients, and the environments you're dealing with.
→ Try to ask questions rather than forming opinions right away, as it will help you learn more about the business and the reasoning behind certain decisions.
3. 6-12 months
→ After gaining a good understanding of the codebase and the business, start adding your own flavor to the projects you work on.
→ Suggest improvements and make your own impression, demonstrating that you can handle certain teams or responsibilities.
→ Start taking ownership of specific products or features that you connect with the most.
→ Focus on areas where you can make a significant impact, such as improving code quality, performance, or other aspects that may have been overlooked initially due to the need to ship features quickly.
Establish yourself as a valuable contributor and aim to have ownership of some projects while also contributing to others as a team member.
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
Understanding 80-90% of the discussions happening during scrum meetings, daily standups, or sync-ups. If you can comprehend the majority of what is being discussed, it indicates that you have a good grasp of the business and what is going on within the team and the company.
2. The next 3 months
When given a task, if your initial idea of how to approach it matches 70-80% with the actual process followed, it suggests that you have a good understanding of the codebase, the reasons behind certain decisions, the client's nuances, and the product itself. Having a close match between your estimated approach and the actual implementation signifies that you're in a good phase and have a solid comprehension of the project.
3. 6-12 months
Proactive involvement in the project, such as suggesting strategies, improvements in current processes, and future implementation methods. If you are seen as someone who is needed beyond just typing code and completing assigned tasks, it means you have achieved a significant grip on the product or at least some part of it.
At the end of someone’s first year, what should their pitch to the manager be to ensure a successful appraisal?
It's important to note that the pitch will vary from person to person, depending on their individual strengths and contributions. In my case, I pride myself on simplifying complex logic, decoupling code, and making the codebase more agile and dynamic.
During the first six months, it's unlikely that anyone will make a very significant impact on the codebase, as they are primarily focused on learning about the company and getting acquainted with the project. The company is investing in teaching you during this period, so you may not be providing high-quality work consistently.
However, from the sixth to the twelfth month, when you have a better grip on the project and are proactively suggesting improvements, and making decisions on code structure, features, and user experience, you can measure the impact of your contributions and pitch them to your manager.
To make a compelling case, focus on the following points:
-
Highlight specific suggestions or improvements you made to processes and how they increased efficiency or reduced process time while maintaining quality. Quantify the impact in terms of hours saved or other relevant metrics.
-
Discuss how your contributions enhanced the user experience or helped acquire more users. If possible, provide data on user retention or growth that can be attributed to your work.
-
Demonstrate how your efforts directly impacted the team's performance or the client's satisfaction. This could include examples of how you simplified complex tasks, made the codebase more maintainable, or contributed to the overall success of the project.
- Emphasize the proactive nature of your involvement and how you went beyond just completing assigned tasks. Show that you took initiative, suggested improvements, and actively participated in decision-making processes.
When presenting your case, be specific and provide concrete examples of your contributions and their measurable impact.
Quantify your achievements whenever possible, as this will help your manager understand the value you brought to the team and the company during the latter half of your first year.
Upskilling in Tech
So you’ve been in the industry for over 10 years now - I’m sure you must have picked up new skills during this time. Can you tell me what was the motivation for upskilling and how did you go about it?
1. Motivation
Upskilling is a requirement, and nobody should need motivation or triggers to do it. It's all about curiosity. If you're interested in something, you will be curious enough to know what's new and try it out.
Just like a food blogger who always tries out new restaurants, even if they turn out to be bad, a software developer should be curious enough to try out new things that are making the news. Spend an hour or two on a Sunday creating a proof of concept (POC) to explore the new technology or concept.
If you find it promising, dive deeper into the developer documentation or implement it in a low-risk project. For example, when I was working with React and Next.js started gaining popularity about a year and a half ago, I was curious enough to learn it. I implemented it in a static website at the company, which was risk-free since it wasn't a full-fledged application. This allowed me to understand how Next.js works, its SEO benefits, and how static rendering functions.
If you're not curious enough, upskilling efforts won't be sustainable. If you're doing it out of compulsion, you'll eventually get tired. Motivation and triggers won't be effective in the long run if you lack genuine curiosity.
The key is to be proactive in exploring new technologies, frameworks, or concepts that are gaining traction in the industry. Take the initiative to learn and experiment with them in low-risk environments to gauge their potential and understand how they work.
2. Learning Approach
When it comes to learning a new language or framework, I try to follow a structured learning approach. Initially, I'll go through the free developer documentation and online resources to get a basic understanding of the technology.
Once I realize that the technology could be beneficial to me in the long run, I invest in structured learning programs. As a working professional, I don't have 5-8 hours a day to dedicate to learning, so I need a crisp and focused approach that allows me to make the most of my limited time, usually 2-3 hours per day.
For example, in October 2021, I enrolled in an online MS program called Scaler Academy while continuing my job. I completed the program in March 2024. The structured learning helped me gain a deeper understanding of the software ecosystem, including high-level design (HLD), low-level design (LLD), performance management, and the different technologies used for various application use cases and studies.
When live lectures are not available, I opt for project-based courses on platforms like Udemy. However, I make sure to choose courses that emphasize hands-on learning and practical applications.
Investing in structured learning programs is a personal choice based on cost-benefit analysis and individual budgets. For me, the time saved and the assurance of learning from reliable sources justify the investment.
Qualities of 10x engineers
As engineers progress into higher levels like Staff or Principal roles, technical prowess alone is no longer sufficient.
The truly exceptional engineers develop a powerful blend of technical depth and business acumen that allows them to drive major impact.
On the non-technical side, they cultivate a deep understanding of the business landscape and the industry they operate in. It goes beyond merely building software - they grasp how the product fits into the bigger picture of addressing client needs, allowing them to make well-informed decisions aligned with those overarching goals.
Client interaction becomes a core part of their responsibilities. They take the lead on client onboarding, ensuring smooth adoption, and maintaining high satisfaction levels with the product or service. Navigating the complexities of managing client expectations and addressing their evolving requirements is a skill they hone over years of experience.
What truly sets top engineers apart is their ability to adapt as technologies rapidly evolve. Rather than getting overly specialized in specific tools or frameworks, they emphasize understanding core computing concepts and principles. This strong conceptual foundation enables them to nimbly pivot and quickly get up to speed with emerging technologies as needed.
However, they haven't lost their technical edge either. Architectural decision-making is a key strength. They deeply comprehend the trade-offs involved in scalability, deployment models, and maintainability, and can architect robust systems tailored to the unique use case requirements.
These engineers don't merely utilize tools, they possess an intimate understanding of how they function under the hood. Whether it's component-based architectures like React or Angular, or lower-level systems, their knowledge runs deep, allowing them to make powerful design choices while building resilient software ecosystems.
Continual learning is ingrained into their professional DNA at this level. They actively explore new technologies, experiment with novel tools and frameworks, and constantly expand their skills to stay ahead of the curve.
So in essence, it's that potent combination of high-level technical mastery coupled with advanced business leadership capabilities that truly differentiates the elite engineers as they progress through the higher rungs of the career ladder.
How do you think engineers can become 10x engineers?
As someone who is still in the early stages of their career, I can share what I believe should be done based on my observations and experiences so far.
1. Understand the business
This point cannot be emphasized enough. Understanding the business can be done at any stage of your career, and it's crucial for making a meaningful impact. When you have a deep understanding of the business, your suggestions and contributions will align with the leadership's thinking, as they are also focused on meeting the end client's needs. This alignment will earn you respect, trust, and opportunities within the workspace.
2. Develop a growth mindset
Embrace continuous learning and be open to new challenges. Seek out opportunities to work on different projects, collaborate with experienced team members, and take on responsibilities that push you out of your comfort zone. A growth mindset will help you acquire new skills, broaden your perspective, and adapt to the ever-changing technology landscape.
3. Cultivate strong communication skills:
Effective communication is crucial for success in any professional setting. Work on improving your verbal and written communication skills, especially when it comes to explaining technical concepts to non-technical stakeholders. Being able to clearly articulate your ideas, concerns, and solutions will help you collaborate better with team members, managers, and clients.
4. Focus on problem-solving
Great engineers are skilled problem-solvers. When faced with a challenge, take the time to analyze the problem, break it down into smaller components, and explore different approaches. Develop a systematic problem-solving process that you can apply to various situations, and don't be afraid to ask for help or guidance when needed.
5. Contribute to the community
Engage with the broader engineering community by participating in forums, attending conferences, or contributing to open-source projects. Sharing your knowledge and experiences with others not only helps you grow as an engineer but also allows you to learn from diverse perspectives and stay updated with the latest industry trends.
6. Seek mentorship and provide mentorship
Find mentors within your organization or industry who can guide you, provide valuable insights, and help you navigate your career path. As you progress in your career, make an effort to mentor junior engineers and share your knowledge with them. Fostering a culture of mentorship and knowledge-sharing will contribute to your personal growth and the overall growth of your team.
Negotiating salaries in Tech
When it comes to salary negotiations, especially in the context of startups, I believe it's crucial to focus on the value you deliver rather than solely relying on industry standards. Startup roles often extend beyond their typical definitions, and as an engineer, you might find yourself wearing multiple hats – managing deployments, coordinating with other teams, handling DevOps tasks, or even working with Scrum masters on client delivery schedules. By highlighting these additional responsibilities and the unique skill set you bring to the table, you can better justify your compensation expectations.
My approach is tailored to the company I'm negotiating with. Startups often have different budgets and constraints compared to large MNCs, so quoting industry standards might not be the most effective strategy. Instead, I focus on clearly communicating the value I will deliver and how it aligns with the company's needs and goals. This resonates better with startups, as they're typically more interested in the tangible impact you can create.
When presenting my desired compensation, I make sure to provide a clear justification. I explain how my skills, experience, and the specific responsibilities I'll be taking on warrant the compensation I'm seeking. I back it up with concrete examples and data points to support my case, making it easier for the startup to understand the rationale behind my expectations.
It's also important to understand the company's context. Startups often have unique hiring needs and may require new employees to start immediately. Being aware of their urgency and budget constraints helps me navigate the negotiation process more effectively. It ultimately comes down to finding a balance between my tipping point and what the company can realistically offer.
Throughout the conversation, I engage in candid and transparent discussions. Remember, I'm not just negotiating with a company but with the people I'll be working with closely. Building a rapport and demonstrating my enthusiasm for contributing to the company's success can go a long way.
And finally, I remain flexible and open to alternative forms of compensation. While startups may not always be able to meet my desired salary, they might offer other incentives like equity, additional benefits, or opportunities for growth and leadership. I consider the total package and how it aligns with my long-term career goals before making a decision.
Assessing Job Offers: Beyond Salary
How do you assess multiple job offers beyond just the CTC?
One key aspect is the maturity and experience level of the teams I'd be working with at each company.
I place a high value on joining a mature, seasoned team that can provide strong guidance, mentorship, and opportunities for collaborative learning.
Their track record of successful project deliveries and the overall team dynamics play a big role in my decision.
Another crucial consideration is the business risk associated with each company. I assess the stability of the industry they operate in, their market position, funding situation, and long-term viability. A more established business with a proven model often translates to greater job security and potential for sustained growth over the years. You don't want to join a sinking ship, regardless of the initial compensation.
Learning and skill development are also paramount for me. I'm always on the lookout for roles that will challenge me, expose me to new technologies, and allow me to get hands-on with the core aspects of the company's business. When you're involved in a company's bread and butter offerings, the learning curve is exponentially steeper.
Tied to that is the scope for career advancement and upward mobility within the organization. I evaluate the company culture, its philosophy around promoting from within, and the availability of leadership positions I could potentially grow into. A workplace that actively nurtures employee growth and has a clear path for career progression becomes really attractive.
Beyond just the role itself, I reflect on how well each opportunity aligns with my personal goals and values. The company's mission, work culture, emphasis on work-life balance, and the overall impact I can create through my work - are factors that deeply resonate with me and impact my long-term fulfillment.
Finally, I consider aspects like location and the lifestyle impact of each option. While paychecks may be similar, the cost of living, commute times, proximity to family, and access to amenities can vastly affect my overall quality of life. These peripheral elements can be decisive factors when offers are closely matched.
So as you can see, while compensation is definitely important, I holistically evaluate multiple dimensions before making my choice. I'm playing the long game here, so I have to be judicious about picking the opportunity that sets me up for sustained career growth and personal satisfaction in the years ahead.
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?
You know, deciding between a promotion at my current company versus an external job offer is rarely a straightforward call. There are quite a few additional factors that come into play compared to weighing two new opportunities.
First off, I think about where I'm at in my career journey. If I'm still in those initial five years post-college, I actually lean towards taking the external offer. Early on, making a couple of job switches exposes you to diverse company cultures, management philosophies, and ways of operating. That breadth of experience is invaluable for developing into a truly well-rounded professional.
However, if I've been at my current gig for many years and have steadily climbed the ranks, the promotion may start feeling like a ceiling. Companies tend to have limited scope for advancing beyond a point, especially if you joined at a junior level. If I feel I've showcased my full range of skills without many novel challenges remaining, an external role becomes really enticing.
Speaking of challenges, I thoroughly assess the learning potential in both options. Will the promotion just be putting old wine in a new bottle? Or does it genuinely open up new domains, responsibilities, and tech exposure aligned with my growth goals? I weigh that against the curve I could be on by joining a completely new setup.
Company stability is another big factor on my radar. I look at the financial performance, market positioning, and future roadmap of my current firm versus the external one. A promotion at an established, growing organization can offer more long-term security and opportunities versus the uncertain prospects at a risky startup for example.
Work-life balance and culture fit are also extremely important to me at this stage. I reflect on whether the added scope with a promotion would negatively impact my current lifestyle and personal priorities. The work culture and expectations at the external option could potentially be a better fit.
Compensation-wise, I do a comprehensive comparison looking at salary, bonuses, stocks, benefits like healthcare, and 401ks - the full package. But I don't let the numbers alone sway me if other factors are not aligned.
Finally, I consider the professional relationships and network I've painstakingly built over the years at my current company. A promotion allows me to further nurture those bonds and leverage my rapport with valued mentors. Although, an external move also provides opportunities to expand my circle.
So in the end, it's a highly personalized analysis weighing the unique factors of each specific situation. There's no one-size-fits-all approach. I map each option against my overarching career aspirations and personal principles to determine the path that will lead to maximum growth and fulfillment long term.
Navigating Layoffs
The past year has been really tough for engineers facing layoffs. Did anyone in your circle get laid off in the last year?
Yes, I was actually laid off myself. I joined a startup after leaving my previous company for better opportunities. However, things didn't work out on that project, so while I resigned on paper, it felt more like a layoff since I didn't willingly leave expecting that outcome for my career. Times have been difficult overall, especially for those in more junior roles which are being phased out by companies.
If you don't deeply understand the business and provide value beyond just coding, most software firms won't have use for you. They prefer automating those roles.
There were multiple impacts I had to deal with. First, my career progression completely halted because I wasn't gaining any new experience as the industry kept evolving. I also realized companies are very eager to hire people who are already employed elsewhere, often with higher compensation, rather than someone immediately available with experience. The hiring teams seem to take the "safe" route for unclear reasons.
Financially, there were obvious setbacks with no income against my regular expenses. But beyond that, it was a huge hit to my mindset and self-confidence. Being unemployed negatively impacts everyone. The job search itself is more grueling than working, but you don't get rewarded for it. You apply to hundreds of roles, go through 20-30 interviews, and still get nothing. Dealing with that repeated heartbreak while finding motivation to continue is extremely difficult.
However, not getting a job offer isn't the end. When employed and looking to switch, you don't give as many interviews since your income and career aren't disrupted - you're just seeking incremental improvement. But when jobless, each interview feels immensely higher stakes.
Do you have any advice for an ideal job search strategy for engineers going through a layoff right now?
First, be honest about the reasons you were laid off. Initially, I was afraid to tell people I was laid off for the first couple of months. I would say I resigned, which was technically true based on my resignation letter, however, that made my story less believable to HR professionals who can often sense when someone isn't being fully truthful.
Once I started being upfront that I was laid off, rather than trying to obscure that fact, I had more success. HR teams can tell when you're hiding something or unable to accept your faults in the situation. It's better to be transparent about being laid off.
Additionally, don't downplay the conditions around why you left your previous role and are currently jobless. Trying to gloss over that raises red flags that you're hiding something. Instead, accept responsibility for any faults on your part that contributed to the layoff. Assure them you are working to improve in those areas.
The key is to fail fast in realizing you need to be fully honest and own your side of things. Don't let ego or shame prevent you from being upfront - HR teams will respect your self-awareness more.
Transparency and accountability can go a long way in an effective job search after a layoff.
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?
I avoid unplanned calls. I make it a very strict habit to communicate clearly to my colleagues and people working with me so that I don't take unplanned calls. I'm open to it in case of emergencies or if someone needs a quick 2-minute chat while I'm working. But if the call is going to be more than 5 minutes, it needs to be scheduled in advance, preferably the day before.
The reason this helps is that unplanned calls often lead to unplanned work. When you plan to finish work at 5 or 6 PM, these unplanned tasks can keep you working until 8 or 9 PM. So, I try to avoid unplanned calls as much as possible.
When you follow this practice for yourself and your team, you give everyone a better work-life balance. In turn, your team also values your work-life balance.
What do you enjoy doing outside of work?
To be honest, I'm kind of a lazy person. But I do enjoy swimming from time to time, and I like going on short weekend trips. Those are my main hobbies and ways to unwind.
I'm not a very artistic person, so I don't have hobbies like drawing or painting. I do enjoy watching movies and Netflix, though.
My biggest way to recharge is through sleep. I make sure to get enough rest, especially on lazy Saturdays and Sundays. That's how I spend my weekends and recover from the workweek.