The Secret Sauce for Resource Allocation in Software Development

Share on facebook
Share on twitter
Share on linkedin
Share on reddit

Run-through

How to Make a Difference with 1-to-1 Meetings

How to Make a Difference with 1-on-1 Meetings

One-on-one meetings are as much a leadership tool as they are a management tool. The main leadership requirement with 1-on-1 meetings involves a desire to make a difference. These meetings can make a GIGANTIC difference if approached properly. While we’ll cover some of the essentials for conducting 1-on-1’s, we’d like to share a few additional perspectives that you may not find elsewhere.

Read More »

As a software engineering manager you’re sort of running a restaurant. If you had some ham, you could have ham and eggs, if you had some eggs. That’s the basics of resource management. But your menu offers sausage, bacon, grits, and blueberry pancakes with REAL Vermont maple syrup. Your customer’s orders need to be served up fast, fresh, hot, and mostly free of bugs. So, let’s go to the kitchen and see how and what you’ve got your chefs (developers) cookin’!

What is Resource Management and Resource Allocation?

Resource Management is the oversight and approval for using company and/or team assets to maintain operations and complete projects or tasks. Assets include money ($), time, people skills, equipment, inventory, infrastructure, automation and other capabilities (training and mentoring). We can cautiously include technical debt as a resource, too.

Resource allocation is concerned with efficient and effective scheduling of resources. A resource allocation plan applies to provisioning of resources to meet organization and team requirements for multiple projects over time. Available resources and requirements frequently change.

It’s all like one very complex, constantly changing equation that you need to predict based on project requirements. Half of the reasons why projects fail owe to inaccurate project requirements:

  • Underestimating requirements leads to shortages (i.e. late delivery, going over budget, failing to meet business requirements).
  • Overestimating project requirements leads to waste (or inefficient allocations preventing additional work).

What are Your Resource Allocation Methods?

There are at least nine different resource allocation methods – but some are not likely to be used to prioritize effort in a software development environment. Let’s focus on the relevant ones:

  1. Command System – The CEO, CTO or another authority prioritizes work.
  2. Market Price – Prioritizing the work of your top paying client.
  3. First-come, First-served – Finish Client A’s project before starting on Client B’s.
  4. Shared equally – Try to divide your client’s work equally or proportionately.
  5. Personal – The client is your Significant Other / Family, etc.

The other methods: contests, majority rule, lottery, and force probably won’t enter the picture for software development.

Methodology here is the way work is prioritized and varies according to the type of team you have. A tech startup working on its own software product will follow the directives of their CEO or CTO. But, over time, all five of these methodologies may impact a software development agency.

The main thing for software engineering managers in agencies to bear in mind is that sometimes priorities change. You might be working on Client A’s project, but then your Sales Team closes on a lucrative project for a high profile client. Adjustments will be needed!

How do you Create a Resource Allocation Plan?

This is a mid-to-high level overview that depends upon knowing your project requirements to even start on a Resource Allocation Plan.
  1. Define project requirements (should include a product road map).
  2. Effort estimate – developer and resource time requirements (see below).
  3. Optimize your current developers and resources to meet project requirements.
  4. Double-check that your developers will be available when needed.
  5. Itemize developer skills and resources you still need.
  6. Create a plan for how you will acquire these remaining skills and resources.
  7. Create contingencies for any resource that may be at risk.
  8. Factor in external dependencies and possible roadblocks.
  9. Keep an eye out for changes while monitoring team and project health.
  10. Post Project Analysis and Retrospective.
Sprint planning is itself a Resource Allocation Plan for specific tasks and a good place to focus on optimizing effort once development begins.

Resource Management for Software Engineering Managers

Developer wages tend to be the single largest expense for the majority of software developers, perhaps 80% or more these days. With the pandemic and lockdowns, even Apple’s software developers really, really, really want to continue working from home. No traffic, no stolen lunches, work in your underwear, no standing in line for coffee or for the bathroom – priceless perks!

Effort Estimations

As with some software development agencies, sometimes clients describe in detail the software they want and leave it to the agency to determine project requirements. In most cases, this is accompanied by a software development cost estimation based upon estimated effort, delivery date, etc.

It’s extremely difficult to simply estimate the cost of a piece of software, but it’s relatively easy to estimate the cost of specific components and features (login screens, social sharing, gps tracking, payment processing, in-app catalog, etc.).

This may still be tricky for new teams, but if you’ve been developing software for different clients, you should have a record of how much time/effort each specific task required. This can be found in your project management software. Prudent engineering managers will keep an itemized menu to make future estimations easier.

Of course, the effort for each component can vary from one project to the next. You still have a range – and can use other project requirements to determine whether it’ll run lower or higher than average.

What is the Most Effective Way to Allocate Resources?

Simply put, you want to assign developers to projects based on their skills and use tools for the tasks they were designed for. With enough effort, a spatula could probably cut a T-bone steak, but it’s designed to flip eggs.

In one of our case studies, a mobile app developer assigned a developer specializing in iOS to work on components for Android. The developer thought he could learn how to use a new set of tools and beef up his Android coding skills on the fly, but that didn’t work out quite so well.

How Does Gitential Help Optimize Allocating Developer Skills?

This is the Secret Sauce in Resource Allocation. What do your developers know and how well do they know it? Can you quantify it at all? Over time, automated software development metrics help managers objectively measure developer skills in specific programming languages. An experienced developer can do in 1-2 hours what may take a novice all day. Knowing Maria can work wonders with React Native but is challenged with C# is information you can use to efficiently allocate her time on a per project basis. You can also use this knowledge to pair her up with Ricky who’s great at C# but is looking to get a better handle on React Native. Scale this up for your entire organization and for over 200 relevant programming languages. Developer skill has a direct impact on code complexity which cascades into inefficiency (code churn, more time to read) and quality issues (less test coverage, harder to debug, etc.). Performance metrics provides you a data-driven way to optimize your team for each project. Assigning tasks and projects according to developer skill improves productivity, efficiency, and quality across your entire pool (team of teams) of developers. When used for pairing code reviews and mentoring, it enhances teamwork, breaks down knowledge silos, and increases your team’s resources and capabilities.

Software Developer Availability

For many software teams, the most challenging aspect of resource management is developer availability. Engineering managers have to handle sick days, vacations, holidays, and other types of leave (maternity, bereavement, military reserve). Turnover among software developers is also a significant issue, doubly so for tech startups, and when hiring new developers, generally. In some organizations, developer time may need to be shared across a few projects. The first tip here is to set up a team calendar accessible to everyone so they can add any planned or anticipated days away. Why Developers Leave offers a comprehensive view into potential turnover triggers. Some turnover can be avoided. Performance analytics provides an early warning that a developer is at risk of leaving. This provides you a chance to convince them to stay. Secondly, always have staffing contingencies ready in advance. This means establishing relations with an IT staffing agency. You want to know their range of candidates, skill levels, hourly rates, and how rapidly they can start. It’s also worth establishing relations with a couple of freelance developers who specialize in areas where you have critical skill shortages.

Knowing the State of Your Developers - Utilization & Burnout

Project health depends on team health. Giving a nod to Neil Young, overloading developers can cause them to burnout and fade away. It’s better to arrange their workload so your developers want to stay. You can’t rely upon developers to come to you and say, “Hey, I’m overloaded.” In some organizations, developers may be tasked to support multiple projects. Gitential helps managers see developer utilization at the individual, team, project, and organization level. Burnout needs to be treated as an occupational hazard. Gitential makes it easy to see how each of your developers is trending. The goal is for developer performance to increase across all metrics, over time. Developers who are being over utilized, however, will tend to show a gradual decrease in productivity and efficiency. It may be necessary from time to time, but shouldn’t be on a sustained basis. It’s natural to call upon your most experienced developers to handle your most complex tasks.

About Gitential

Gitential is an engineering intelligence tool that automates the tracking of all manner of software developer metrics. Gain analytical insight about your team’s productivity, code churn, activity with test repositories, interaction between developers, and more. Please take a moment to check out our free demo – or sign up for a free trial, no credit card is needed. Please take a moment to arrange a free demo – or sign up for a free trial, no credit card is needed.

Did you like our content?

Spread the word

Share on facebook
Share on twitter
Share on linkedin
Share on reddit

Subscribe to Our Newsletter

Don't miss our latest updates.
All About Software Engineering Best Practices, Productivity Measurement, Performance Analytics, Software Team Management and more.

Did you like our content?

Spread the word

Share on facebook
Share on twitter
Share on linkedin
Share on reddit

Subscribe to Our Newsletter

Don't miss our latest updates. All About Software Engineering Best Practices, Productivity Measurement, Performance Analytics, Software Team Management and more.