Sunday, April 1, 2018

Software Quality Metrics

I ran across a forum post asking about ways to track tangible achievements in terms of software development. The original poster complained about the fact that pretty much every tool they can find is based around just spending time on a problem rather than actually checking off solid accomplishments.

I spent enough time writing a response that it seemed worth sharing here:

If you can come up with a good, tangible way to track useful software progress, you could make billions of dollars selling it.

Personally, I have one "Contribute to Github" daily to remind me to do something to give back to open source. And another for spending at least 1 hour a day on a personal project (which is usually something hosted on github).

I'm very careful about tracking time for the latter. Time spent on technical emails asking for advice counts. Time spent scanning mailing lists for responses doesn't (but actually reading any responses and sending back "Thank yous" does).

And then I have a slew of individual TODO items that I'm vaguely trying to use the way I would a project management tool. But that interface seems clunky enough that I haven't actually messed with it in over a year (I'm still working on a single item from that list, really, and it hasn't seemed worth the effort to break it into smaller pieces).

In a lot of ways, it's easier to beat procrastination by focusing on the "process" over the "project." If we focus on things like "I have to accomplish x, y, and z," then our brains will find ways to derail those goals. It's a daunting, complicated thing, and our brains are terrible at that sort of thing. That's a great way to spend a lot of time in front of your computer and accomplishing nothing.

Instead, just decide that you're going to spend x amount of time trying to make some sort of progress on x. The stupid, lazy, really powerful parts of our brains can get behind that and push.

Put in the time. Take a break. Do something to reward yourself. (There's good neuroscience that experts tell me show this really is incredibly effective. Anecdotally, it works pretty well for me).

Lots of people swear by the Pomodoro technique for this. I haven't had much luck taking it to that level of formality (once I get involved in a problem, I can quite happily spend 4 hours on it without noticing).

Deadlines can also be an incredibly effective tool, if you have a meaningful way to measure progress. 

This is actually pretty easy if you're doing something like writing a novel. It's very difficult (back to your original point) to do this in something like a software project.

Measuring things like the number of lines of code changed in a git commit can make you feel good about yourself, although it's very easy to game the system and add in needless garbage. Be sure to give yourself bonus points for lines that have been deleted.

Code that doesn't exist is guaranteed to be bug-free. (Although the code that used to call it might have unexpected problems...measuring lines of code is always a risky idea).

Good luck. Please let us know what you find. This has been one of the biggest pain points of my career.

No comments:

Post a Comment

Thanks for leaving a comment! We love to hear from you!