Posts Tagged ‘advice’

h1

Tools sometimes define the problem

May 23, 2013

When I have a bug of the sort “nothing is working” or “the peripheral is acting like the processor isn’t talking to it”, the digital multimeter (DMM or DVM) is the tool I start with. It sits on my desk, all the time, even after a clutter purged. It is easy to use but a very yes/no, working/not working sort of tool. It is kind of binary, like a hammer. It is either hitting the nail or not.

If something is not working, the next tool is an oscilloscope. Like a microscope for electrons, an oscilloscope will let me see what is going on. However, to get an oscope, I need to call an EE friend and ask if I couldn’t please borrow his scope (he always says yes). Then I head over to his house after he gets home from work (I think his wife is afraid of the garage) and pick up the scope. I usually get it for a week or two, depending on whether he’s got a weekend project planned. (This is Phil of Weekend Engineering so he often has weekend projects planned.)

Where I’m going here… using an oscope requires planning. It requires me to admit my bug can’t be solved by just trying something else, that typing another line of code or doing a recompile isn’t enough. An embarrassing amount of my time is tweaking my code to do one thing just a little different. Admitting I can’t do that until it magically works, well, it takes a little while.

Even when I have 24/7 access to a scope, using it still means figuring out where to attach the probes to the board and configuring the scope. Admitting I have a problem, a real problem and not just a typo, is oddly difficult. I should just be able to figure it out.*

*This is a myth. A complete and total myth.

When I worked at HP, there were plenty of scopes around. But they all weighed 40-60 lbs (and dropping it would have been *bad* because they were hideously expensive (like 1/2 year salary expensive)). So in addition to admitting to myself I needed help, I had to find a big strong man to carry the thing for me. Who would inevitably offer to help me connect it to my board and then take credit for the solution. (Why didn’t we just put the darn thing on wheels? As I look back, I’m a little frustrated by that idiocy.)

There was another tool I used a few times there, one that I think was on wheels: the logic analyzer. It hooked up to dozens of digital signals and would help me figure out what was going on all over the system. But it was a very difficult tool to use (its manual was about four times longer than the oscilloscope manual and it cost a whole year’s salary). So to use the logic analyzer, I had to admit the problem was big enough to stop my normal work for three days, get someone to help me transport it, get another someone to modify my board so the signals were available, set up the analyzer, and then, within a few hours of getting the information, solve my bug.

Once I admitted the scale of the problem warranted a tool of that magnitude, and put in the diligent effort of setting up the tool, the solution was always obvious.

Now logic analyzers are tiny widgets that plug into USB ports and take all of ten minutes to set up. (I did it (almost) live unboxing of the Saleae Logic on my new podcast.)

But I still have to admit I need it. I wonder if I’m going about this wrong. In the past, I’ve always waited for a problem to happen. Then I’ve waited until I determined I couldn’t solve it the easy way (poke, poke, poke). Then I grudgingly admit it won’t fall to trivial debugging. Then I pull out whatever tool will help, grudgingly (still) hook it up and configure it. Then (usually), the problem falls fairly quickly.

First, the grudgingly parts… the fact that I can’t type my way out of a problem doesn’t make me stupid. I know that and yet… this is what programming is to many people.

Once I got my itty-bitty, super cheap new analyzer set up, I left it in place. And now I’ve moved on to other issues, just adding more signals. It is really handy. I can look at things whenever I want… before I start tippy typing randomly and pressing the recompile clean button for no reason.

But some tools take time and they don’t look like forward progress. It is hard to know when to throw in the towel on being a monkey typing randomly (and when to stop hoping Google, Stack Overflow, and caffeine can solve your problem). On the other hand, reading the manual or getting the right tool or taking a class… well, sometimes it is necessary to take a step to the side to get on to the fast track to the solution.

h1

Gravel, expired squirrels, grapes, Trident gum

February 12, 2013

Beagles don’t live in the wild and I know why.

The first time we took Zoe to the vet for “gastric distress” due to “dietary indiscretions”, we felt like terrible puppy parents. We should have known. Because she enthusiastically wanted to play ball (even as she was vomiting), we thought she’d just eaten too much grass (which she seems to do because she likes to barf).

When the vet used the term “dietary indiscretion”, it strongly reminded us of the politician who belittled his hypocritical immorality by calling it a “youthful indiscretion”. Both terms have this feeling of joyful breaking of the normal rules. This completely describes our beagle.

And Zoe does like to eat things. Really, anything is fine.

Last week, while I was in class, my husband sent me a dog shaming photo of Zoe. If you haven’t seen dog shaming before, you really should follow the link. Dogs are terrible creatures. And putting signs around their neck has really made their bad behavior a lot easier to take. I wrote a post-it note for Bear a few days ago (my first) and it made his annoying behavior humorous.  Which them made it easier to deal with, which is to say, distract them from the badness, interest them in something non-destructive.

So, while we’re read the site for awhile, we’re new to actually shaming the dogs. I think this was C’s first attempt.

Does it look like she's trying to blow a bubble?

Does it look like she’s trying to blow a bubble? It says “I ate Elecia’s Bubble Gum (including wrappers)”

One important thing, though… like they used to say on America’s Funniest Home Videos, if someone is actually in danger, put down the camera and help.

Sugarless gum is poisonous to dogs. It is the Xylitol sweetener. Oh, and before I go on… Zoe is fine. Bear is fine. But it was a harrowing time.

After taking the picture and then perusing the internet, C rushed both dogs to the emergency vet. Where Zoe got to barf, probably even more than she liked. Bear also participated in that part but all evidence suggests he didn’t eat the gum (poor Bear, punished but not even an accomplice).

Does this bandaid make me cuter? I swear I didn't eat the gum.

Does this bandaid make me even cuter?

Zoe did show some of the poisoning signs (low blood sugar) and was in the hospital for 48 hours.  However, thanks to C’s fast action, she was out of the woods pretty quickly and doesn’t show signs of liver damage (yay!). While in the hospital, she wiggled when she shouldn’t have and they broke a needle in her so there is a quarter inch of 30 gauge wire floating around. While that sounds horrible, it is probably not going to harm her.

Harrowing times… but all dogs are home and happy. They haven’t even deserved shaming today. Yet.

h1

Multiply by four and add two days

December 4, 2012

How long will it take you to complete that task? You know, that task you don’t know any details about and is just a block on the diagram that says “USB”. When, precisely, will you be finished with it?

Engineers hate schedules. We like puzzles. Hurrying us while we complete a puzzle just leads to annoyance all around. It takes the time it takes. Maybe if you stopped interrupting with stupid questions about deadlines we could focus and create a good solution.

Putting on my manager hat (oh, yeah, I totally have a hat specifically for thinking about manager-y things), knowing when software is going to get done is critical. In an embedded system, the software needs to correspond with the hardware and the manufacturing tasks. Letting everyone work at their own pace without any guidance just leads to disaster.

If you’ve never put together a schedule before, it can seem like magic. I’ll tell you how I do it. I’m pretty good at getting the project to come out when I predict.

Let’s start from the engineer perspective and then I’ll move to the project management side.

When asked how long I think something will take, I check my gut, it gives me a number (“ahh, that will take about two hours, if only people would leave me alone to concentrate”). This number has no debugging or anticipation of uncovering lower level problems. It doesn’t take into account interruptions, feature creep, or high priority interrupts coming to clear off my desk so I have to restart the intended task. My gut doesn’t worry about documentation or code reviews, it considers the puzzle only.

So I take that number (two hours) and multiple by four, then add two days. Thus, I tell the project manager that the task should take about three days. This isn’t padding… this is planning. Everyone has a multiplier and an adder. Many managers work to figure out what multiplier they need to apply to the engineering estimates they are given. In fact, it looks like MS Project has this concept of Baselines that let the project manager figure out what the multiplier should be as time goes by.

That is just me providing one estimate of a small task. My multiplier and adder are my own. You can use them but you really need to figure out if it is an over or under estimate.

But, what about if you are stating a project and need to sort out ten or twenty tasks? You can use the same method if you know enough about the tasks but my gut reaction tends to get worse as I think about all this work. And my estimates get ever larger as my brain gets tired.

Instead, I take the list and try to break down all the tasks I can think of… USB breaks down into many parts: a driver, an interface layer, and an application layer on the device. I also need a PC program for testing. Breaking tasks down is a tough process, easier done with another person. At the end, you have sixty or a hundred tasks so it feels like anti-progress.

Don’t fear, the next step is to go through the list of tasks and decide if each is easy, medium or hard. As you go through the list, you may find you need more granularity; I usually end up with a very hard and trivially easy. Remember, if you don’t know much about it, it is going to be harder because you’ll have to figure out how to do the work before you start, bump those unknowns up a level.

Now you’ve got a long list of tasks and whether they are easy, medium, hard, very hard, etc. I’d put these in a spreadsheet. But it’s recently come to my attention that I may depend too heavily on spreadsheets. Still, go for it.

Now you need to define what easy, medium, and hard mean. Think of a few of the easy tasks… ask your gut how long they’ll take. Multiply by four and add two days (or whatever you choose). Same for medium and hard… Don’t worry about how long everything will take. Don’t worry about the goal dates or when the CEO wants you to ship. Listen to your gut. Then use your brain to correct it.

Now, go home and sleep on it. In the morning, without looking at your old values, re-do the gut check for easy, medium, etc. If the values are very different, spend some time thinking about why that would be. I am more optimistic in the morning but sometimes I’ll realize the difference in values is because I’ve marked some medium things as easy so my average was off.

Anyway, take your two values for each category and average them (or sort out the discrepancies properly). Now you can apply it all of the tasks. Is it exact? No, of course not. Is it a reasonable first pass? Yes, very much so.

Now all of your task have duration values, maybe in engineer hours, maybe in engineer days. Sum up the duration and convert to 40 hour work weeks. Now you can say “with 1 engineering resource, the whole project should be completed by X”. Someone will squawk loudly at this. It always seems like too much time. But you aren’t just pulling a number out of a hat. If they want to argue, now you can show your work, maybe get some advice on what isn’t as difficult as you currently expect.

When you add resources (aka minions, coworkers, or other people), you don’t get to divide the time perfectly in half, there is overhead with talking to a team. The larger the team, the more time will be spent communicating and making sure everyone is pulling in the same direction. I put as a multiplier on my task durations. For a 4-6 person project, I usually use 10% for integration. It isn’t an exact science… ask yourself, how many hours a week do you currently spend in meetings versus the hours spent getting things done? That is integration time.

So, there you have it. My secrets to creating a schedule.

Oh, wait there is a little more to it, isn’t there?

Priorities help… assign each project a priority (0 is low, 1000 is high…. I know 10-0 would be better but  if your data is ever going to land in MS project, 0-1000 is the way to go). Tasks that are risky get higher priorities. If you can get the high-risk tasks out of the way early, you can be more assured of the project’s success.

Precedence is separate from priority but they are linked together. For example, if I need my USB driver in order to write the application layer, the driver is a predecessor to the application. The application may be riskier and it may be highly desired by marketing so it has a higher priority. In short, you’ll really need both, priorities and predecessors. Also, some of your predecessors may not be in your task list (ahem, can’t finish the USB driver until I get some hardware to start working with).

At this point, the schedule starts shaping up…  mentally, you should have a pretty good idea of what needs to happen sooner and what can wait until later. But it doesn’t really count until you have a Gantt chart.

I hate Gantt charts.

I also hate MS Project.

But I recently did a trawl to see what I could use instead. There is a Google docs gadget but that is going away and doesn’t work in Chrome, only in Firefox (snicker). There were some Mac options but no iPad options that didn’t need the Mac support stuff. I didn’t try Open Office. And it is going to pain me to pay for MS Project when my 60-day eval period is up. And yet, the powers-that-be for this project really want a Gantt chart. And it was the only way I could show them a major flaw in the current plan.

I’m not going to teach you how to use MS Project. At this point, with tasks, duration, predecessors, and priorities, all you need to do is add resources and push level and it sorts out when things happen. (Also, swear a bit because I’m leaving a bit out.) Then you muck about trying to make sure all the people have work they are likely to enjoy (and complete) and keep pushing level until the charts look the way you want them to.

But wait, don’t stop there, now you need to go to your resources and get your easy/medium/hard initial estimates re-evaluated by the people actually doing the work. So, gone on, ask them, “How long will it take you to complete that task?”

 

h1

Looking around furtively

November 15, 2012

I mentioned submitting conference proposals a few posts ago. Did I mention that I’m chairing a track? Ah, yes, well, that started today. It has been the most educational twenty minutes I’ve had in the last six months.

As track chair, I admit, I haven’t got a clue what I’m doing. I’ll get instructions tomorrow or Monday.  To check my ID, I logged into the review portal where I can see all the submissions waiting for my blessing. I’m to give them 1-5 stars and write a comment about the proposal. Easy-peasy.

One submitter helpfully used my track to submit a test proposal (where he copied in the information that was supposed to be filled in, that is under Submitter Comments, he wrote, Comments – 800 characters max). This should make it startlingly easy for me to put this proposal in my “review complete” list.

However, looking at the other ones, I’m struck by the information here. The session about something that sounds super nifty, exactly what I would want to see myself. The session by people who are clearly just looking for a really long commercial. The session by these strange people who want to have a chat in front of alive audience (oh, heck, I’m on that proposal, I’ll have to ask what to do with scoring myself).

More than that, I’m struck by the amount of work that went into some proposals. But not others.

Shifting topics for a second, whenever I participate in science fair judging, I talk to friends who are parents and gush about how they really, really need to sign up to judge if they ever want their child to win. It isn’t about gaming the system but about understanding what is happening on the other side of the curtain. What do the science fair judges look for, how can they look at two hundred projects in two hours and get to an award, and what pieces matter (and what pieces don’t)?

Back to the conference proposals. I suddenly get it. I understand why last year I got a very odd phone call about the session I wanted to put on because it didn’t fit the mold of the rest of the proposals (moldiness in some cases).

I’ve played chess with myself (heck, I learned the undefeatable tic-tac-toe strategy by playing against myself, it was for, um, kindergarten research, yeah, not because I didn’t have any friends, um, yeah). I strongly encourage new interviewees to practice interviewing each other so they can see what the other side of the table sees.

But I’ve never applied it to conference proposals. Duh. I am happy to be able to see what others are doing, to understand the rules. Usually, I look around furtively, trying to figure out if I’m doing this right by following along and hoping I’m blending so no one notices if I’m out of step.

Blending

Let me see if I can sum up my findings… remember this is the twenty minute education:

  • There are a lot of proposals. Title really counts. Funny is great. Funny and informative will get you two stars all by itself.
  • Scatter your submissions around the conference tracks. There are four proposals by one guy. When I dug in and read his bio, he’s just a guy. He’s not going to get all four sessions because I want some variety in my track.
  • You aren’t being judged alone, you are being judged against other people. It isn’t a good or bad call, it is a better or worse judgement. That can work in your favor but it also means you shouldn’t take it personally if your proposal gets axed.
  • More information isn’t necessarily better. At this point, a commercial for your session is more important than a dissertation. I’m happy to see you have a dissertation because it means you thought about it. But I don’t want to have to read it before figuring out if you are in the correct track.
  • Realize the proposal is going to someone, a human who is tired and busy and doing this between other activities. You’ve been there, write your proposal for the Friday-afternoon you. Don’t assume too much knowledge and write something nice in the comments, even if it is “Thanks for your consideration, I hope you enjoy this proposal. If not, please let me know what you’d like for next year.”

Well, I’ve got things to read. I should get back to that. I suspect it will be even more educational over the next week or so.

 

h1

Consulting rate

November 11, 2012

People don’t like to talk about how much they make. Fair enough, I’m not going to be a trend breaker. On the other hand, engineers new to contracting often have questions about what they should charge. It really all depends. But I can give a slightly more useful answer than that.

You could take the salary you currently make, divide by 40 hours/week (or however many you work), then divide that by 52 weeks/year. This is what companies want to pay you and what some companies expect you to take. Unless you are hurting for work this is a really, really bad deal.

See, you don’t work 52 weeks a year in a full time job, with 10 paid holidays, 5 days off sick and 10 days off for vacation, you’d only work 47 weeks a year. A full time job pays part of your social security which you will now pay as self employment tax, 13.3% for 2012. If you’d found you were making $1/hour in the initial calculation ($2080/year), you probably find you are closer to $1.25.

And a full time job has perks, health care is the big one that can be expensive to manage as a solo contractor. But don’t forget the dental and vision coverage, retirement savings programs, lunches, stock options, and assorted other benefits. Even if they aren’t contributing to your 401k, they may have the benefit in place so you don’t have to deal with it yourself. It can be a hassle.

Oh, and as a contractor, you are supposed to provide (and maintain) your own gear. This can be good (tax deductible gadgets!) but can get expensive. And billing hours and dealing with clients who haven’t paid you is part of being a contractor so you need a little buffer in your month for that.

You could keep adding things up but for a back of the envelope calculation, I go about it all differently.

How much would you want to make in a full time salary? Use salary.com or whatever is good for your industry to figure out a range for what you should make. If that research shows you should make $1,000 per year, then you should be charging $1/hour. Where the divide by weeks and hours method gave you a lower bound, this one usually gives a higher bound.

From this higher bound, I often give discounts (and occasionally adders) based on how much I like the product, how much I’ll learn about technology I’m interested, if they’ll be engaging a little time (more expensive) or lots of time over months (less expensive). If I know I like the people, I’ll charge less. If the client tends to need high-priority emergency time, I’ll charge them more (because it is harder to fit in other projects without good planning). And if the client wants short term loans from me, they get charged more (about 5% per 15 days after the initial 30, I do not appreciate net-90).

So do I charge different clients, different rates? Yes. And usually if multiple clients want things at the same time, I work on whichever one is paying the most (with exceptions whenever I’ve promised a completion date, promises before cash). And I’m upfront with my clients that they aren’t only ones I’m working for so they understand this.

I don’t usually carry more than two clients, heck I don’t always carry more than one since I like to work on my own projects but I try to treat my project time like client time (I even clock in and out of my own lab books sometimes).

It is easy to think about every hour of your day being billable (e.g., “I should have pizza delivered instead of spending an hour making dinner”). That can be dangerous to your mental health. Sleeping is just money being thrown away.

Finally, a bonus suggestion for new contractors: figure out what you can live on and make goals for yourself. Put upper bounds on your goals as well as lower. Getting burnt out or physically hurt (or not hired because you aren’t doing good work because you haven’t slept in six months) is more expensive than reasonable goals.

20121111-131416.jpg