Keeping your old iPhone costs you $225 a year

With the new iPhones out and my contract up, I’ve been trying to decide if upgrade my 4S is worth it. It’s working fine and apart from the battery life sucking, it seems no different from the day I got it.

iPhone 5s

Once I did the math, I decided it would be financially foolish not to upgrade immediately.

Consider that an unlocked, contract-free 16GB iPhone 5s costs $649. Buying it with a 2-year contract costs you $200. So that’s a difference of $450 or $225/year. Where does that $225/year come from? You’re making monthly payments on it as part of your mobile bill. The math follows on the 32GB and 64GB versions too, with $225 covering the $200/$300/$400 difference from the off-contract price.

So if you do nothing, you’re paying to subsidize a phone you already own.  Your wireless carrier is just milking you.

Now if you upgrade your phone and pay $200, you’re still making $225-$200 = $25 in year one! The math gets better if you sell your old phone. My 2-year old 32GB 4S fetches $155 for trade-in on Gazelle. So now I’m “making” $180.

Now of course this assumes $649 is a fair price for an iPhone, despite that it costs only about $200 to make one. If you were take off typical 50% retail markup, then you’re about even over 2 years. Unless of course you buy the gold iPhone which is worth more because, you know, it’s goooollld.

Baseball is a game of 3s

I noticed last night that baseball is a game of many 3s.

Everyone knows you get 3 strikes and each team gets 3 outs per inning.
But there’s also 3 x 3 innings per game
3 x 3 defensive men are on the field a time
There are 3 x 10 ft between bases
Bases are at 3 x 3 x 10 degrees from each other
Games last about 3 hours
Most series are played in 3s
There are 3 divisions per league
There are 3 x 10 teams in the MLB
There are three levels of minor league teams, the highest being triple A
Each team plays 3 x 3 x 3 x 3 x 2 games per year
Including spring training, players play 3 x 3 months of the year
Babe Ruth, who many consider the best player of all time, wore number 3
If you get a hit in 1/3 of your at bats, you’re doing really well
If your team wins 2/3 of your games, you’re guaranteed to win your division
If your team loses 2/3 of your games, you’re guaranteed to lose your division

Did I miss any?

The Engineer’s Job Search Battle Plan: 8 Simple Steps to a Dream Job

A while ago I wrote about how companies can hire the best engineers. Here’s the other side of that process: how to find your engineering dream job.

Battle of Laxington

Congratulations! Whether you’ve decided it’s time to move on from your current job, you just quit, or you were laid off, you already have a new job – finding your next job! Finding a new job can be more work than having a job. Yeah, the pay sucks, but it can be fun and rewarding in the end. During my last job search, I loved catching up with old friends to find out where they were and met a lot of interesting new people.

Disclaimer: as I noted in my last post, this is written more for engineering jobs where the market is very strong and you may be looking at lots of opportunities and multiple offers. Unfortunately the job market is not so sunny for many other lines of work, so some of the tips here may be less relevant.

Anyway, here’s how to approach your new job.

Step 0: Grieve your last loss

Changing jobs can be very stressful. It can be trying, especially if you didn’t leave your last job on your own terms or it didn’t work out like you had hoped. The first thing you need to do is take some time, grieve for your last job and process the end of it. The last thing you want is to be in an interview and let feelings of anger or sadness come out with a potential future employer. Take a weekend, take a week, take a month, but before you start looking again, make sure you feel closure on your last job.

Step 1: Stock your armory

I can’t fathom a serious job search these days without using LinkedIn. In fact, I used it exclusively as my resume. (For recruiters who insist on a PDF version, there’s an export link.) Fork over $25 a month for LinkedIn Premium to get all the bonus functionality, the best being able to see who’s been looking at your profile. You can’t do that with a PDF or Word resume you’re emailing around.

Update your profile with your latest job details, update details of your previous roles, add any awards, patents and solicit recommendations.

Step 2: Strategize

There are three questions every employer is going ask you, so you want to think hard about them and make sure you know exactly how you’re going to respond.

  • What drives you?

    What kind of work gets you so charged up you can’t sleep at night? What have been your favorite professional moments?

  • Why do you want to work here?

    Given your answer to the previous question, how does a company align (or not) with what you want to do? This will also help you figure out your targets for step 2.

  • Why did you leave your last job?

    This may be the trickiest one, especially if you didn’t leave your last job on great terms. Be honest without being disparaging of yourself or your former employer. Future employers don’t want to hire someone who has a history of bitterly remembering former employers.


Step 3: Pick your targets

Start making a list of potential employers. These may be companies you admire, places where friends work, or even places you’ve worked before. For Boston startups, I found Startups in Boston, BosInno, @ScottKirsner, and Xconomy to be good sources for figuring out who’s hot and who’s hiring. Look for companies that are growing or recently got funding.

At this point, I think it’s good to get organized with a spreadsheet that tracks all the information you’re going to gather on each company. Here’s a template of the one I used. Copy it and tweak it to your needs.

The last set of columns are a bunch of subjective metrics I used to rate each company. While I didn’t simply take the job with the highest score, it did help me rationalize and compare each opportunity.

Step 4: Attack!

It’s time to get yourself out there. Your LinkedIn updates may have already gotten you some bites, but now’s the time to be direct.

You may not want to hit all your companies all at once. Here’s why – in general, the bigger company, the slower their hiring process is going to be. If you apply to a big company and a tiny startup on the same day and you eventually get offers from both, you’ll likely get the offer from the startup way earlier. This puts you in a pickle: do you wait to see if the big company will give you an offer or take the startup’s offer? An offer may have an expiration date on it too, making it more complicated. Now, a company that really wants you will be generous with the expiration or offer to extend it if you need time, but you could still end up with a mismatch in timing.

It’s in your best interest to have as many offers in at the same time as possible. It helps you to compare the offers against each other and negotiate if the one you want is lacking in any way. That said, this is a tricky dance to pull off. Potential employers don’t want to have to compete and they also want you to want them just as much as they want you. So you may not want to volunteer information about what other offers you have or what you’re waiting on. Just as you want companies to respect you, respect them as well, because you want to start off the relationship right with the one you take and keep the door open with the ones you don’t.

Find the resume submission form on each of your target companies’ websites. If you can, try to get referred in through a friend or former colleague at that company via LinkedIn or email. It’s much more likely that you’ll hear back than submitting a faceless website form.

While this is a good start to finding your next job, it’s likely you won’t discover all the companies out there who are hiring or you find interesting. That’s where networking comes in.

Step 5: Infiltrate

Networking is key to building roads into companies and discovering opportunities, especially with small startups that may be hard to find otherwise.

A couple of good ways to meet people are through technical Meetups in your area and joining relevant LinkedIn Groups. Other social networks like Facebook and Twitter may be useful too, but probably less so than Meetup or LinkedIn.

Be sure to stick around after meetups, talk to the speakers, let them know you’re looking for a new opportunity and ask if they know of places where you’d be a good fit.

All of these activities I would consider active networking. It’s also useful to do more passive networking. For example, every once in a while I would post an update to Twitter and/or Facebook regarding a mildly amusing anecdote from my interview process. While it might have seemed that I was just sharing a funny story, I was also reminding people that I was in the market. Several leads came to me from friends and former coworkers who saw a post and pointed me to an opportunity.

Step 6: Engage in hand-to-hand combat

Eventually you’re going to end up in some interviews, either on the phone, in person and likely both.

To get the offer, you’re going to have to perform well in these and the only way to ensure that is to prepare as much as you can. Here’s some concrete activities to complete before each interview:

  • Research the company and make sure you understand their business. Come up with at least one thing (in your opinion) they could do better in case they ask.
  • Look for interview questions previously asked on Glassdoor. If you get one of these questions, consider yourself lucky as a good company will retire a question once it becomes public. But nailing a question because you studied it before hand can’t hurt.
  • Read Programming Interviews Exposed and The Algorithm Design Manual. They’re both good prep work and refreshers on the fundamental computer science principles that you have forgotten since your college courses. If you get asked any of the questions in these books, you’re very lucky. Most top companies will ask more complicated variations of them.

After the interview, follow up with the recruiter or manager to thank them and also make sure they have a reminder in their inbox to get back to you.

Also, make sure to write down some notes about the company. It’s easy to get cloudy on the details of each company once you’ve talked to a few and you don’t want to annoy a company by asking them the same questions again.

Step 7: Emerge victorious

After interviewing, the hardest part may be the waiting. You may get an offer immediately after the interview or it could take weeks. Again, it’s usually a factor of the company size and the layers of management that may need to be involved in a hiring decision. You can use your LinkedIn Premium account to see if your potential employers are still looking at your profile, even if they’re not directly communicating with you.

When you get an offer, make sure you get it in writing and get clarifications on any questions you have. Before you sign anything, make sure you understand

  • Health plan benefits. What’s your cost per paycheck?
  • Dental benefits
  • Vision benefits
  • Who your manager will be
  • Expectations for work travel
  • Vacation time
  • “Normal” working hours
  • Work from home policy
  • Target bonus and how bonuses are funded
  • 401k. Is there matching?
  • Transportation costs and time
  • Any other special perks

You may want to try commuting to a potential employer’s office during the time you’d normally arrive to make sure you understand how much time it will take and work out any public transportation logistics.

Stock options are very important to understand and many privately held companies may not volunteer all the information you need to calculate their value. What you need is the strike price (or a recent strike price), the number of granted options, and the valuation of the company. Be very suspicious of any company that won’t give you the details to figure this out. This information is often closely held, but they should give you what you need. If not, you may be getting screwed.

Once you have all the information you’ve organized, it’s time to make a decision. For decisions like this, I usually have a gut feeling. While the spreadsheet is there as a rational backup, I usually have one or two options I’m really excited about. That should be your choice.

Congratulations on your choice! However, once you start, it’s still not time to relax. Behave as you’re still being interviewed. Good luck!

4 Essential Tips for Hiring the Best Engineers

As I worked my way through my recent job search, I met a lot of people. Many of them were headhunters, corporate recruiters and hiring managers. They all worked differently, but I found the most effective ones had similar qualities.

While I don’t claim to be an amazing engineer, it’s a buyer’s market for engineering job seekers right now and if you want to hire the best talent, here’s some tips and some real examples from my search.


The best companies move fast. That’s not just the hiring folks, but the entire company. The recruiting process is direct reflection on the qualities of your company. By moving fast, you’re showing candidates what it will be like to work there and I don’t know anybody who likes slow-moving companies.

Example: Through LinkedIn, I was put in touch with the CEO of a mid-sized company. Within 2 hours, he had sent my info down to the engineering management and I had an interview scheduled for the next day. Within 24 hours I had a verbal offer. This wowed me.

Anti-Example: I contacted a recruiter at a company. It took him days to respond, but finally I set up a time to have a phone screen with him. After that, he set me up with a 1st round interview. That took a few days. A long period of time went by until I heard back about scheduling a second interview. In the meantime, other recruiters working for the same company reached out to me and asked if I was interested in talking with them, clearly oblivious to my current status. Finally, the 2nd round interview was scheduled. At the end of that round, they said that things went well and they’d  give me an offer the next day. I never heard from them again, even after I followed with them via email. If this is how you run your business, no thanks.


Unless you’re a giant corporation with thousands of positions to fill, you might not immediately see an open job description for any given candidate. But it’s critical that you look at what the candidate can bring and not if they line up with a set of bullet-point qualifications. If you find someone awesome who doesn’t fit your current job descriptions, make a new position for them. Finding people is really hard and it’s crazy try to fit people with all their odd shapes into idealized square holes.

Example: One company I talked to initially told me they didn’t have a position for me. They thought about it a bit and came back to have some initial conversations. While it didn’t work out in the end, I really respected their flexibility and openness. They really saw building a team as a puzzle, not as filling out series of checkboxes.

Anti-Example: I contacted one company because they had an interesting product. Their response was quick and dismissive: “You’re too senior for our current position.” There was no opportunity for discussion of what I was interested in doing or what I could bring to the company. Nor was the door left open for future openings they may have. I would certainly never recommend this company to my friends.


Hiring is an imperfect process. You’re trying to guess at how someone will perform at a job, often one they’ve never done before, using a series of 45-minute interviews. On the other hand, past performance is a great indicator of future performance and your employee referrals have first-hand information on that past performance. Put employee referrals at the top of your priority list!

For capturing candidates who may not know people at your company, just list a [email protected] email address or allow them to apply via LinkedIn. Keep it simple and easy.

Example: With one company, I reached out to someone I knew there and I was immediately introduced to a recruiter and rushed into a 1st round interview. They solicited detailed feedback from other folks I knew at the company and their feedback had a big role in their decision.

Anti-Example: At one point I heard about a company that sounded interesting, so I went to their web site to find out more. I was confronted with several pages of forms (including salary history and complete references!) all in separate fields. Never mind that most of this information was already readily available on my LinkedIn profile, this was just to get a phone screen. Through some LinkedIn spelunking, I found out that a former coworkers was there, so I sent him an email. He said he would pass me along to a recruiter. The next day, I got a response from him that the recruiter said I had to apply using the website. I don’t think so.


Really, this is about doing what your mother taught you. Be nice, be courteous and timely. Follow up when you say you will. Keep the candidate informed of the process, even if it’s bad news. Don’t waste their time.

You can imagine the good examples here, so I’ll give a bunch of anti-examples:

  • On one phone screen, the first question the manager asked was my salary history. No discussion of what I wanted to do, but just what I meant in terms of money.
  • In one interview loop, I was left alone in a conference room for 10+ minutes between each interviewer while I saw the interviewers wandering by in the hall and chatting.
  • One interviewing manager spent several minutes telling me how much he didn’t like working with one of my former companies and how he never wanted their company to be like that.
  • During one interview, the interviewer stared mostly at his phone and appeared to be texting.

That’s it. Recruiting is everyone’s job and the recruiting process is critical in showing off your company. I don’t care if you have a massage room, ping-pong and free lunches if your recruiting process is slow, inflexible or disrespectful.

In the end, most candidates will make the decision about their next career move based on some gut feeling. If your recruiting process is broken, their guts will not lie.

A new year, a new home page

My home page was getting a bit stale, so I decided to “update” it. Unbelievably, it’s been nearly 20 years since my first web page, so I thought I would go retro with it, but using modern techniques.

Here’s how I did it:

ISINDEX search
This is just a form, using a Google Search restricted to

No FRAME tags here; it uses a div with CSS floats.

Weblog and Twitter
Something you used do with server-side includes can now be done with jQuery and jQuery plugins.

Visitor counter
Inserted with JavaScript, the dial numbers use CSS gradients.

Blinking text
Uses JavaScript to periodically toggle element visibility

Select box navigation
This used to be done with a form submit and a server redirect. Today, it’s a trivial amount of JavaScript.

Small caps
You used to do this with lots of font tags. Today, you can use the CSS font-variant: small-caps.

Thick table borders
There’s no tables in the page. The div uses the border-style: ridge style.

Formerly accomplished with an inline image next to each item, CSS supports this with
list-style-image: url(reddot.gif).

You can see all the CSS in my web10.css file.

The web surely has come a long way in 20 years. I’m sure in another 20, it will be nearly unrecognizable to us today.

Does a SodaStream save you money? Probably not.

We got a SodaStream soda maker several months ago and while I’ve enjoyed using it, I’ve wondered about SodaStream’s claims that it saves you money.

Does it? Probably not, or at least not for a long time.

Let’s assume you buy soda in the most economical way, in 2-liter bottles. You’ll probably pay about $1.50/2 liters. Assuming you buy CO2 refills at $15 and not $30 for a new CO2 bottle and you drink half a liter of soda a day, it will take you 2,376 days or 6.5 years to make back your investment in the SodaStream maker. Wow!


In fact, if you spent less than $1.33/2 liter on soda before, you’ll never make your money back.

However, there are other ways to decrease your cost per liter:

  • Buy a SodaMod, which allows you to attach a paintball CO2 tank which is much more cheaply filled than what SodaStream charges. A similar product is the FreedomOne-PBI.
  • Make your own syrup.
  • Since Bed, Bath and Beyond sells SodaStream supplies, take advantage of all those coupons they send you and buy syrup and CO2 there.
  • Buy one of the cheaper SodaStream models.
There are other reasons to buy a SodaStream, like reducing waste and not having to lug heavy bottles and cans of essentially water to your house, but economically, it’s not likely win.

You can run your own calculations by making a copy of the Google Spreadsheet I used.


How to install a treadmill

Correct Method

  1. Select any treadmill you like.
  2. Cheerfully hand over an additional $200 to have it delivered and installed.
  3. Enjoy a frosty beverage of your choice while a couple of burly men drive up to your house, carry your treadmill down your steps, unpack it and set it up while your children play and laugh nearby.

Incorrect Method

  1. Select a treadmill that weighs more than the combined weight of all adult members of your household, say 350lbs.
  2. Elect to pick it up yourself and feel superior to the suckers who pay $200 to have it delivered.
  3. Pick up the treadmill with vehicle clearly not intended to carry a 7.5ft, 350lb box, say a 1999 Honda CR-V.
  4. Ignore the doubtful looks of the treadmill store guy who helps you get it into the car.
  5. Breathe a sign of relief when it actually fits, hanging several feet out the back window.
  6. Drive home. Back up your car over your lawn to your basement bulkhead.
  7. Attempt to open the basement door, only to realize the deadbolt lock has fallen apart and into the stair area which locked on both ends.
  8. Spend a half hour disassembling the door, removing it from its hinges, and prying it off with a crowbar.
  9. Realize you somehow failed to eat a proper meal all day and are subsisting solely on birthday cake and ice cream.
  10. Slide the treadmill out of the car and down the steps.
  11. Determine that the box is a quarter inch too wide to fit through the doorway.
  12. Tear apart the box and attempt to take out individual pieces, hoping to lighten it.
  13. Surmise that the removed parts weigh less than 20 pounds.
  14. Strain to tilt the torn-apart box on its side so it may fit through the doorway.
  15. Perform all this sometime after usual dinnertime so your kids are overtired and hungry.
  16. Attempt to drag the 300lb treadmill, on its side, down the steps while your children are screaming and clinging to your legs.
  17. Somehow manage to get it down to the floor.
  18. Thank jeebus that it has wheels to move it the rest of the way across the floor.
  19. Reattach your basement door.
  20. Put the pieces of the treadmill together.
  21. Collapse.


Fixing “nested groups detected” when sending mail to Google Groups

I spent a few frustrating evenings recently trying to figure out why sending email from a WordPress site was failing when sending to a Google Group. It worked fine for a very long time, and then suddenly started failing, rejected with the vague message “nested groups detected”. There’s no information from Google about what it considers nested groups and what to do about it.

Eventually I narrowed it down to the “Precedence” header. Apparently, if Google Groups sees this header, it determines this is already being sent through a list and refuses to send it.

The solution was to remove the header and in my case, commenting out a line in the otherwise excellent Subscribe2 WordPress plugin. I commented out this line in class-s2-core.php:

$header['Precedence'] = "list\nList-Id: " . html_entity_decode(get_option('blogname'), ENT_QUOTES) . "";

I posted the solution in the WordPress forum and hopefully the author will add an option for it.