Archive for August, 2008

Fuzzy Front End

In Steve McConnell’s excellent book, Rapid Development, he talks about wasting time during the fuzzy front end. This is the time of a project when you’re waiting for the new specifications to come from product design or marketing or whoever does the up-front design work for your product (or web site, etc.). After a release, especially an intense one, it’s natural to need some slow time. Keeping up a high-intensity pace on a permanent basis leads to rapid burnout, which isn’t very productive in the long term.

So, what can you do and what should you do? Here are some ideas for you next time you run into this time period.

  • Clean up time. Go through your code and find all of the crappy stuff you wrote because you didn’t have time to think it through clearly. Rewrite it the way you really should have.
  • Fix up the buggy back end. How many bugs didn’t you fix at the end of the previous release? Now’s a good time to fix the low hanging fruit or the ones that seemed too risky to attempt just before release.
  • Design time. What would you like to see your system structured like in the future? Can you design it differently to accommodate the expected feature set? Will some new designs make it easier to add new functionality?
  • Toolkit time. Do you have a lot of semi-repetitive or duplicated code in your system? Is it time to take these routines or classes and create a toolkit from them that can be called by the rest of the system?
  • Prototype time. As long as you don’t get too possessive of your new code, can you develop a small prototype for some expected new functionality? If you do, show it to the designers and see if it affects their thoughts on how something might look. I have long thought that the developers of a product can make excellent designers if consulted early and often during the design process. Are your developers actually the designers of your product? Great, but having someone be the overall supervisor of design work can make your product more consistent from a look and feel standpoint and can coordinate possibly redundant development work.

The fuzzy front end doesn’t have to be a waste of time. Your developers can be more productive if they have a clue of what might be coming and what’s expected of them. Making sure that they know that possible functionality isn’t cut in stone will help ensure that time and effort isn’t wasted on completed functionality before the details come out. Setting some clear goals for the fuzzy time can help keep them focused on using the time to their advantage and keep them from going crazy while waiting for the action to begin.

Measurement and Precision

About 15 years ago, I worked for a large engineering software company. While I was attending one of their corporate conferences, I met John, who was instrumental in the development of one of their products. He told me a story about the beginning phases of their new product when they were making architectural decisions. Back then, memory wasn’t the commodity it is now. The product ran on UNIX workstations and you had to be far more conscious of memory consumption and data structure sizes than most applications do today (although we might all be better off if people gave it a bit more consideration). The product worked with Finite Element Analysis (FEA) for analyzing mechanical and structural designs. As you might imagine, this kind of mathematically intensive work could use a lot of numbers and the precision of the numbers would affect both speed and accuracy of the analysis. John was adamant that double precision was required for accuracy, but was overruled by a manager, who was not technically oriented. Months later, when the analysis results were proving to be inaccurate, someone asked who made the precision decision. Someone blamed John, who was understandably quite livid about being blamed for the decision he had fought against.

A few years later, I was working on a solid modeling product for architects. I was mentoring a colleague, Sharon, in the ways of solid modeling and general application development. In order to do some of our calculations, we were using a vector class created by our graphics guy. As such, the vector math was being done in single precision as that’s what was common practice for graphics. As you might guess, when some of our modeling operations came out poorly, I asked Sharon to convert our code to use a double precision vector class. She was sure this was not the problem, but as I was the project leader and her manager, she did it anyway. Lo and behold the problems disappeared and she learned a valuable lesson.

Perhaps you, too, will have to make some decisions like this in your software development. Before you jump to conclusions, especially when it comes to something that’s fundamental to your product, do some experiments on size, speed, and other measurable performance. Err on the side of flexibility, if all other parameters are equal. If your language supports creating your own data type (such as a C++ typedef), you can delay the decision and change it later. If you believe that someone in your group is making the wrong decision, say something. Be sure to say it nicely, but say it and record it for future reference. When the fecal material hits the rotating air circulation device later, and someone picks you as the scapegoat, you’ll be able to say you did what you could. Better still, however, is to prevent the mistake by proving that the decision is incorrect by backing it up with hard data and keeping it objective and not personal.

Immersion

I just returned from Judo Camp yesterday. It’s a week of immersion. The schedule is brutal enough, but adding on an extra class on coaching makes it even more so. There’s a total of 5 hours of mat time, which includes a bit of warmup at the beginning of each of the three sessions. I’m accustomed to practicing only 4.5 hours per week and I’m usually sore during that, so you can imagine what camp must do. Add an uncomfortable mattress, evening socializing time, and an early wake up call - all amounting to massive sleep deprivation - and you have a recipe for true pain. And yes, I pay for the privilege of attending this.
I got home yesterday, said hi to my wife and took a three hour nap. I woke up for a while, had dinner, watched Phelps win his 8th gold medal, then slept another 8 hours.
While not nearly as exhausting, it reminds me of the times that I have attended software conferences in the past. They, too, are days of total immersion in the ideas behind coding. The best part is that you get to stop actually coding for a week and clear your head. Then you get to start thinking about what you’re actually doing. Are you using the latest tools and techniques? Is there a toolkit or add-on library that can help you with what you were doing with reams of your own code?
It’s not just conferences either - books, magazines, and blogs can give you another perspective on what you may be doing that’s less than efficient. Take some time now and then to pick your head up from coding and look around at what you’re doing and how you’re doing it. Go to lunch with your colleagues and manager and see if you can find some improvements to the way you’re working.

Whatchoo Say and Whatchoo Don’t

If you read my post Truth In Advertising, then you know how much I “love” commercials. Advertising is about what you say and don’t say. For example, there are two current commercials that feature bits of songs. The first is a cruise line that plays “Lust for life” by Iggy Pop. They only play the part that says, “Here comes johnny yen again, Got a lust for life, Yeah, a lust for life.” But, that’s only part of the song and actually it’s a mash of two different parts of it. You can see the complete lyrics here: Lust for life. I’ll give you a preview:

Here comes johnny yen again
With the liquor and drugs
And the flesh machine
Hes gonna do another strip tease.
Hey man, whered ya get that lotion?
Ive been hurting since Ive bought the gimmick
About something called love
Yeah, something called love.
Well, thats like hypnotizing chickens.

Why don’t they play that part? Or how about another commercial that plays R.E.M.’s “I am superman”? They play the part that says, “I am superman and I can do anything, I am superman and I know what’s happening.” But, they leave out the next lines:

You don’t really love that guy you make it with now do you?
I know you don’t love that guy cause I can see right through you.

I am I am I am Superman and I know what’s happening.
I am I am I am Superman and I can do anything.

If you go a million miles away I’ll track you down girl.
Trust me when I say I know the pathway to your heart.

I can’t imagine why.

Clearly there are reasons to leave this stuff out of their ads - mainly, they don’t add to the message they want to send. Let me tell you another short story along similar lines, this time related to software. A friend of a friend sent me his resume so that I could point him to some local companies that matched his skill set. Before I did that, I felt compelled to point out a few things about his resume - the main thing being that it was blatantly obvious based on his college graduation date that he was over 60 years old. While age discrimination is illegal, can you prove it if you simply don’t get called in for an interview? Heck, I’ve sent my resume to job listings that practically say, “Bill, this job is tailor-made for you” and never received a phone call.

So, my response was: remove those dates. If he managed to get an interview based on his skills and experience (the important stuff), then someone was bound to notice that he was, shall we say, life experienced. However, he’d have gotten in the door and could then convince them that he was the right person for the job. There’s room on your resume for what you’ve done right in your career. There’s no need to add what you haven’t done right and no need to supply detail about things that are detrimental to you being hired. Your resume is your own advertising brochure and the lyrics to the song about your own life. (Does that sound corny or what?) It’s dishonest to change they lyrics from programmer to CTO, but it’s not dishonest to remove a few details that may prove unflattering. For example, let’s say you got fired from a job a few years ago. Is it dishonest to not put that on your resume? Of course not. There’s no precedent for putting reasons for job departures on your resume. Similarly, while dates of employment may be important to have on your resume (employers are wary of gaps), there’s no reason to let people age you and it’s illegal for a potential employer to ask you your age.

Polish up your personal brochure and have a couple of friends in the business look it over with a critical and constructive eye. Nobody’s resume is perfect, but it should be the best advertisement you can make for the best product - you.

Hard Times

We are living in interesting and confusing times. Gas prices have skyrocketed, home prices are dropping, foreclosures are increasing at an alarming rate, and our fearless leader seems to constantly side with big business over the common guy with a problem. There’s only one thing to do - take matters into your own hands.

For example, let’s say that your company has laid you off or looks like they might do so. You have choices to make. Do you want to be the last one out the door and try to hold on as long as possible? If so, it’s time to prove or remind your boss that you are key to the continued success of your company. Sometimes, however, things are beyond immediate control. If your entire division or group is about to be let go, then convincing your manager that you’re the best developer on your team is pointless. So, what’s the plan.

Any job change is a chance to evaluate. You have the opportunity to evaluate what kind of work you’re doing, what you’d like to be doing, where you live and would like to live, and what aspect of the business you’re involved in. This is a great time to be purposeful, not rash. Unless things are extremely tight financially, you don’t have to accept the first job that comes along. Consider whether you’d like to change the kind of software you’re developing or the industry it serves. Have you been writing embedded military software? Would you like to try commercial off-the-shelf instead? Are you a web developer and want to try writing financial software? Try to find someone who does this kind of thing and have a talk with them about your qualifications and their assessment of their industry and your suitability to it. Make connections through linkedin.com or another networking site.

Finding another job is your new job. Plan your attack and your day around this. Do research on your city or another that you might like to move to. Find companies that you might like to work for. Use corporate web sites in addition to careerbuilder, dice, or indeed.com (a great local company search engine.) Spend time every day doing some research on new possibilities. Chech web sites, newspaper want ads, and your people connections.

Make your resume shine by having some other people critique it. It’s never quite as good as you think it is and can always stand another opinion. Keep in mind that several people will have differing opinions. Use some web sites or books for good examples and ideas to improve your resume.

Inside connections, not Human Resources, are your best ways to enter a company. Use your people network to find someone inside the company that can check internal job boards and put your resume on the hiring manager’s desk. Few things are more hopeless than adding your resume to the electronic stack of an online company job site.

Take your time, evaluate what you want to do, reflect on your desires, but don’t get lazy. It’s easy to get complacent at your job and get surprised by a massive layoff. Keep your eye on the corporate bottom line and listen to the tone of your CEO’s statements (especially the internal ones). If your company is listed on a stock market, dropping prices are a sure sign that layoffs could be on the CEO’s mind, even if your company has a history of never having them. Every time you change jobs you have an opportunity to learn something new, find a better place to work, add new experiences, and meet more great people. Job hunting stinks, but it’s a job you’ve got to do once in a while. Make it a rewarding one. And when you land an interview, be sure to read Pimp My Salary for getting your best offer.