Archive for July, 2006

July 16th, 2006

Grades vs. That Something Else

by Tim Cull

The New York Times is running a fascinating series of articles comparing the performance of men and women in the post-feminist-movement age. The one I read was about women pulling far ahead of men in school. The article itself is an interesting read, but what I was most interested in was one fact the article mentioned but then didn’t really follow up on:
Even though women beat men consistently in both college grades and number of years in college, men still beat women consistently in starting salaries for their first job out of college.

It’s tempting to simply say that must have to do with discrimination. But while I’m sure discrimination could play some role, I think that can’t be the entire story. What also it points to is the (often forgotten) importance of intangible qualities and networking in a successful career.

Because women were blatantly discriminated against for so long in the workplace, to get ahead and prove they deserved equal treatment they had to concentrate on excelling at objective measures like grades, degrees, sales figures, etc. Success in objective areas tends to be irrefutable and speak for itself so over time men had no choice but to accept women in general as equals.

The article went on at great length about how college men spend 4 hours a day playing video games or drinking beer while their female classmates are burning the midnight oil at the library studying for exams. The women in the article marvelled at how lazy the college men seemed to be.

And yet, male graduates start at higher salaries than female. What if those men weren’t just playing video games? What if without realizing it they’re also building business contacts, kicking around new ideas, or feeding on each other’s imaginations? What if they’re polishing negotiating skills? Or feeding their competitive spirit? They probably don’t even realize it themselves, but maybe all that hanging out is setting them up for better careers.

How much better off would anyone (man or woman) be if they could figure out what exactly about hanging out is useful and extract it, minus the Natural Lite and Grand Theft Auto?

July 9th, 2006

Bridging the Gap, part 3

by Tim Cull

So this third article in the series of long overdue, but here it is: as promised in part 1 and part 2, part 3 reviews different software development methodologies.

How can there be different methodologies? Oh, I must mean like using Make instead of Ant, or using the Sun C compiler instead of gcc, right?

Not at all.

In college, your methodology is pretty much you get an assignment, head down to the lab and start hacking out code until it compiles and meets the assignment’s criteria. That works fine in 1-2 week projects that never need to be extended, reused, or maintained. And where the requirements are well-defined up front and the customer (ie. your professor) is just one person who also happens to be a software person and can communicate in software terminology.

But what about if you have a year-long project, with many different customers who sometimes disagree with each other and wouldn’t know a compiler from a salami sandwich? And what if they want to know on day one, with 100% certainty, how long it will take you to implement the requirements that they haven’t even come up with yet and will probably change anyway?

That is the reality of a professional software project.

Over the years, our profession has organized itself into a few general methodologies for how best to handle these realities:

1) Seat of your pants (ie. none)
This is much more common than most of us will admit. Really, really talented managers and developers can get away with not using any methodology, especially in a small, close-knit company. But lack of methodology quickly leads to disaster when:
–you’re in a large company, or
–you have a history of lack of trust, or actual failure, with your users, or
–your development team is any bigger than, say, two people, or
–even a single person on the project (including the users) is anything less than a world-class, hyper-talented individual.

2) Heavyweight (aka. Big Design Up Front)
For decades, our profession countered the obvious failings of projects with no methodology by throwing lots and lots of, well, methodology at the problem. The overriding assumption with heavyweight methodologies is that change is expensive and gets exponentially more expensive as the project progresses. If you make that assumption, it’s then logical to want to get everything right and laid out at the very beginning of the project in things like requirements documents, functional specifications and technical specifications. In this kind of project, you could easily end up with thousand-page documents describing your system in such minute detail that, in theory, a fifth-grader could implement it.

When most people think of heavyweight processes, they think of the Waterfall process.

As with many philosophies that are great in theory, heavyweight processes tend to fall over when applied to reality. Specifically, these realities:
–Users rarely actually know what they want until they’ve seen something tangible. Then they still don’t know what they want, but they do know exactly what they don’t like in the system you just delivered to them.
–The business environment changes rapidly. What’s valuable to a business at the beginning of a two-year software project could be totally irrelevant at the end of that same two-year project.
–Nearly everyone is really, really bad at estimating work involved in a writing software. And we all get worse (exponentially) the longer the time period we’re trying to estimate over.

For the longest time, we as a profession tended to blame the problems that pop up as a result of these realities on stupid users, or incomplete requirements. We’d find any little deviation from our incredibly cumbersome process and point to it as the reason our software project failed instead of realizing that it was the process itself making the project fail. Finally some smart people started realizing the process was broken and they gave birth to….

3) Lightweight (aka. barely sufficient)
Most lightweight processes in vogue today fall under the Agile banner. But the basic idea is to keep the big picture in mind at all times while delivering a software project: the purpose of business and commercial software is to create value in an organization somewhere for as little cost as feasible. That’s it. And the easiest way to achieve that is to have the people who need the software working as closely as possible with the people who write the software.

No approach is perfect, though. The biggest problem I’ve seen so far on Agile projects is facing this reality:
–The business (especially high-level managers) still want to know with 100% accuracy on day one when the project will be done, even if they don’t yet know what they want.

July 5th, 2006

Getting Rid of Databases

by Tim Cull

I’m on a project at work now to replace an old trading system with a new one that’s orders of magnitude faster. One of the decisions we made early on was to get rid of relational databases and instead use a distributed caching technology like JBoss Cache or Tangosol Coherence. But we’re repeatedly running into some issues with that approach. Fundamentally, I think they can all be boiled down to the fact that we’re using a technology (caching) for a purpose (data storage) that’s different than its original intended use. This isn’t the first time I’ve been on a team that’s made this mistake; at ePit we were trying to use MQSeries as basically a data store, and were trying to use LDAP as basically a relational database. Those weren’t good ideas then, either.

One thing we’ve done well in this project, and I have to credit our adoption of Agile for this, is force ourselves to prove out our assumptions around caching by implementing some real-life functionality. We’ve discovered early that it might not work quite the way we want it to and are starting to explore alternatives like distributed object databases. We’re failing early and cheaply.

Anyway, it’s all been a very interesting exercise for me. Every system I’ve ever developed had a relational database under it, so I’ve had to really adjust my thought process and test my every assumption in this brave new world.

July 5th, 2006

How Do Other People Do It?

by Tim Cull

I’ll tell you right now that this post is going to be pretty whiny.

One thing I always love reading is profiles and biographies of successful people. But lately I’ve come across several that describe people with lives that sound as busy as mine, but manage to do more with them. How do they do it? I read something like “six days after his third child was born, Larry decided it was time to quit his 6-figure paying job in finance to start his own online shoe vending site” and feel totally deflated. There’s got to be something wrong there.

One of the few blogs I keep up on pretty consistently is Tim Bray’s. He just had his second kid around the same time I had my second kid. And he seems like a nice guy (I’ve never met him, though). And he actually keeps up with his blog, stays dialed into various open source communities, travels to conferences, takes vacations, and has a full-time job at Sun. How does he do it? All the other profiles I read at least leave me enough room to assume that they must beat their wives, or neglect their kids, or have mountains of credit card debt, but his story resists even those assumptions.

Anyhow, the kid front is starting to slow down, so I’m hoping to get back to this blog. I’m going to make a couple of changes, though. First, I’m not going to keep strictly to programming stuff and instead will let it range a little more freely. But I still plan to have plenty of tech content.