Stories about Software


The Relationship Between Team Size and Code Quality

Editorial Note: I originally wrote this post for the NDepend blog.  You can check out the original here, at their site.  While you’re there, take a look at NDepend and see how your code stacks up.

Over the last few years, I’ve had occasion to observe lots of software teams.  These teams come in all shapes and sizes, as the saying goes.  And, not surprisingly, they produce output that covers the entire spectrum of software quality.

It would hardly make headline news to cite team members’ collective skill level and training as a prominent factor in determining quality level.  But what else affects it?  Does team size?  Recently, I found myself pondering this during a bit of downtime ahead of a meeting.

Does some team size optimize for quality?  If so, how many people belong on a team?  This line of thinking led me to consider my own experience for examples.

A Case Study in Large Team Dysfunction

Years and years ago, I spent some time with a large team.  For its methodology, this shop unambiguously chose waterfall, though I imagine that, like many such shops, they called it “SDLC” or something like that.  But any way you slice it, requirements and design documents preceded the implementation phase.

In addition to big up front planning, the codebase had little in the way of meaningful abstractions to partition it architecturally.  As a result, you had the perfect incubator for a massive team.  The big up front planning ensured the illusion of appropriate resource allocation.  And then the tangled code base ensured that “illusion” was the best way to describe the notion that people could be assigned tasks where they didn’t severely impact one another much.

On top of all that, the entire software organization had a code review mandate for compliance purposes.  This meant that someone needed to review each line of code committed.  And, absent a better scheme, this generally meant that the longest tenured team members did the reviewing.  The same longest tenured team members that had created an architecture with no meaningful partitioning abstractions.

This cauldron of circumstances boiled up a mess.  Team members bickered over minutiae as code sprawled, rotted, and tangled.  Based solely on this experience, less is more.

Read More


How to Prioritize Bugs on Your To-Do List

Editorial Note: I originally wrote this post for the NDepend blog.  You can check out the original here, at their site.  While you’re there, take a look around at NDepend and explore its new tech debt measurement features.

People frequently ask me questions about code quality.  People also frequently ask me questions about efficiency and productivity.  But it seems we rarely wind up talking about the two together.  How can you most efficiently improve quality via the fixing of bugs.  Or, more specifically, how should you prioritize the list of bugs that you have?

Let me be clear about something up front.  I’m not going to offer you some kind of grand unified scheme of bug prioritization.  If I tried, the attempt would come off as utterly quixotic.  Because software shops, roles, and offerings vary so widely, I cannot address every possible situation.

Instead, I will offer a few different philosophies of prioritization, leaving the execution mechanics up to you.  These should cover most common scenarios that software developers and project managers will encounter.

Maximizing Self Interest

I’ll lead with the scenario probably most common to software developers.  Stop me if this sounds familiar.  The first interaction point you have with a bug is receiving an email from Jira or TFS or Rally or whatever.  From there, you log in, read the details, and check the pre-assigned priority.  You check that because of the bug-fixing algorithm imposed on you by management: fix any priority 1 bugs, or, if you have none of those, any priority 2 bugs, and so on down the line.

In this world, bug fixing becomes a matter of looking after your own self interest.  Prioritizing your own to do list, consequently, becomes simple.  Management and the business have made the important, strategic decisions already and will evaluate you on the basis of quantity of defects fixed.  Thus you should prioritize the easiest to fix first, so that you fix as many as possible.

This may sound cynical to you, but I’m fine with that.  I have a fundamental distaste for the specialization obsession we have that separates fixing and prioritization.  Organizations that freeze technical people out of the strategic discussion of priority reap what they sow.  Robbed of the ability to act in the organization’s best interests, developers should act in their own.  Of course, I would prefer developers participate in the “how do we act in the company’s best interests” discussions.

Read More


Developer Hegemony: The Crazy Idea that Software Developers Should Run Software Development

Well, today we officially launch the book, Developer Hegemony.  I’d like to thank everyone who followed along, offered feedback, bought books, and generally supported the efforts.  I’ve enjoyed the ride and I hope you all love the book.  Also, congratulations to the winners of the Thunderclap raffle: Justin Neff, Jim Wang, and Gintautas Miselis!  I will be sending free copies their way.  Thanks to them and to everyone that participated!

In the final days of writing Developer Hegemony and throughout launch preparation, I wrestled with an elevator pitch.  As regular readers know, you wouldn’t find “brevity” listed on my resume, even if making resumes was something I did.  And so I struggled.  But I think I have it now.

“Why aren’t software developers in charge of the software development industry?  Developer Hegemony explains why not, and it explains how we fix that problem.”

Today, I’ll explain the book by expanding on this elevator pitch a bit.

Who’s In Charge Here, Anyway?

So, if software developers don’t run the industry, who does?  To answer that question, understand the context in which most developers write software.  It happens in the corporate world, which consists of companies shaped like pyramids.


Reminiscent of military organizations, a tree-like chain of command serves as the scaffolding for most companies.  The CEO gives orders to a handful of C-suite members.  These people, in turn, give orders to a larger number of vice presidents, who then give orders to a whole bunch of directors.  The directors then give orders to hordes of managers, who pass those orders down to legions of grunts.  Finally, with the grunts, you arrive at the leaves of the tree and the bottom of the pyramid.

And those leafy grunts write the world’s software, carrying pyramids of management upon their backs.  So who is more important than software developers in the business of software development?  Literally gigantic pyramids of management.  Oh, and you can also toss in some people who technically exist in the same level of the reporting organization but have titles like “analyst” or “project manager.”

So the question shifts from “who is more important than software developers in the business of software development?” to “who isn’t?”

Read More


Rethinking Retirement, Efficiencer Style

Today, I offer post number 7 for Developer Hegemony week.  I had every intention of doing 9 days of posts in a row leading up to launch, but I wound up spending yesterday relaxing and recuperating (not a lot of Sunday traffic anyway).  I just finished up an engagement and had been on the road for weeks straight, finally getting home Friday night.  So I took a day off.

The good news is that even with me taking it easy yesterday, the internet did not.  The Thunderclap campaign reached its goal!  This means that I will now definitely give away 3 free copies of my book.  So signing up now gives you better odds than ever.  

A post about rethinking retirement might seem odd, but I have a method to this madness.  As you contemplate your working career, retirement may not come immediately to mind.  But it certainly looms large over decisions you make during your career, in much the same way that the college admissions process tends to loom large over high school.  You contribute to 401Ks, look at the compound effect of salary negotiations and the like, all with an eye toward retirement.

So let’s dive into the mechanics of normal wage work and retirement a bit today.  But first, I’ll lead in with a quick rationale for what brought this to mind.

Hourly Wage for Book Writing

Because I have some varied business interests, I tend to get politely restrained questions from people with salaried jobs as an exclusive source of income.  People regard direct questions about income quantity as gauche, so they kind of ask how things work in the abstract.  They beat around the bush a bit.

For this reason, I find myself speaking at times to a conceptual hourly wage for, say, writing a book or making a Pluralsight course.  I find this understandable, since wage employees tend to reason about earning income as if all income were wage income.  Understandable, yes.  But it misses the point.  And my explanation for why ties in with retirement and the idea of building what I’ll call “business properties.”

Retirement from Wage Earning, Simply Explained

Okay, so back to retirement.  I’ll start with an oversimplified version of how that works.  Specifically, let’s forget for the moment about any concept of social security, pensions, or investing in markets.  A wage earner spends most of his adult life collecting a paycheck.  He uses some percentage of that paycheck and sets some percentage aside, stuffing it into his mattress.  He continues to do this until he has more stuffed into his mattress than he’ll need before he dies.  At this point, he retires.

For the sake of easy math, let’s assume that this hypothetical person averages $100K per year as a salary throughout his career.  Let’s say that he decides he can live on $50K per year in retirement and that he saves 10% of his salary throughout his life.  If he starts working at 20 and retires at 70, he will have set aside a total of $500K.  This will allow him to live from 70 to 80 before he runs out of money.  So in a strange case of somewhat perverse incentives, he should hope not to live longer than 80 (or he should continue working).

Read More


The Efficiencer’s Guide: Getting Started

You thought Developer Hegemony Week stopped on Friday?  Nah.  Today I give you post 6.  It contains somewhat lighter fare, since it’s the weekend, but the show must go on.  We’re doing really well on the Thunderclap campaign — 83% as of this writing.  But that means I still need 17 more people to do the raffle.  So, please help me out and spend a few seconds signing up!

In the book, I coined this term, Efficiencer.  I also talked about it on the blog this week.  Today, I’d like to offer what I’ll call the efficiencer’s guide (or, at least, the start of it).  I’ve called out a number of idealized behaviors and philosophies, but haven’t given a lot of practical field advice.

For the purposes of the efficiencer’s guide, I’ll assume you work as a salaried software developer in some organization.  This probably describes most of my audience, and it makes for a natural starting point in this journey.  If you’re already a free agent or you don’t write software, don’t worry.  You can still get some info here.  I’m going to include reading materials and links, so I have something for everyone.

Defining Efficiencer

First things first.  I won’t ask you to go do a bunch of homework.  Instead, I’ll define this term again, off the cuff.  I’ve described it in the book, but I invite you all to participate alongside me in kind of an evolutionary definition of the term.

I think of software developers (or engineers or programmers or whatever) as people who collect a salary to write code.  I feel fairly confident that this definition has blown exactly 0 of your minds.  But consider it maybe a bit more literally.  You collect a salary to code… and, that’s it.

Therefore, you don’t worry about business considerations like sales or marketing.  You generally don’t participate in discussions about why you write the code that you do.  Nope, you just show up, get a spec or something, fire up your IDE, and get to work.

The efficiencer, on the other hand, does ask why.  In fact, the efficiencer doesn’t do any work without understanding and approving of the why.  You see, she doesn’t count herself a coder but an automation professional.  She specializes in making you more efficient.  That might mean writing some code, or it might just mean sending you a link to a COTS product that already does what you want.  She doesn’t accept specs or story cards or requirements or anything like that.  She listens to your business goals around cutting cost or increasing revenue, and she decides how that will happen.

Read More