Tuesday, March 13, 2007

"It's all downhill from here"

This is one of my favorite expressions when I get to one of my favorite times on a project. I can't say much specific about the project I'm working on right now but I can share some general ideas.

I work for a company that makes electronic products. To design these products, we need electronics engineers (the hardware engineers who pick out the parts to use and figure out how the parts will be connected together and to the outside world), firmware engineers (since just about everything we make uses a microprocessor, these are the guys that write the instructions that run the microprocessor which runs the product), mechanical engineers (who design the case or enclosure for the product and any special connectors or support hardware the product may need) and software engineers (our products are mostly used by connecting them to a desktop or laptop computer to start them up, make changes to them or get the information that our product collects). In this particular product, I'm part of the software team. The hardware part is mostly finished and the firmware and mechanical parts are in the works along with the software. It's kind of like building a bridge where you have to build supports up to a certain level to build the bridge up to that level and then work off the bridge to build a higher level of supports to build the next stage of the bridge. Nothing can be completely finished without the other parts coming along at nearly the same pace.

So, I am sitting at my desk with partly finished hardware and firmware and I am supposed to be able to send certain commands to the board and get a certain response back. Specifications are written for each part of the project but, since we've never built exactly this device before, no one is sure how it will really run or what is the best way to do things. As we go along and one method appears to be inefficient, we change the specification just a bit to make things better. So, the specification is just like the supports for building the bridge. You can't build the complete support structure before the bridge starts because the fact of building the bridge will change the area where the supports will be. The trick is to keep everything on as close a similar schedule as possible. I've been attempting to send commands to the board and get a good response for about two weeks with no luck. Part of it was a lack of completely understanding the specification and part of it was the specification not being completed. Also, I am building on software written by someone else based on an earlier version of the specification which has changed. So, yesterday, I finally reached the point where I was able to generate a complete, well formed command which should have gotten a good response from the board but didn't. That's a hard way to end the day and I was in a race at the end of the day to get a good response from the board.

It turned out to be a combination of problems - which is usually the case. Single problems are easy to find and fix. The problems that cause you trouble are when two or three simultaneous simple problems interact to cause a big, honking problem that keeps you up at night and makes you wife and kids afraid to see you arrive home at night. In this case, one piece of hardware had been misconfigured so that it and the board under test were trying to interact at different speeds. Also, the firmware of the board should have been returning a "partially" meaningful response but was not. And finally, the software had been written for an earlier version of the specification which had changed - but the software hadn't. I was able to reconfigure the hardware to talk at the correct speed and I was able to find the problem in the software and fix it. The firmware couldn't be changed (the firmware guys were gone for the day) but that didn't matter if I fixed the hardware and software problems. So, the last thing I did before going home was to send the "Let's start talking and assign me an ID" command and the board sent back the "It's nice to see you and here's your ID" command! Now, since all the other commands will use these same building blocks, I should be able to send any command and get a reasonable response. That's what I'll be working on next.

So, now is the time I say, "It's all downhill from here!" To me this is good. It means I'm no longer struggling up the hill. I've gotten past the hard part, taken in the beautiful view from the top and I'm heading down the hill which is easier. Plus I can see the end of the trek. This is the best part of any project to me. I feel I understand how everything works now and there are no limits to what I can do.

No comments: