Software Development: Key Functional Staff

“People may, but good data never misleads”

Let’s first see what I would want in a team member before going into analyzing one on the basis of data:

My Best Individual Team Member Is:

  • Skilled
    • Fully understands SOLID principles
    • Loves their technology stack
    • Writes great code
    • Writes unit tests
    • Adheres to OOP
    • Understands patterns
    • CI/CD mindset and proficiency in tools for the same
  • Understands quality as well as delivery
  • Hardworking
  • Positive
  • Agile
  • Loves ownership
  • Understands client requirement
  • Well managed
  • Communicative
  • Has team spirit

My Worst Individual Team Member Is:

  • Mediocre developer:
    • Does not follow coding principles
    • Writes unintelligible/cryptic code
    • Does not comment their code
    • Hates the technology they are working in
    • Does not write tests (thinks, it’s tester’s job)
    • Waterfall development mindset
    • Does not understand quality
    • Overshoots  deadlines most of the time
  • Poor communicator
  • Does not want to change
  • Runs away from ownership
  • Not interested in anything
  • Doesn’t respect team

A software development project team usually consists of senior and junior SDE (Software Development Engineer) and SDETs (Software Development Engineers In Testing). Engineers could also be grouped as per their focus area(s) – front end,back end, or full stack.

I would approach evaluation of individuals like so:

Data Driven Evaluation Of The Team

Passive Evaluation (for every individual)
  1. Go through their resume. List down their experiences, skills, future goals. Also note if the experiences, skills, and individual’s future goals align with the projects’ and company’s related requirements.
  2. Go through final project reports of all the completed projects by the individual in last 6-12 months and prepare following matrix:
    1.  Performance level – great, good, average, sub-par, bad
    2. Consistency of performance levels (70%+ is good)
    3. Change adaptability on the basis of diversity of projects undertaken
    4. Code quality consciousness
    5. TDD/BDD/AOP experience and comfort
    6. Positive/negative impact of individual’s contribution on budget and/or delivery of the project
  3. Go through a sample of code (committed in repo, in production or ready for the same) and collect following data:
    1. Complexity of the feature (could simply be a number between 1-10)
    2. Quality of the code
    3. Test coverage
    4. Clarity of style and adherence to company/industry guidelines
    5. Comments/documentation
  4. Considering information gathered in aforesaid sections, observe them in scrum meetings on the basis of following criteria:
    1. Ownership level
    2. Story-wise performance; code quality and velocity
    3. Expertise
    4. Communication
    5. Involvement
    6. CI/CD mindset level
Active Evaluation (For every individual)
  1. Schedule individual meetings with top performers (could be just friendly/informal meeting to avoid any kind of fear of performance evaluation) and gather following information:
    1. SWOT
    2. Source of motivation
    3. Code quality standards at individual level
    4. What are their future goals – near and far
    5. Individual tools and techniques they use to perform well consistently
    6. Would they volunteer to mentor an under performing individual
  2. Schedule individual meetings with worst performers (should be just a friendly/informal meeting to avoid fear) and try to understand following:
    1. SWOT
    2. Run thru the code and try to understand their level of realization about problem in their code?
    3. Have they been aptly communicated about their short comings?
    4. Reason of consistent sub par performance
    5. Understand if it is a work-individual fit problem – management style, technology match, etc.
    6. What do they think are the ways in which they could improve their performance in next X months?
    7. Would they be willing to be mentored by another member of the team?
    8. Suggest some training courses related to weaknesses and threats.

Individuals who have not been performing well should be given a fair chance to improve. Good performers should be encouraged to perform even better.

If someone keeps on performing at sub par level after giving sufficient time to improve, they should be asked to find some better fit out of the team/organization ASAP.

The matter of individual training wholly depends upon company policy. If company provides training resources and bears the expenses, under “fair chance to improve” policy individual should be provided training and reevaluated after designated period. If company does not have a policy of providing training individuals should be guided about how they could improve themselves in the required areas.

7zip Helper Batch File

7zip is an open source archive utility. 7zip has a nice GUI to create basic archive but you need to switch to command line if you want to include/exclude folders. It is boring to type same command repetitively if you have to take zipped backup periodically.

This tiny little batch file (backup.bat) creates password protected 7z archive of the specified folders in the folder where it resides. You don’t type your password in the batch file so you don’t give away the password. You can also specify names of the folder you want to exclude from the archive. As an example, by default, backup.bat archives folders named – Source & doc, and excludes bin,obj, and temp/test folders (see customization section below to know how to change).

Usage

Copy backup.bat file in the folder which has the subfolders you want to archive. Navigate to the folder in explorer and open command prompt in the same folder (shift+right click > Open command prompt here…) . Type backup.bat at the command prompt and follow the instructions. Pay attention to instructions which appear on your screen.

Requirements

7zip (http://www.7-zip.org/)
Powershell (Windows7 up, all versions have powershell by default)
7zip executable path in global path variable
Screenshot (19)

Customize

Following is the default 7zip command in the batch file –

7z.exe a -t7z yyyymmddhhmm_filename.7z Docs source -mhe=on -p%password% -xr!bin -xr!obj -x!temp/test

“Docs Source” specify the two folders – docs and source, to archive. You can add/change folders to include here. “-xr!bin -xr!obj -x!temp/test” specify 3 folders to exclude from archive – bin, obj, and temp/test. “r” switch in obj and bin denotes that bin and obj folder could be anywhere in the folder structure.

Technical Hiring

images

In 2009 I joined an onsite+offshore model software development company. This was my first experience with the offshore environment. The company had just started their operations in India and planned to grow faster. I got into the org as dev lead when it had 3 engineers, 1 designer, and 2 test engineers. Soon after, I was given responsibility to spear-head the company technically, including project delivery and technical hiring. In first 6 months we grew our team to 60 SDE and SDETs and by the end of 12 months we were more than 130. We were primarily doing projects for US clients. Our project ranged from corporate web applications to GIS based systems and QA services.

Though initial screening was done by HR department, technical aspects of the interview and final decision was with me and my team. We typically hired engineers with average 3 years of relevant experience.

This is what went into hiring process:

  • Hiring requirements were raised internally.
  • Requirements usually ranged from 3 to 15 engineers.
  • External agencies informed regarding the requirement.
  • HR received applications from candidates.
  • Applications were shortlisted for preliminary call (40%-50% would get through).
  • HR exec would make calls to shortlisted candidates to set-up initial interview with tech team.
  • 1st round of tech interview would take place on phone (20% would get through).
  • HR exec sets up personal interview for 2nd round of tech interview, usually at company’s office.
  • Our 2nd round tech interviews consisted of a lot of practical white boarding, having following areas of testing:
    • Technical Skills
      • Problem solving (strictly coding)
      • Syntax and semantic understanding
      • Style of coding
      • Structure of solution
      • Understanding of common problems in the domain
      • OOP concepts demonstrated in classes, interfaces, modifiers, methods, properties, events, delegates, etc.
      • Databases, SPs, Indexes, performances, etc.
      • Understanding of IIS, Servers, services, etc.
      • Web dev related stuff – HTML, Javascript, AJAX, JQuery, JSON, XML, etc.
  • Project Management Skills (if requirement was for technical project manager)
    • Team building
    • Project setup – Dev team, test team, dev infra, test infra, etc.
    • Documentation
    • Planning, estimation, delegation, and monitoring
    • Waterfall | SCRUM
    • Client communication
    • Stakeholder collaboration – Arch, Dev, Quality, Deployment, Client, and Top Management
  • Soft Skills
    • Communication
    • Focus
    • Energy
    • Willingness
    • Fit

Only about 5-10 % of total candidates, who applied originally, would get through the final interview and get offer letter.

If you have to fulfill a requirement of 10 engineers, you must get at least 120+ applications.

To fill 100 openings in a year, we screened a whooping 2000+ candidates. I still remember 5-10 senior devs along with HR team would work on many weekends for tech interviews. I will try to asemble the questions we used to ask for technical and managerial rounds and share with you here.

Get hired!