A random assortment of random thoughts (and rants!) from the trenches...
You Know You're In Trouble When...
adding manpower to a late software project makes it later
You Can Make People Productive If...
I think the role of any senior developer, lead, or principal on a project is not to watch over everyone's shoulder and make sure that they are writing good code. I've learned pretty early on that this doesn't work; you can't control how people write code and if you try to, you'll just get your panties in a twist all the time, raise your blood pressure to unhealthy levels, and piss off everyone around you. So then the question is how can you get a group of diverse individuals with a diverse level of experience to write consistently good code?
It's a hard question and one that I'm still trying to answer. However, I've learned a few lessons from my own experiences in working with people:
Writing good code is productive. It becomes easier to maintain, easier to bugfix, easier to ramp up new developers, easier for one developer to take over for another, and it means a generally more pleasant and insightful workday, every day. Which brings us to...
Sound Software Engineering Is Like...
Exercise! Project managers seem to lose this very basic insight when they make the transition from a developer. Like exercise, it's always easier to put in the effort to do it regularly and eat a healthy diet than to wait until you're obese and then start worrying about your health and well-being. Sure, it feels like hard work, waking up at the crack of dawn and going out into the rain/snow/dark, eating granola and oatmeal, skipping the fries and mayonaise, but it's much easier to keep weight off than to lose weight once you're 200lbs overweight!
Likewise, it's always going to be easier to refactor daily as necessary and address glaring structural issues as soon as possible than to let them linger and keep stuffing donuts in your face. It's like carrying around 200lbs of fat: you lose agility, it becomes difficult to move, everything seems to take more effort - even simple things like climbing the stairs becomes a chore. The lesson is to trim the fat as soon as possible; don't let serious structural issues linger -- if there's a better, cleaner, easier way to do something, do it that way. Every excuse you make to keep fat, ugly code around will only make it heavier and harder to maintain.
How To Reinvent The Wheel...
It seems like a pretty common problem: a lead or architect doesn't want to use a library because it's not "mature" enough. What this means, exactly, still baffles me to this day. Mature is such an arbitrary measure that it's hard to figure out when software becomes mature. What this usually leads to is reinventing the wheel (several times over).
When evaluating third party libraries, I really only have a handful or criteria to consider whether I want to use it or not:
That's it. I don't need the Apache software foundation to tell me whether log4net is mature or not. I look at the documentation, I write some test code, I use it and I evaluate it, and I incorporate it once I'm satisfied.
Software Estimation And Baking Cakes...
Fine grained software estimation is most assuredly the biggest waste of everyone's time. Once it comes down to the granularity of man-hours, you know that someone has failed at their job since there is no way to even quantify that level of absurdity. Once you start having meetings about your fine-grained estimates that pull in all of the developers, then you really know that you're FOCKED.
If I handed you a box of cake batter and asked how long it would take you to bake the cake, you'd probably take a look at the directions, read the steps, and estimate how long it would take you to perform all of the steps and add the baking time and come up with 50 minutes. Okay, we start the timer. You're off and cracking eggs and cutting open pouches and what not. But wait, your mother calls and wants to talk about your trip next week. -5 minutes. You open the fridge and find that you're half a stick of butter short so you run to the grocery store. -30 minutes. Oh shoot! You forgot to pre-heat the oven. -5 minutes. Finally, you've got the batter mixed up and ready to bake. The directions say to bake for 40 minutes but you've already used up 40 minutes and only 10 minutes left of your original estimate: now what?
Well, you could turn up the heat, but that'd only serve to singe the outside of the cake while leaving the inside uncooked. You could just bake it for 10 minutes, but your cake would still be uncooked -- but hey, you'd meet your estimate. More likely than not, you'd just bake the cake for 40 minutes and come in 30 minutes late since late, edible cake is better than burnt or mushy cake.
Software estimation is kinda like that (and look, in the case of baking a cake, all of the directions and exact steps are already well defined and spelled out for you -- writing software is rarely so straightforward). It's mostly an exercise in futility once it becomes too granular since there are just too many variables to account for. The answer -- if it must be implemented feature complete -- is that it's going to take as long as it's going to take (and probably longer!). For most non-trival tasks, I feel like the only proper level of granularity is weeks. Don't get me wrong, I'm not saying that you shouldn't estimate, but that you should estimate at the right level of granularity and accept that once you've reached your estimation and the work isn't done, your only real choices are to:
So that's it; feels good after a brain dump!
Remember Me
a@href@title, b, blockquote@cite, em, i, strike, u
newtelligence dasBlog 2.3.9074.18820
This site is a combo blog/portfolio for me, Charles Chen.
Sign In