Announcement

Tuesday, April 07, 2026

How A Metallurgist ended up in Software Development ??

In 2017, a group of Cummins College students approached me. They were gearing up for the very first Smart India Hackathon and wanted me to mentor their team.
During our chat, I casually mentioned that I had zero formal education in programming and that my degree was in Metallurgy.
I still remember their expressions. 🙂

For context:

I graduated in Metallurgy from COEP and completed my post‑graduation in Materials Science from IIT Powai. I don’t hold a single certificate in computer science. Naturally, people often ask—then how did you end up in software?

The story goes back to 1984.

I was in 8th standard. My friend Sandeep Shiyekar’s father, a professor at Walchand College in Sangli, had access to a newly arrived computer (most likely a BBC Micro). He invited a few of us to see it and offered to teach programming if we were interested.

None of us had a computer at home, so we learned BASIC on a blackboard every Sunday.
Yes—actual programming, written in chalk.

During the school vacation, I visited my cousin Shirish Ranade. He had a Commodore 64 and a Casio PB‑100. That was it—I was hooked. With no YouTube or internet, I learned purely from books and manuals. Read. Experiment. Repeat.

Shirish gave me the PB‑100, and for the next few years I kept pushing its limits. It had just 1 KB of memory, so every program had to fit inside that tiny space. That constraint taught me more about logic and efficiency than any course ever could.

Engineering years: the real acceleration

In my first year of engineering, . I discovered Turbo C and the book “Spirit of C”. I didn’t have a computer, so I wrote programs in a notebook and exchanged ideas with my friend Jayant Walvekar through handwritten letters. Occasionally I went to Shirish's place in Thane and tried out my ideas on his IBM PCs

By second year, thanks to my friend Janmejay Nemade, I got permission to use the computers in the Metallurgy department. By then, programming felt natural. I even completed my BE project in Turbo C—building an “optimum mix” solver for cast‑iron furnace materials to minimize cost. This was 5000 line Turbo C program. Probably a record in COEP at that time.

Published on linkedin on 7th April 2026 

Monday, November 24, 2025

Stop Abusing try/catch. Its Killing Your Productivity

I once joined a consulting project where the team was drowning in bugs. Fixes took 3–5 days, customers were frustrated, and developers felt stuck.

As I reviewed the code, the culprit became obvious: 500+ try/catch blocks scattered everywhere. The mindset was simple -- "It shouldn't crash"

But here’s the irony: crashes are the easiest bugs to fix. They give you a call stack, a direct pointer to the problem. Wrap everything in try/catch, and you don’t prevent crashes—you hide them. The program keeps running in an unstable state, leading to silent data corruption and endless debugging nightmares.

I pushed the team to delete unnecessary try/catch. We went from 500+ blocks to ~50. The impact was immediate: bug turnaround dropped from 3–5 days to just 1 day. Customers were happier, and the team felt empowered again.

Stability doesn't come from hiding crashes. It comes from facing them head-on

Here’s how you can start:

  1. Delete try/catch in private/protected methods. Keep them only in public methods.
  2. Remove catch-all blocks (catch(...), catch(Exception)) everywhere except at the very top of your app.
  3. Replace null checks with proper contracts: @NotNull in Java, assert in C++/others.
  4. When a crash happens (during development or during testing), analyze the call stack and fix it at the highest level possible.

Make these changes and watch your team's debugging speed and delivery timelines skyrocket.

Published on LinkedIN on 24th Nov 2025

Sunday, October 13, 2024

Scale Changes Everything

 Originally Published on LinkedIn on 15th Oct 2024

One lesson I emphasize to my team is "Scale Changes Everything." Solutions that work for tens of items may not work for hundreds, and usually fail for thousands or more. This is a universal rule, not just in software.

Examples Across Contexts

  • Geographical Scale: Solutions that work in small European countries can fail when applied to larger countries like India or China (e.g., BRTS implementation in Pune).
  • Business Growth: Startups and companies often struggle to scale. Moving from tens of employees to 200-300 requires significant changes in ways of working. Growing beyond 1,000 employees necessitates rethinking tools, processes, procedures, and practices in finance, HR, and projects.

Technical Examples

  • Sorting Algorithms:
    • Algorithms for sorting 10 items (e.g., Bubble sort) do not work well for 1,000 items.
    • Algorithms for sorting 1,000 items (e.g., QuickSort) don't perform efficiently for 1 million items.
    • Algorithms for 1 million items (e.g., Merge Sort) may struggle with 1 trillion items.

Software Development Considerations

The question of scale arises at various levels:

  • Microservice vs Monolith:
    For a corporate application used by 200-300 users a day, a microservice architecture might be overkill, like using a Bofors gun to kill a mouse
  • Technology Choices:
    For a small startup with 10 people, using F# for fast development is fine.- However, if you plan to grow to 100 people, F# might be a poor choice since finding 100 developers proficient in F# can be challenging.

**We need a Mindset Shift**

Unfortunately, very few senior developers and software architects consciously think in terms of scale. They often blindly select a "microservice" architecture.

If the justification for a decision is "everyone is using it", then your company has a serious problem.

Wednesday, July 10, 2024

Elevating DevOps: A Journey from novice to Master craftsman

 In the dynamic world of DevOps, the gap between theory and practice can sometimes seem as vast as space itself. Reflecting on my journey through countless interviews with DevOps engineers, a pattern emerges: a disconnect between claimed experience and practical knowledge. It's a concerning trend that sees the essence of DevOps, a craft of precision and innovation, being diluted by superficial engagement.

Rewind to the days before DevOps became the industry buzzword. I was at the helm of creating a comprehensive DevOps platform for Geometric Ltd., integrating both commercial and open-source tools. This experience was more than just 'clicking buttons'; it was about architecting a seamless workflow that propelled projects forward.

For those aspiring to master DevOps, here's a distilled essence of my experience:

  1. Begin with the roots. Watch John Allspaw and Paul Hammond's seminal presentation at the Velocity 2009 conference. Let it be your DevOps genesis, and absorb its insights multiple times.
  2. Dive deep into Version Control Systems (VCS). Whether it's Git, Mercurial, or Subversion, understanding the intricacies of VCS is non-negotiable. They are the backbone of any robust DevOps strategy.
  3. Ensure everything is traceable. From source code to CI/CD configurations, every element should be version-controlled, allowing you to pinpoint changes with precision.
  4. Immerse yourself in the wisdom of pioneers. My recommended reads include 'Release It' by Michael Nygard, 'The Phoenix Project' by Gene Kim, and 'Accelerate' by Gene Kim and Jez Humble.
  5. Learn from the best. Study the engineering blogs of tech giants like Netflix, Google, and Facebook, Uber to stay abreast of cutting-edge practices.

DevOps is not just a role; it's a mindset of continuous improvement and relentless pursuit of excellence. Let's commit to upholding the true spirit of DevOps and nurturing the next generation of software craftsmen. 

Posted on LinkedIn  https://www.linkedin.com/posts/activity-7215942686271238144-7XjI

Wednesday, April 17, 2024

Transforming a Struggling Software Team into a High-Performance Team - Part 3

In this  third installment of our series, "Transforming a Struggling Software Team into a High-Performance Team," we delve into the pivotal third step of our transformation: improving our version control practices.

Our team's journey with Git, took a dramatic turn as we shifted from the somewhat chaotic 'developer branches' to the harmony of a unified 'trunk' based development approach. This strategic move was not just a change in process, but a cultural shift towards collective code ownership and streamlined workflows for a typical small to medium-sized team.

The creation of two  branches, 'develop' and 'bugfix', from the 'main' branch, marked the beginning of a new chapter. Developers merged their individual efforts (i.e. the individual 'developer branches' into the single 'develop' branch, resolving any conflicts along the way, and then bid farewell to their isolated 'developer branches'. This unification meant that all developers were now committing directly to the 'develop' branch, fostering an environment of collaboration and immediate integration.

To ensure a seamless workflow, we introduced critical practices such as syncing with the latest code at the start of the day and post-lunch, as well as pushing changes before breaks. This routine not only kept each developer codebase fresh but also minimized integration headaches.

Our build strategy also saw a transformation with the introduction of a daily build from the 'develop' branch, a QA build from the 'bugfix' branch for our diligent testers, and a customer release build triggered upon merges to the 'main' branch. This structured approach led to a more stable codebase, with integration issues being swiftly identified and rectified during local feature testing.

Join us as I continue to share this journey in the quest to achieve software excellence. Stay tuned for more insights and strategies that can help transform your team from struggling to high-performing.

Elevating our software team's game, we've changed our version control protocols, catapulting code stability to new heights. Developers now unearth and rectify integration snags swiftly through meticulous local feature testing. We've instituted  release naming conventions, build number tracking, and a streamlined hot fix process. This strategic overhaul has slashed the influx of trivial bugs to QA, empowering our engineers to zero in on pivotal feature and behavior anomalies. The result? A seismic reduction in customer-facing bugs, showcasing our commitment to excellence. (P.S. These insights are versatile, meshing seamlessly with any version control system, be it Subversion, Mercurial, or Perforce.)

NOTE :  This article was originally posted on LinkedIn and expanded.




Wednesday, April 03, 2024

Transforming a Struggling Software Team into a High-Performance Team - Part 2

 🚀 Transforming a Struggling Software Team into a High-Performance Team - Part 1 

One Proverb all project managers and tech leads should member is _"Road to Hell is Paved with Good Intentions"._ But in software development, Good Intentions can also lead to a maze of bugs." This is a mantra that every project manager and tech lead should remember. Implementing a policy with good intentions does not guarantee positive outcomes for your project.

Take the common practice of using try/catch blocks in Java and .NET projects. Developers often add these blocks intending to prevent crashes. However, if the catch block merely logs the error and the exception is not properly handled, it can create chaos for the entire team.

Let's dissect a hypothetical scenario to highlight the issue:

x = func1();
y = func2(x);
z = func3(y);

In an ideal world, if  `func1()` throws an exception, neither `func2()` nor `func3()` should be called. But what if a developer wraps `func1()` in a try block followed by an empty catch block? The exception is caught, and the program erroneously proceeds to `func2(x)`, operating on a potentially incorrect or corrupted state of 'x', which could lead to another exception. To "fix" this, another empty catch block is added, and the cycle continues until `func3(y)` crashes.

The real bug, however, likely resides in `func1()`. This means the developer will waste a significant amount of time tracing back to the actual cause of the problem.

As a Tech Lead, by advocating a 'no-crash' policy without proper exception handling, you've inadvertently constructed a 'road to bugfix hell'. It's a cautionary tale that underscores the importance of thoughtful and effective error management in software development. 

Lets get back to our Case study of  "Transforming a Struggling Software Team into a High-Performance Team"

Imagine a codebase, a labyrinth of about 500 try/catch blocks, most leading to dead ends of empty catch blocks. This was the daunting maze the "Struggling Software Team." was working with. Determined to bring order to chaos, I (along with Project Manager and Team lead) championed a cleanup crusade. The result? A leaner, meaner set of 50 catch blocks, each a sentinel effectively guarding against errors, no longer just placeholders but active defenders of code integrity.

The moment of truth came when `func1()` threw an exception. Instead of the usual obfuscation, what emerged was a crystal-clear call stack, pinpointing the 'correct' error. This clarity was win for the developers, project manager and technical lead, This singular fix slashed bug fix times from a sluggish weeks to a swift days.

This narrative isn't unique. Many software teams, with the best intentions, erect barriers to their own success. Intelligent teams risk devolving into dysfunction, not for lack of skill, but from practices that stifle rather than stimulate productivity and quality.

The linchpin in this equation is the project manager and the management team. I've witnessed customers miss out on significant productivity and quality gains simply because these practices weren't taken seriously, weren't enforced. The cost? Not just in subpar productivity and quality, but in the ballooning development costs that inevitably follow.

Join the conversation and share your experiences in transforming software development practices. Let's inspire and learn from each other's journeys.


Tuesday, April 02, 2024

Transforming a Struggling Software Team into a High-Performance Team -Part 1

 NOTE : The short version of this article was published on LinkedIn on 30th March 2024

🚀 Case Study: A Remarkable Turnaround in Software Development

In February 2024, I was approached by a leading Indian Software MNC grappling with significant challenges in one of their project group. The issues were critical: persistent bugs, delayed schedules, and plummeting productivity. The customer dissatisfaction was palpable, with bug reports coming in and the team's fixes lagging behind, taking an average of 3 to 5 days for each bugfix.

The project was not that big, with Java code ranging between 30K to 40K lines. It was clear that a strategic overhaul was necessary.

🔍 My first step was a thorough review of the team's code and development practices. What followed was a series of targeted interventions:

  • Revamping coding practices
  • Integrating a static code analysis tool into the build process
  • Streamlining the development workflow

The results? Within a mere 6 weeks, the turnaround time for bug fixes was reduced to just one day. All critical issues, including a longstanding bug, were resolved. And the most impressive part? It was achieved with the same team, whose potential was unlocked through improved practices and processes, backed by the unwavering support of the Tech Lead and Project Manager.

Throughout my career, I've witnessed this scenario repeatedly: talented and diligent software engineers hamstrung by inadequate coding and development practices. The solution is straightforward yet transformative—refine these practices, and watch the same team perform miracles.

Stay tuned for my upcoming blog article detailing the key practices that can elevate your development team's productivity and quality.

Thursday, March 07, 2024

POSH Compliance or Workplace Safety

Since we started developing #ashure (https://www.ashure.in) and started talking with many companies, I often encounter companies that are only interested in complying with the law for the sake of avoiding penalties or lawsuits. They do not realize that POSH #compliance is not an end in itself, but a means to create a safe and respectful #workplace for all genders.

POSH law compliance is just one aspect of creating a "safe workplace". It does not guarantee that women or other marginalized groups feel comfortable and secure in their work environment. In fact, if there are zero POSH complaints in a company, the company management may feel Great but reason could be that women are too afraid or discouraged to report any incidents of sexual harassment or discrimination. This a false sense of 'achievement'. The HR department may think that they are doing a Great job in "outsourcing" POSH compliance to a consultant who dutifully fills all the necessary forms and policy documents. In reality, they are harming the company. Well, "road to hell is always paved with Good intentions"

On the other hand, if a woman raises a POSH complaint, then it indicates that she feel empowered and supported. It shows that the company has a good work culture and a relatively safe workplace. It also gives the company an opportunity to address the issue and prevent it from escalating or recurring.

I have heard comments from HR team members that promoting and displaying POSH policy and IC members names will invite a flood of complaints, even false ones, especially from the GenZ employees. Frankly This is a misconception and a reflection of their own bias and distrust towards their employees and the workplace culture. GenZ employees are not more likely to make false complaints than any other generation. In fact, GenZ are more emotionally mature and aware of their rights and responsibilities than the millennials.

The companies should not view POSH law compliance as a burden or a threat, but as an opportunity and a benefit. By creating a safe and respectful workplace for all genders, they can enhance their reputation, productivity, retention, and employee satisfaction.

Founders, Management Change your mindset, you will see big difference in your employees. Compliance with POSH law is NOT an expense or cost, It is #investment in your companies future.


#poshcompliance #safeworkplace #workplacesafety #ashure

PS> This post was originally published on LinkedIn

Saturday, September 24, 2022

Ideas on on sessions /courses as Prof of Practce for Chandigarh University

 Sometime back I posted an update on LinkedIn about joining Chandigarh University as Professor of Practice.   

I am joining CHANDIGARH UNIVERSITY Computer Science dept as "Professor of Practice". This is part time. I plan to spend about 2 weeks every semester on university campus. And also want to do some online lectures/workshops. There are no particular time commitments. It more about Industry + Academia partnerships and sharing the experiences of with Students.

I also asked about ideas on sessions/courses that students will be interested in. I received lots of comments and suggestions. Here I am collecting all the ideas/suggestions at one place. Over time, I will keep on posting updates whenever I implement an idea/suggestion.

Nitin's Ideas

  1. Few sessions in current academic topics related to software architecture and design but with sharing of experiences.
  2. A 2 week hands-on workshop for 2nd/3rd year students on "professional software development" starting from using version control, and how to write a spec doc to coding, testing, etc.
  3. A 1 week workshop for student teams who want to participate in hackathons.
  4. Few sessions on diverse topics like 
    • Algorithms in Daily life, 
    • Costliest bugs in history of software, 
    • Women Pioneers in Computer Science, 
    • Basics of Cascading Style Sheets (CSS), 
    • Hidden Life of a Google Search Request 
    • (re)Inventing the Assembly Language.
    • Do/Doing/Done is NOT Kanban
    • Using Version Control Effectively

Ideas from Harish Walke

  1. few topics around "Agile" too! Fundamentals and basics of Agile
    • Typical day or sprint in the life of a Developer
    • built-in Quality and what it means in Agile
    • Scaling agile 
    • Some useful concepts of Value streams, Lean Portfolio, Strategic Themes, WSJF for prioritization, Real life examples of Epic, Capabilities, Features
  2. Topics related DevOps
    • DevOps with CI/CD.
    • TDD, BDD. Different compliances and their inclusion in Features as NFR (Non Functional Requirements)
    • SecDevOps with mindset of "Built-in Security"
  3.  Innovation mindset related
    • Lean Startup, 
    • Design thinking, 
    • Think Wrong (Don't find solutions for the problems that do not exist).h
  4. Use of Tools while doing the course projects
    • Task or backlog management tools
    • version control tools

Ideas from Anirudha Raste

  1. OO eyes!
    Look around you, in your real life to find many OO concepts. People think all OO and other software concepts were 'Created' by software engineers and architects. Whereas, they are already present in real life. Need to see them in software way! Then one will find that software is not so 'alien' to real world.
  2. 'Importance of logging while troubleshooting problems at customer end, where you do not have access to customer's environment, customer data, debugging

Ideas from K K George (KKG)

The importance of unit testing and show them how to measure coverage of the unit tests.

Ideas from Manish Ramrakhiani   

  • Agile principles
  • Rise of Data and related roles in the Data Engineering/Analytics space
  • Sharing some of real successful archicture/design of your favorite projects (Nitin's comment ; I was also thinking on these lines. So probably will do this early)

Ideas from Nikhil Karkare

  • Automation: automating testing, RPA
  • Would sound basic, but using powershell or bash for basic scripting (using awk for example) - (Nitin's comment :  In my opinion, absolutely needed)
  • Using any code editor to its full potential (Visual Studio / Replit)

Ideas from Laxmidhar Gaopande

 Some projects split in small teams to work on for 2-3 months after your sessions and review by making them presentation to you along with all.  (Nitin's comment : CU already have a concept of Project Based Course, where students learn by doing a project rather than attending lectures. Will be good ideas to incorporate these in the same framework)


Ideas from Vivek Gupta

  1. code readability/ maintainability, 
  2. logging/eventing/traceability, log analysis (Nitin's comment : Also suggested by Anirudha Raste)
  3. ease of troubleshooting, 
  4. importance of code reviews, 
  5. threat modeling etc. 

Ideas from Surjit Patra

Go with very basic and core topic like Aniruddha Raste said OO things. But also go 1 level below 
  • "How to realize or relate the software way of thinking to a real problem". 
  • Or How to visualize the problem, is it from outside/ inside. 
  • What is the best approach to find the possible solutions.
  •  How to pick the best one out of it. 
If you have any other ideas, please add in comments

Monday, January 24, 2022

Awake Proning - ऑक्सिजनची पातळी कमी असल्यास करण्याचे प्रथमोपचार

 एंब्युलंसला किंवा पेशंटला हॉस्पीटलला न्यायला वेळ लागत असेल आणि पेशंटचीऑक्सिजनची पातळी कमी होत असेल तर अशावेळी करण्याचे प्रथमोपचार

Awake Proning


Thursday, February 04, 2021

What I realized in 2020

 Last year (2020) was extremely chaotic for everyone. Lots of ups and downs. Financial and work troubles. Challenges on home fronts.

In a way I am somewhat fortunate. Covid impacted me lot less than others. I face relatively less personal hardships during this period. And I was able to help others. Partly because of my consulting work was continuing even though the billing was reduced a lot.

Importance of Friends and Brothers/Sisters

My extended family are the people who I can always rely on. My cousins (Vivek dada, Vikas dada, Veena tai, Sugandha tai, Sulabhatai, Vandana tai, Shrishi dada, Satish dada) and my sister Kirti and her family, my wife's brothers and their families are always there for me. Even though I rarely call them on phone. But there is a sense of comfort that in my mind that they are there for me and my family. This sense of comfort was especially important considering Covid situation.

Covid gave me realization of how many friends I have made in my life. From that point of view, I am probably richer than Mukesh Ambani. School friends from Sangli, Belagali Katta group from Miraj, Friends from COEP (especially B-Annexe group), friends from Geometric days, friends from Smart India Hackathons and friends from Startups and many others. And now I got few new friends from Police and Special Police Officers.


How many things Police Do and are responsible for ??

One of my COEP friends Satish Khandare is an IPS officer. From him, I got to know little more than average about the challenges of Police. However, the life and challenges of a on-the-road Police person are different. Very rarely an average citizen like me, gets to interact with Police and know about their life. My image of police was of hard life but also of stories of corruption and high handedness. DCP Pournima asked me to work with Pune Police (Zone 3). From April 2020, I started working with Special Police Officer/Technical consultant. I got to know police officers like  Sr. PI Gheware, Sr. PI Shelke, Sr. PI Pratibha Joshi as well constables. I worked with them for everything from Covid surveys, migrant registration, covid isolation center for police. I heard stories and had first hand experience of how difficult the work of a Police is. I have seen Police deliver groceries and medicines to elderly, help migrants with food packets, track covid patient connections, stand in heat ensure lockdown. Many times with inadequate safety equipment. 

Large number of Good People are still there

I also asked for help from my friends in my work with Pune Police. The response was amazing. Yogesh Varma, Chandrabhushan Kulkarni, Yateen and Anirudha all responded. My sister Kirti and My daughter Devyani joined these Covid Warrirors. Large number of people including many students responded to call of police and joined as SPOs. People like Milind and Kirti Datar worked on delivering food. People who could not work on ground helped with donations. There are so many inspiring stories of Covid warriors that gives me hope. Hope that India has a bright future.



Tuesday, August 04, 2020

Experience of Contributing to Smart India Hackathon




Talking about my experience of 4 years of Contributing to Smart India Hackathon and trying to summerize it in 4 mins. 


Smart India Hackathon is largest hackathon in the world. In this year's hackathon 60,000+ students participated


Tuesday, December 03, 2019

Where are the 'average engineer students' ?


I am pondering on this question for last 2 months. I will really like to hear from more people.

I work with Smart India Hackathon and was mentor to teams in Smart India Hackathon and Singapore India Hackathon. Here I work students who are enthusiastic and ready to learn. They are ready to experiment, they are confident, they are not afraid to fail initially to succeed later. Its a joy to work with them.

Obviously they are high in demand in job market and command premium for salaries. Recently I was recruiting for my startup and salaries of many of these students do not fit in our budget. Also lot of our work do not require high end talent. We are looking for students good in attitude and programming aptitude but may not be the best. We are also looking for interns.

For internship, we ask students for solve some small programming problems. I got 40+ responses from 2-3 colleges. 35+ students have copy/pasted the code from internet. Come on guys, I am using google since before your birth. I can find from where you copy/pasted your code in 5 mins. I still talked with 3-4 students and realized that they have not taken any efforts to understand the code. They don't want to take any efforts. I have similar experiences of interacting students with few colleges from Pune (not naming the colleges). These students are essentially at the bottom and practically unemployable.

Where did the average students disappear ??? Expected "normal" distribution will mean small set of students at both extremes and large number of average students in middle. However, now we have 'skewed' distribution with really large number of unemployable students at one end and small number of top notch students at another end and nothing in between. How did we land up in such a bad situation ??

Saturday, April 06, 2019

D10X - Starting a new exciting and challenging journey

On this auspicious day of Gudhi Padava (6th April 2019) I am starting a new , exciting, challenging journey with some new friends. D10X is an outsourced product development company.

D10X is founded on 3 key principles 
  • We will make profit when our customer makes money 
  • Quality Products, Delivered Fast at Fair Cost (not always cheap) 
  • Start small, plan and grow as needed.   
It is going to be exciting venture. 

WE ARE HIRING. There are exciting opportunities ahead with different domains and interesting technologies. We are looking for new comers and also few seniors.  If you are interested, contact me.  

#hiringnow, #startupcompany

Saturday, December 15, 2018

Sane Branch Management of Version Control Systems for Teams

[NOTE : This is still a 'draft', please point out mistakes and suggest changes/improvements]
Some time back Nagaraj Mali asked a question about 'best practices for repository branch management' on one of our whatsapp groups. This is commom query. 'bad branching strategy' or 'no strategy about branching' are very common mistakes in project teams. These mistakes can seriously impact the teams productivity and quality. Unfortunately very few manager/scrum masters or tech leads really understand devastating impact of 'bad version control practices'. In this blog, I am attempting to explain my views and logic behind various practices that I recommend.

Mistake : Too many branches


A developer need to understand the difference between a 'branch' and a 'tag'. Many times teams use 'branch' where tag is sufficient. 'branch' is an 'active line' of development. Common practice is product teams is to support 3 previous versions (i.e major releases) for bug fixes and one new release'. For example your current release is Ver10 and you may supporting major Versions9, 8 and 7. Essentially you have 4 'lines of development'. Then you need 4 branches. Ideally you should checkout 'only' the  branch that you are working on. There is no need to checkout all branches. Since 'branches' represent 'live lines of development', once you stop supporting a particular major release, you should 'delete' the branch for that release. Typically you will have 4 to 6 branches and many/many tags.

Mistake : Creating new branch for every minor release


Assume a major release is 'version 9'. Then 'version 9.1' is developed on 'version 9'  branch ONLY. Remember 'Version 9' is the supported major release and 'live development line'. Version 9.1 is usually a 'NOT live development line'. Any code changes/bug fixes for Version 9.1 should be developed in 'Version 9' branch'

Common complaint : We spend long time in merging.

This is another symptom of bad branching and bad practices followed by team. Consider following branch scenarios.

  1. Release branches for past releases

    Lets assume that new releases are developed in 'master' and team is supporting 2 previous release 'Version1' and 'version2'. Now team have done a bug fix in 'Version1'. Obviously customers will expect that same bug fix is available on 'patch release on Version2' and also available when new Version3 becomes available. So every day branches must be merged 'upstream'. i.e. merge Version 1 commits to Verson 2. And merge version 2 commits to 'master'. If you get any merge failure fix them. Daily changes are typically small and can be easily merged. This simple practice ensure that time required to do merges are drastically reduced and bug introduced because of merge problems are almost entirely eliminated.

  2. Feature branches

    Many teams create 'feature' branches for every new feature or bug fix. However, they don't delete the feature branch one the feature development is over. At end of 'feature' development feature branch must be merged into 'master' and then delete the feature branch. It is best to use 'git flow' plugin/workflow for working on feature branches.

    Typical feature branch flow will be 
    • create feature branch from 'master' (so 'parent branch' will be 'master')
    • keep making changes and commiting in feature branch. Its ok to push feature branch.
    • every day merge 'parent branch' to 'feature' branch. This way any changes to 'parent' branch done by other developers are available to you and any conflicting changes are detected early.
    • once the feature is done, merge the 'feature branch' to 'parent branch' (usually 'master'). Since you are regularly merging the 'master' to 'feature', you will not see any conflicts when you merge 'feature' to master. Now delete the feature branch

    In both scenarios 'key' is the regular (preferably every day) merge from 'release branch' to master' or 'master to feature' branch.

Remember It is OK to delete a branch

Remember in version control there is nothing like 'permanent delete'. When a branch is deleted, you will not see it 'branches list'. But that does not mean all the history of such branch is also deleted. Recommended practices is to create a 'tag' from branch and then delete the branch. This will keep the history intact. It will also allow to restore a branch from the tag, if you need to do some critical bug fix in an older (now unsupported) release

Bottomline


Remember 'version control' is 'productivity tool' for the development team and NOT just a backup tool. Learn how to take advantage of the version control system and you will see signficant increase in productivity of your team.  Start by defining policy for 'branch creation/branch deletion and daily merge'.

Thursday, October 11, 2018

Manual Code Review of every single change is OVERRATED

Many software companies have this policy that every change has to be manually reviewed and approved by some peer (or senior) developer either before it is commited or before it is merged in main development branch. This practice is recommended by many software luminaries. However, when implemented in a project/product, I found many practical issues with 100% manual code reviews and reached a conclusion that "manual code review of every single change is OVERRATED"

Over years, I realized that manual code review of every single change is OVERRATED. It does not appreciably reduce post shipment defects but does introduce many inefficiencies in your development process. Manual Code Review of every single change usually have -ve ROI. I find that nobody writes about bad side effects of forcing developers into 100% manual code reviews. Recently I found one article and that triggered me to write this blog post.

So here is the list of problems that I found in 100% Manual Code Review process

Problems in Manual Code Review of every single change

  1.  ROI on Code Review - 
    Is reviewer finding kind bugs in code review such that if they remain undetected will take more efforts than the time spent in Code Review ? If yes, then ROI of Code Review is +ve else ROI of Code Review is -ve.  Most of the Code Reviews have -ve ROI.  
    Reviewer may be a good developer but he may not be really good or may not have an 'eye' for defect. Some years back I did an informal study of 'code review' comments reported in my company's code review system. Majority of the code comments were about 'coding style' or 'comments' or 'naming conventions'. Very rarely a serious bug is detected. Effectively Such code reviews have a '-ve ROI'.
  2. Reviewers time and attention.
    Typically Reviewer is mostly one of the senior developers. He/She also has their own commitments on new feature development. Usually these commitments take priority over code reviews. Hence Code Reviews remain stuck in queue and total feature development time increases unnecessarily (elapsed time from start to feature is delivered in end user's hand).
  3. Team's Most productive developers are 'reviewing' rather than 'writing new code'.
    On the other hand, if Senior developers spend majority of their time doing reviews, then 'most productive developers' are effectively not writing any code. Either case results in lower productivity for the entire team.
  4. Lower developer productivity while fixing bugs reported during code reviews.
    Code review is helps only if review happens within short time writing the code (preferably within a day). However, in general actual review happens after many days. In this time, developer loses the context of code. When finally the code is reviewed and he/she has to fix something in the code, it takes longer because now developer has to 'get in the context' again. Effectively it lowers the developer's productivity again.
Over year's almost every team that I have worked with has made this mistake and effectively reduced the productivity. How do we fix this ? Whats the alternative ?

How to regain the productivity lost by "manually review every code change policy" ?

  1. Institute "Zero Warnings" policy for your code.
    This is easiest and most effective way to eliminate bugs. Every new version of compiler improves in ability to detect potential problems and report them as 'warnings'.  Set your compiler to 'highest warning' level. If you are using Visual Studio, turn on 'report warnings as errors" setting. Fixing warnings is 'practically no-brainer'. Warnings have to fixed immediately. DO NOT wait till end of sprint or end of release to fix warnings.
  2. Take advantage of Static Analysis Tools for your programming language.
    Every programming language now has static analysis tools (linters, tools like Klocwork, Coverity etc). This Wikipedia article will give you a list of static analysis tools. Make static analysis part of your 'CI/CD' pipeline. Make sure that static analysis bugs are fixed within day. DO NOT wait till end of sprint or end of release for fixing static analysis errors.
  3. Identify your critical files and review only those manually.Stop reviewing very single line of change. Identify your critical files (use complexity analysis, analyze version history to find most frequently changed files etc).  Usually 80-20 rule applies 20% are your critical files. Mark those files in system. Any commits in these files should trigger your manual code review process. Manually review these critical files ONLY after warnings and static analysis bugs are fixed.
Development processes/practices followed in a typically software development team usually have serious inefficiencies. By using 'common sense' (rather than following common practices) it is possible to achieve an 'order of magnitude' (2x to 10x) improvement in the team's productivity and delivery quality. It DOES NOT require a change in methodology (like move to Agile) or any new expensive tools. It requires some disciple and taking advantage of many low hanging fruits. The results are usually visible in about 3 months. 

[Shameless Plug]If you want to know how to improve your team's productivity by 2x to 10x, I am available for 'consulting/coaching'.

References

  1. Code Reviews Do Not Find Bugs - How the Current Code Review Best Practice Slows Us Down
  2.  



Saturday, September 01, 2018

Things you should do after joining your first job

This blog post is for my friends who recently graduated and now joined their first job. 


You have now joined a company and started working. Your responsibilities have now changed. You are now an earning member of your family. The habits that you develop in this first year will determine your future (in your career, in your earnings, etc). So what are the first things you need to do ?? 

Given below is a partial list of things that you need to do immediately or start doing regularly.

  1. Buy a medical insurance. 
    You will already be covered in your company's medical insurance or you may be covered in your parent's medical insurance. If you are covered in parents medical insurance, that cover may now be over.  Also it is unlikely that you will stay in the same job. If you change that job, start freelancing, may be between the jobs then you may NOT have medical insurance cover during that period. As you become older, it will be more difficult to get medical insurance. So Buy a Medical Insurance on your own. See if you can get 'family insurance' plan. Add your parents to this insurance.
  2. Start Investing and building your Financial Portfolio
    Don't spend all your salary on parties and malls. Learn the basics of investing in Mutual Funds, Shares and other financial 'instruments'.  Few years later when you want to buy a house, get married, go to honeymoon, do it with your own money. Don't depend on your parents.
    • At bare minimum start creating Fixed or Recurring Deposits in your bank account. 
    • All investment companies like ICICI Direct has short courses  that introduce you to basics of investing. Attend those courses.
    • Register for SIPs (Systematic Investment Plans) for Mutual Funds/Shares. SIPs will allow you to start investing in small amounts but regularly.
  3. Start Investing and Building your Knowledge PortfolioBuilding your knowledge portfolio as more important than building your financial portfolio.Sometimes your company will reimburse some of these expenses. Remember The money you spend on books, courses etc are NOT expenses. They are investments. Invest in learning. These investments pay off many times over.
    • Buy Books. Don't depend on company or other libraries. You must create your own library of favourite books and books critical for your work. For example, if you are in a programmer you must have your copy of 'Code Complete2'
    • Join online courses like Coursera, EdX, Udacity. Pay for those certificates
    • Attend conferences. 
    • Join Professional Associations like ACM, Computer Society of India, Stepin Forum and meet-ups

  4. Start Investing in your Communication Skills and Business Etiquette
    Good communication skills are critical for your career advancement. One of my mentors gave me a critical advice at the start of my career. He said
    "Nitin, what you know is important. But who knows what you know is EQUALLY important"
    "Who knows what you know" gives you opportunities. For that to happen you must be able to clearly articulate your thoughts and ideas.

    • Practice to write good professional emails and documents. Don't write 'bcos, yo, etc' (i.e.typical sms/whatsapp slang) in your official mails, mails to your boss or colleagues.
    • Practice to speak fluently in your mother tongue and in English. Consciously avoid saying 'You know' or 'ya' in every sentence. 
    • Join organization like Toast Masters where you are practice your presentation skills

  5. Learn to deal with A**holes
    You will find some a**holes in every organization. You have to learn to deal with these on your own. Your parents, brothers/sisters etc are not going to help you now. You will encounter 'passive aggressive bosses', 'vining co-workers', people trying to emotionally blackmail you for various reasons/agendas.
  6. Find a Mentor
    Your first team/Manager has a HUGE and disproportionate impact on your career. The habits you develop in your first project/team/job, stay with for life long. Make sure you develop 'Good habits'. Make sure to work in a team/manager who will help you learn and develop the good habits.

    Check this comment from Prashant Kale. I fully agree with this advice

    Do you feel you can reach to the expertise level of your manager/current mentor in 3-4 years? THEN you have 'bad role model'.  Find out someone where you must feel "To reach to level him/her, it will take me 10 years'.  When you find such person, stick with him/her. Stay continuously in touch with him. Meet him/her regularly. Get his/her advice. Discuss your problems/career choices/aspirations openly with them. 
    It is really really difficult to find such Gems. When you find one, make sure you don't ignore or lose them. (NOTE : I was fortunate that I found many such Gems in my initial years in Telco and In Geometric Ltd. It shaped my career. I still keep in touch with my mentors.)
    If you feel your current mentor/team is not adding value to you, change the team (may be even the company). 
If you have any other suggestions to add to this list, please write a comment.

[Update]  I posted this article on LinkedIn. There are many thoughtful comments and advice posted  on this article. Check the replies and suggestions on LinkedIn 

Sunday, September 10, 2017

Recruiting programmers through Hackathon/Techathons from Colleges

Last 2 years in Geometric Ltd. we recruited few freshers through Hackathon/Techathon from I2IT college.. And it worked very well. I believe the student we did not select also got benefited tremendously. I am documenting the idea and logistics and various tips/tricks in the hope that it will help other colleges and companies to implement similar programs.
The whole idea of recruitment Hackathon got a push by a chance meeting with Ms. Aruna Katara. Later I met Aruna and her team with few other members from Geometric Ltd. in I2IT campus. We got such a tremendous response from everyone at I2IT college, that within 3 months of initial discussion we had our first hackathon in I2IT.

Problems in typical Campus/Fresher Recruitment process

Typical campus recruitment happens through (a) short listing through General Intelligence test, (b) a technical interview (c) HR interview. Depending on the company there are additional steps as well. If you pass through all these steps, you get offer letter. However, this process has many flaws/problems in practice.
  • Someone who performs well in General intelligence test may or may not perform well in actual programming/design tasks
  • Technical interviews are many times superficial. Esp. if the student is not from computer science background, then it is difficult to judge his aptitude for programming in interview.
  • Also if the person is introvert, is not fluent/comfortable speaking in English, then he/she may have difficulty in cracking interview (technical or HR). So a really good programmer may flunk in interview and may not get selected.
  • Many times good programmers are not class toppers. So short listing using some cut off percentage based on college exam marks does not work well.
  • It is very difficult to judge if the student will work well in team or not from the interview. Software development is a team activity. Hence it is important to judge student from team work perspective as well. (Group discussions does not really give any idea about how the person will perform in team)

Typical Techathon/Hackthon Recruitment Process that we followed :

  • This process is for one college. All the students studying in final year are eligible to participate in Techathon/Hackathon. Typically its 3 to 6 student per team. If number of teams are high (e.g. more than 20 teams), then some short listing happens through review of hackthon project proposals.
  • Hackthon winners may or may NOT get job offers. Mentors observe participants and record their observations about initiative, knowledge, programming quality, working in team, etc. Job offers are maded based on these observations. There are NO technical interviews or general intelligence or any other tests. Selected candidates go directly for HR interviews. And if selected from HR interviews, get offer letters.
  • Before Hackthon we conduct various sessions for Students so that they can develop their ideas for hackathon. These sessions are conducted by Geometric Ltd. mentors and not outside trainers. For example,
    • Mindmapping - We encouraged students to use mindmap for brainstormng and developing their ideas
    • Basics of User Experience Design
    • Basics of Version Control using Subversion (so that teams can easily coordindate their work)

Logistics of Hackathon :

  • Along with College we identify a 'big enough' Hackathon Area in the college campus. On the day of Hackathon, this area is equipped with tables, power outlets, LAN/WiFi connections, some rest/sleeping arangements. College takes care of these items
  • Geometric Ltd. took care of (a) food arragements (i.e. lunch, dinner, snacks, 24 hour availability of tea/coffee)  (b) T-Shirts for all participants with Geometric Logo (c) Awards for winners and participation certificate for all participants and other misc items. (d) other branding related activities
  • Geometric mentors are present (typically 8 to 10 mentors) through out the event to help participants if they get stuck.
  • College Faculty members are present to help students.
  • Actual Hackthon is a 24 hours Event. We typically start on Friday 6.00pm and we end the Hackathon with Award ceremony etc on Saturday 7.00pm.
    • On Friday 6.00 pm, Hackathon starts with a very short (Max 30 min) inaguration ceremony.
    • We typically have 3 team status updates during hackathon.  (a) Just before dinner on Friday (b) Saturday morning before breakfast (c) Saturday morning before or after Lunch. Status updates are very brieft. Teams have to give a quick update on where they are , if they need help on anything, if any team needs help then a mentor is assigned to that team.
    • Around 3.30/4.00pm on Saturday judging starts. Judges go to every team and see the demo. Team gets 5 to 7 minutes to demo what they have done and there is a brief Q &A.  Powerpoint presentations are NOT allowed.
    • Teams are judged based on innovativeness of of idea, completeness of demo, quality of demo, etc.
    • Around 6.00pm Saturday, award ceremony starts.

Identifying potential candidates for recruitment

  • We create a 'whatsapp' group of Geometric Mentors. During 24 hours Techathon, Mentors continously post their observations about students and teams on this group. Observations are typically related to quality of ideas, team work, programming knowledge ,programming quality and aptitude of specific students etc. 
  • At end of Hackathon, We email the archive of this discussion to all mentors and then delete the whatsapp group.
  • After Hackathon, we ask college to send us the Photographs of each team with names of Team members clearly marked.
  • Using the observations posted on Whatsapp group, we identify pontential candidates. Each mentors shares his opinion,observation and experiences of identified candidates.
  • The names of these candidates and team photographs are cross checked to ensure that there is no mistake. 
  • A final list is prepared and shared with Recruitment Team. The recruitment team then coordindates with Training and Placement office of College for final HR interview and offer process.

Few unique ideas from Geometric Ltd. recruitment Techathon 

  1. Many companies invite 1 or 2 teams from many colleges and then select students from these teams. We decided not to go in that route. Our observation were (a) same 2-3 teams from a college ends up participating in multiple Hackathons.  (b) hence larger student population do not benefit from these events (c) same team participates in multiple hackathons and show the same project in those hackathons, essentially defeating the purpose of hackathon.
  2. With our model, different companies can go to different colleges and do the Hackathon as outlined above, many more students will benefit from it.
  3. Typically Hackathon happens in July/Aug timeframe. The teams can further develop these hackathon projects as their final year projects.
  4. We keep in touch with selected candidates during the next one year. Last 3 years we conduct quarterly Techathons in Geometric Ltd. We invited these selected candidates to participate in our Techathons. Candidates then work with Geometric Teams in our internal Techathon. This one simple idea helped in various ways.
    • we kept in touch with college and students.
    • it created a bond with those candidates.
    • Because Geometric employees closely worked with these candidates in Hackathons, they developed personal connnections with these students.
    • When the studentsjoined Geometric after completing their degrees, It was much easier to place these students in various teams compared to other fresh joinees. Mainly because many Geometric project/product teams already knew about them and were ready to welcome them immediately.

Aknowledgement - 

These Hackathons were enormously successful because of support and cooperation from many people. In case I missed anyone, I am sorry. Feel free to remind me and I will add.
  • Senior Management of Geometric Ltd.
  • Geometric Ltd. Recruitment Team (esp. Sandip Panat, Kamal Dunani) ,
  •  HR team (esp. Rakhi Sinha, Anwesa Sen) 
  • and Very Enthusiastic Techathon Volunteers (Pratik Jain, Sagar Oak, Rajeshwari Purohit, Bhaskar Sinha, Hemant Shah, Ajit Vaze and Many others. It is really difficult to list everyone name here) 
  • I2IT College Faculty and Students (esp. Ms. Aruna Katara, Dr. Vaishali Patil -I2IT Principal, Prof. Ravindra Joshi, Prof. Adesh Patwardhan and his team).


Thursday, August 31, 2017

May be Indian Software Developers are just not good in programming

 Today I was reading an article 'Maybe today’s Navy is just not very good at driving ships' about problems by US Navy in light of two recent ship collisions.


What stuck me the how similar the problems are with the problems faced by the Indian Software Industry.
  1. Compromising on training of new comers (in the name of saving cost) and assuming that they will learn 'on job'. Typically these guys then screw up 'on the job' which has much higher cost. But this cost is never really visible. It remains hidden behind individual project failures/cost.
  2. Project Managers and Team leads afraid to go to seniors/mgmt with anything that might look bad for them. They did everything to protect their own reputation to ensure that they get promotion. 
  3. Environment is not about becoming competent software developer/project manager but about looking out for yourself.
  4. Decisions made for saving money have now “posed more leadership, logistical and administrative problems,” 
  5. (Navy) culture rewards checking the box on qualifications, passing inspections and stacking resumes with career-minded assignments.
For short term company gets 'reduction in cost and hence better profitability'. In Long term company is doomed. (growth stops, good people start leaving, company is sold, etc).

Unfortunately in Indian context this is not just problem of few companies. Its a 'pandemic'.  That is why we (i.e. entire Indian software industry especially small companies) are in BIG trouble.
 
We desparately need lot of Good Passionate Coders. But we also need companies which really really value these passionate programmers.

I cannot do much about companies really giving importance to core coding skills. However, from Sept I will do my bit to develop the next generation of Passionate Programmers. If you want to know how, read about the Concept of CodeGym.

Wednesday, August 09, 2017

Characteristics of Software Technical Expert - As documented by Hemant Shah

Hemant Shah listed these characteristics of a Software Technical Expert in a mail to participants of Accelerated Technical Expert Program. I think this is a great list and forwarded this mail to various other Teams in Geometric Ltd. I am reproducing the list here as it will be great reference to everyone.

(PS - Hemant has uncanny ability to simplify complex ideas to simple core concepts. If you are in GeometricPLM/HCL Technologies, don't miss his sessions) 
 
While Nitin has been articulating the qualities which he wants to see in Techincal Experts,
Here is a list of things which has been compiled.

I understand that it might sound too much of super-human-like. Also most of the things you would already know.

This is just to document things in a single place.

Note that not all of them are unique or mutually exclusive. Some of them might be repetition of already mentioned points, with a different view point.

Technical Expert

  1. A Technical Expert should be able to design a software.
  2. A Technical Expert should be able to implement a software.
  3. A Technical Expert should have a wide-ranging experience.
  4. A Technical Expert should be the go-to person in the team for Technical queries.
  5. A Technical Expert should be able to give Technical Presentations.
  6.  A Technical Expert should be able to make, review, evaluate a Technical Proposal.
  7. A Technical Expert should be able to formulate Technical Guidelines for e.g., Technical Coding Guidelines etc.
  8. A Technical Expert should be able to evaluate a new software and give recommendations.
  9. A Technical Expert should do Technical Bench-marking.
  10. A Technical Expert should be aware of / read technical standards.
  11. A Technical Expert should be aware of / read latest things available in his/her field
  12. A Technical Expert should be member of Technical bodies. 
  13. A Technical Expert should write Technical Blogs.
  14. A Technical Expert should be able to compare and evaluate two software.
  15. A Technical Expert loves challenging problems and attempts at solving them.
  16. A Technical Expert should answer queries which are posted on Technical Forums.
  17. A Technical Expert should take part in Technical Competitions. 
  18. A Technical Expert should be a judge of a Technical Competition. 
  19. A Technical Expert should attend Technical Conferences / Events. 
  20. A Technical Expert should be a Speaker at Technical Conferences / Events. 
  21. A Technical Expert should be able to guide / mentor new comers in the organization and the project team.
  22. A Technical Expert should be able to analyse technical reports / findings.
  23. A Technical Expert should have some preliminary business sense. 
  24. A Technical Expert should be aware of the various tools available in his/her field of expertise, or should be able to find out and figure out.
  25. A Technical Expert should take part in Techathons, Hackathons. 
  26. A Technical Expert should have in-depth knowledge of a particular topic / subject. He / she should be an authority on that subject. A Technical Expert should have broad knowledge of other areas. 
  27. A Technical Expert should have broad knowledge of the various Software Development Processes
  28.  A Technical Expert should be part of the Technical Evaluation / Promotion of Individuals. 
  29. A Technical Expert should improve the efficiency of the Team on Technical
  30. A Technical Expert should share his/her knowledge across multiple domains.
  31. A Technical Expert should share technical information with others.
  32. A Technical Expert should inspire others also to become a Technical Expert.
  33. A Technical Expert should do external Technical Certifications. 
  34. A Technical Expert should be an innovator. 
  35. A Technical Expert actively contributes on Social Media. 
  36. A Technical Expert knows how to build a technical team. 
  37. A Technical Expert challenges his / her peers with technical problems.
  38.  A Technical Expert comes up with other challenging problems. 
  39. A Technical Expert should be a curious person. He / she should be an early adopter of a new technology. 
  40. A Technical Expert comes out with challenging test papers / question papers for the next generation to solve.
  41. A Technical Expert should be able to talk to, articulate things to non-Technical folks like Human Resources, Business, Finance, Sales, etc.
  42. A Technical Expert should be able to simplify complex topics so that other non-technical folks or other technical folks are able to understand and comprehend the complex topics.
  43.  A Technical Expert should be able to take Technical Interviews. 
  44. A Technical Expert should be able to sustain a dialog with other Technical Experts. 
  45. A Technical Expert should be able to teach others about the Technical Skills which he/she has acquired.
  46. 48.  A Technical Expert should be sincere, perseverance, able to express, diplomatic, great inter-personal skills, approachable. 
  47. A Technical Expert should be an avid reader.
  48. A Technical Expert is a Guru.
  49. A Technical Expert is a Final Authority on Technical matters. 
  50. A Technical Expert is a Role Model for others.