Skip to content
February 2, 2010 / zlost

Efficient collaborative resource allocation in software engineering

This post was originally a reply to this fragment of advice to less experienced programmers.

Never say “can’t” and never say “that’s a lot of work”.

Instead, say, “I’ll try” and just give a good effort.

I feel like the poster’s intent is noble, but the resulting advice is quite bad in certain scenarios:

Imagine your manager asks you to perform a task that she considers trivial.

  1. What she doesn’t know is that the task will take quite a few hours to get right.
  2. What you don’t know is that it’s of comparatively little value and your time would be better spent working on a new feature (see below), or perhaps streamlining your codebase instead of complicating it with bells and whistles from which your users will garner precious little benefit.

I believe the ability to collaborate openly on this sort of value judgment is something conspicuously absent from too many corporate cultures. Instead, programmers just throw their hands up as if to say “You’re the boss, so I’ll do whatever you want (as long as I get paid).”

This feedback loop must be especially tight for startups, since a startup must allocate its scarce resources efficiently if it wants to stay lean and agile instead of turning into just another enterprise with a lower number of employees and dollars. High productivity focused in the wrong direction is worse than low productivity in the right direction.

In case you run out of useful features, here are some ideas to get you thinking:

  • Make the user experience as effortless as possible
    • Replace full pages loads with ajax for small changes to the page
    • Don’t make the user click twice when he only need to give feedback once. This isn’t the 90s, try to avoid wizards.
  • Implement better abstractions of data shuffling mechanisms as simple, stateless web services.
  • Improve test coverage. NB: simple, stateless web services are easy to test, which is even better if they’re at the core of your app.
  • Add useful, organized logging. Your future self will tip his debugger’s hat to you.
  • More detailed analytics. It’s like farming useful feedback from your users with no effort on their part.

Leave a comment