When I started my first job out of college (the one I moved to North Carolina for), things were a little bit chaotic at that company. I was hired in February but didn’t actually start until September, and in the intervening time the project I had been hired for underwent serious revision. I was hired onto one team, and then about a week later they reorged the whole project and I wound up on a different team, as the team I’d been hired for no longer existed. This reorg would turn out to be one of the best things that could have happened to my career.
The reason doesn’t have very much to do with what the teams did; I liked the new thing I was working on and it turned out well for me professionally, but I have no reason to think the old thing would have turned out any worse. The reason is because I wound up working directly alongside a much more experienced engineer who would become both a mentor and a friend to me. His name is Britt.
Because things were so chaotic, I wasn’t really given a lot to do. I had been told to watch VoD (Video on Demand) sessions describing the architecture and technology of the project, but that’s not really my learning style. I tried, but I would always come away from a video more confused than I was when I started watching it. After a while, I complained to Britt that I had nothing to do and the VoDs were killing me.
He gave me an assignment. It wasn’t just busywork, it was a sort of side project he’d been wanting to do for a while but hadn’t had time for. He gave me a rough outline of what he wanted and some people I could talk to if I got stuck and told me to get going.
The project he wanted me to do was to modify an old program he wrote that allowed the user to send arbitrary SCSI commands to an attached SCSI target. The program he wrote only ran on Solaris and used a specific
ioctl to send the SCSI CDB. He wanted me to build an iSCSI backend to the existing frontend that would connect to any iSCSI target port and send arbitrary CDBs. In short, he wanted a general-purpose synthetic SCSI initiator.
End tech sidebar
Maybe I didn’t quite understand what he wanted, or maybe he hadn’t really done enough of his homework to really understand what he was asking for. The truth is probably somewhere in the middle. He told me later that he expected it to take me a couple of days.
Well, I worked on it for weeks. I began getting other work so I would jump on and off as I had the time, but in the end over more than a month I ended up building a program that was much more powerful and full-featured than he had expected.
He never ended up using my program for its original intended purpose. But it turned out there were quite a few people in the company who found they could use something like that.
About six or seven years later, my program was being used by many people across the company. In fact, there were some things it could do that other tools (which the company had purchased for quite a lot of money) couldn’t do. This popularity brought with it some challenges, though. I wrote the program as a new employee fresh out of University, and although I was a talented programmer, I didn’t really know what I was doing. Sometimes the program was awkward to use or didn’t exactly do what it was supposed to do. Professionally, I felt like I could do better. I had a duty to do better.
The most valuable feature of the program was that it did not have to operate sequentially. Nearly every synthetic initiator on the market would send a command and then wait for the result before sending the next command. My program allowed commands to be sent asynchronously, which meant that it was possible to send a command and then send an abort for that same command, or a
LOGICAL UNIT RESET, or a head of queue task. This enabled the testing of so many more features and the exploring of several edge conditions that other tools didn’t really allow us to test.
End tech sidebar
So I convinced my manager to let me take some time to rewrite this program. In the time between creating the initial version and creating the new version, I had become a well-respected expert in my field. Although before I didn’t really understand what I was doing and had to rely on others to explain things to me, now I was the one who explained things to others. Britt telling me to write this program had helped me get there. I learned by doing what I could have never learned from the VoDs.
From what I hear, this program is still in use at that company today, as it’s still the only program that can do what it does.
All this because I was bored and Britt has good ideas.