The Situation: Crisis, Opportunity, and Software Engineering as a Specialty

24 May 2013

Original Blogger tags: The Situation 2013

Nothing will test you, baffle you, and frustrate you like a period of unemployment. It’s definitely one of those crises-slash-opportunities. I’ve had this tendency to see (and write about) only the “crisis” part. But it’s honestly just now really starting to dawn on me that there is an opportunity aspect of this. I mean, I’ve known this intellectually, but it’s been hard to feel it. I think I’m finally starting to feel it. And that presents, oddly, another crisis.

Today is a gorgeous spring day. Our neighborhood is this quiet, walkable boulevard with friendly neighbors, filled with flowering trees. I’m in a gorgeous old house. But at the same time this place is an economic shithole, in the grip of a terrible recession. A mile from her is one of the highest-crime neighborhoods in the country. There are hundreds of houses standing empty with foreclosure notices on the doors. It’s kind of a mind-fuck, really, the disjunction between the apparent wealth and beauty here and the poverty behind the facade — which, right now, is starting to include my own. This place looks like an opportunity, but it’s actually mostly a crisis.

We’re thinking very hard about whether we will have to leave Saginaw. After 3 years here, the kids have settled in, and made friends, and we’ve started to establish a rhythm and pattern to life here. We’ve made improvements to our house. We’ve put money and love into our gardens.

I don’t want to go. I want this to work out. We chose this place, to be close to family, to find affordable real estate and space for our children, and to do what things we could to try to reverse the decline, the flight from what was a major American city.

If we do have to leave, it will be under a dark cloud; we’ll have lost everything we put into our home, most likely, and more. We’ll be demoralized; the kids will lose the ties they’ve made here, the small roots they’ve put down. It will feel like a failure. I’ve never been one to be excited about the road more taken. And we’ll be treading the path taken by fifty thousand people before us, over the last fifty years or so.

There is good news on the job search front. I’ve been able to have good discussions with some hiring managers who are willing to consider a work arrangement that would help us stay in our home. The details are yet to be determined, but it’s encouraging to have a manager suggest that they might be willing to have me in the office part of the work week, and work from home for the rest of the week. One guy even asked me what kind of support I would want from the company to set up such an arrangement. That actually baffled me. I just sort of went “ummm, ummm, what?” It took me a while to even understand that he was suggesting his company might chip in to help cover accommodation, for staying overnight, or a mileage allowance to pay for gas. In other words, he seemed to want to make the job attractive to me — by offering perks! Isn’t that weird?

Michigan has been beaten down. I’ve been beaten down too. When I set up my arrangement to work at home for my last employer, I resolved that I would not ask for any special concessions, since I had asked for and gotten working from home as a special privilege. I bought the computers I would need for my home office myself, and paid for the network gear and high-speed internet and separate phone line and desk and oscilloscope and logic analyzer. When I did have to travel to the office, I didn’t submit a reimbursement request for mileage. I endured the jokes — like when I mentioned in a conference call that I would be on vacation, the snarky comment from a co-worker that he thought I was already on permanent vacation. (Um, when I’m on vacation, I don’t actually spend eight hours a day writing C++. OK, well, Haskell, maybe, but not C++.)

I’ve forgotten that I’m actually the one in charge of the job search and the job interview and that I should be asking for what I want at this stage, not bending over backwards to accept less — off the bat. I didn’t used to be this way. Michigan has beaten me down. Thirteen years of declining wages — in terms of cost of living, my earnings peaked in 2000 and have been on a gradual downward trend ever since — have beaten me down. I haven’t even been asking for what I need to feel rewarded and to be secure, because all around me I’ve heard, year after year, “you should just feel fortunate to have a job.” If one takes that at face value for long enough, one starts to believe it, and of course then suddenly not having a job feels like all crisis, and no opportunity.

In addition to managers, I am talking to several recruiters every day now — so many that it’s becoming kind of overwhelming, actually. This really started happening largely after posting my résumé on Monster and CareerBuilder. I’ve gotten on some mailing lists, apparently. I don’t have a lot of experience working with recruiters. Grace has advised me to give serious thought to every conceivable offer, and to let the other guy be the first ones to say “no, it’s not a good match.” I’m really unaccustomed to pursuing more than one job opening at a time, so I’m in alien territory here, but I think it’s basically good advice.

One of those “no” answers happened today — I was being solicited for a four-month contract development position with a large bank in New York City. I had initially told the recruiter I wasn’t interested in moving to NYC, leaving my family here, for a short-term gig. But Grace, it turns out, has a friend who was willing to provide a place to stay. So I got back in touch with the recruiter and said “let’s talk about it some more.” So I had a basic phone screen about object-oriented programming and C++, and then I got the dreaded question about salary requirements. I was thinking I wanted $125 an hour, but what popped out of my mouth was that I wouldn’t really consider an hourly, W-2 gig like this in New York for less than $75 an hour. He argued that I was asking too much and wanted me to lower my requested rate. Honestly, I really wasn’t expecting that — I thought the rate I was quoting was, if anything, very low. We sort of sputtered at each other for a while; he talked about how if this 4-month contract worked out well, they would be able to turn me around quickly into a new one. But his reaction to my rate was pretty clearly the “no” that my wife was talking about.

After that exchange I was curious as to just how hard he was trying to screw me, so I asked around a bit. I don’t have detailed numbers, but from what I was able to tell, developers who do this type of hourly work in NYC typically average something like $90 an hour, but experienced developers can make more than that. Sometimes a lot more. They can often also get a per diem for this sort of work to help cover expenses. So it’s pretty clear he was punking me; I think the organization in question is an intermediary, and they would collect $120 an hour or more for my services from the bank, and then pay me half that. Sorry, not interested. Actually I’m not sorry at all that I’m not interested. What I’m sorry for is that I wasted so much of my own time talking to a dickweed.

I’m also sorry that I was under-valuing myself, and by extension my peers. I’ve really got to stop doing that. I need to remind myself that the kind of work I do could be the keystone of a product or a service that could easily net a business a million dollars, or more, in a given year. I’m ready to support that product, to work late to add features requested at the last minute, to quickly turn around bug fixes. It isn’t crazy to want a measure of financial security in exchange for that. The conversations with recruiters have had a tendency to break down when it gets to the “let’s discuss compensation” stage. I’m really sick of hearing that the senior, great, plum, choice, wonderful job from the fabulous employer the are trying to sell me on couldn’t possibly stretch to cover the salary I’d like. I’m also sick of hearing how they just flatly would never accommodate a telecommuter, or a part-time remote worker. It’s funny how a lot of these companies are perfectly comfortable out-sourcing huge swaths of their software development work to workers in Bangalore, workers they rarely if ever meet in person, in a time zone nine and a half hours away. But ask them to let an experienced American worker build code from a home office 100 miles away and they get… distrustful. Just tell yourself “I’m just lucky to have a job,” right?

The kind of work I get called back for these days, around here, is embedded development. I’m a good programmer, and an experienced programmer. (Those two things are actually orthogonal to each other; I’ve met plenty of experienced developers who don’t seem interested in their craft and who churn out really ugly code). Embedded work is more typically done by people with EE degrees or Computer Engineering degrees, which combine some Computer Science and Electrical Engineering. I sort of fell into embedded work by accident, when a friend of a friend needed some assistance understanding low-level Macintosh programming, to get an audio PCI card working. Really, my interest in hardware goes way back – to childhood, when I got Radio Shack 150-in-1 electronic kits as birthday gifts, or build-your-own-digital-computer kits, or took apart reel-to-reel tape decks, to using an FM receiver to hear music generated by the unshielded radio frequency interference from the circuitry of a TRS-80, to wiring AppleTalk networks in college, to fixing broken telephone answering machines with a soldering iron, and so on, and so on — but I never learned electronics the way an Electrical Engineer learns electronics.

Anyway, back to that audio PCI card and its firmware, written in C and Motorola 56301 DSP assembly language. I was able to help get that working, and that’s sort of the work I’ve been in since. When I talk to a recruiter I’ve had to make sure that I clarify that no, I don’t have an EE degree, or a B.S. degree at all, because to some employers that’s become a critical issue. Also, I’ve been asked to specify my college grade point average a lot, and even submit a college transcript. I feel I should point out that I have not actually had to submit a transcript or specify my G.P.A. to get a job since — my first job after college? It’s been a long time. I was not terribly focused on good grades. I learned the most in classes when I sometimes got quite terrible grades. But I have a B.A. from a liberal arts school. My major was English. I took a minor in Computer Science because I loved programming. If the recruiter seems to know anything about programming I might talk about how, as a practical matter, I’ve rarely needed math beyond algebra to solve programming problems, even ones that sound initially complicated, like smoothing sampled compass headings using a decay factor based on the natural log of the current velocity. Or I might talk about how useful it has been to be able to write good documentation.

A select few seem to get it. They grok the idea that someone can have general intelligence and a willingness to work hard and an aptitude for solving problems, and that this might make someone a valuable employee. They’re willing to consider someone who isn’t a perfectly square peg, and in fact someone who might help carve out a differently-shaped hole.

Over the last decade or so, in the years I’ve spent actually getting things done, it doesn’t typically occur to me to think of myself as disabled hardware engineer or a failed computer scientist. I feel successful, in fact, for the most part. I’ve written a lot of code. A lot of it has shipped out in products. And you need only take a look at my bookshelves to know I love to learn about computer science and particularly programming languages, both current and historic. I’ve been known to read patents for fun. I don’t have a Ph.D. in Computer Science, but I feel a great affinity for those folks — particularly the ones that specialize in language design and implementation, and I’ve taught myself a few things over the years.

I admire what EEs can do. I can’t design a power supply. Sometimes I wish I knew more electrical engineering; I’d relish the opportunity to be truly mentored by an EE, or take some classes to try to get my math background up to snuff, if I could do that part-time. At one point I had some idea how an adder was build out of logic gates, but that class was a long time ago. These days I understand hardware in terms of registers and bits and interrupts and clock cycles and byte lanes and cache and memory-mapped I/O, which are really abstractions on top of real hardware that can be incredibly reliable but often is flaky and requires reading a lot of the “oops, we goofed, here’s the workaround” notices that are euphemistically called by chip makers “errata.” I can get a lot of useful information out of data sheets, but there is extra information in them that is targeted at people with training and experience other than mine. I’d like to understand that world better. I’d like to be better at soldering.

The EE’s I’ve worked with could help me determine that, yes, that peripheral on a board wasn’t working because of an actual hardware problem. They could read schematics more easily than I could, and make use of their deeper knowledge of the hardware to help me what the code needed to do, to work around issues. I could write clean, functional, well-factored, well-commented C code to do what needed to be done. Good EEs often aren’t good at that, and more importantly aren’t necessarily that interested in becoming good at it; to them the elegance of the circuitry might be important, and the code an afterthought. I’ve tutored EE programmers in how pointers and classes work. I’ve learned a bit from them about pull-ups and pull-downs, RS-232, balanced and unbalanced circuits, noise and capacitance, clocking and PLLs and clock dividers, and the practical aspects of driving various peripherals.

To me it’s often distressing what they don’t know — and how poorly many of them write, whether we’re talking about code or comments or specs or even a business e-mail. To me those things are pretty much all of a piece. But I try not to judge. We have our little jokes. They talk about how important it is for English majors to learn to say useful phrases, like “do you want fries with that?” I talk about how you know an electrical engineer likes you, because when you are having a conversation, he stares at your shoes instead of his shoes. Ha-ha, only serious.

They have a different focus. To them it’s probably often distressing what I don’t know. Since I’ve been writing code since childhood, code is my element. Working with EEs has actually seemed like a pretty good symbiotic relationship to me. Code is a different thing, and software architecture and design is not hardware engineering. I don’t come at writing code quite like an EE comes at designing a circuit. I need to remind myself that this has been a good thing, and I think a lot of teams that build embedded programs could benefit from at least one engineer who specializes in software architecture. I find that position “at the boundary” between code design and hardware a very interesting place to live and work, especially as I’m always trying to push my own boundaries — to move towards using more expressive, higher-level languages and tools, to advance my understanding, to get more leverage, to get a competitive advantage. I just wish more managers and EEs could see someone with my skills as whole asset, a “resource” as they say, and complementary to them, and not a broken thing with a piece missing who has somehow managed to limp into a job. And it’s not just them I have to keep convincing.

Creative Commons Licence
This work by Paul R. Potts is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. The CSS framework is stylize.css, Copyright © 2014 by Jack Crawford.

Year IndexAll Years IndexWriting Archive