Book Review: “Hardware/Firmware Interface Design”

I just finished Hardware/Firmware Interface Design: Best Practices for Improving Embedded Systems Development, by Gary Stringham.  Gary sent me a review copy of the book, btw, but I get no money for reading or reviewing it.  Though if you buy the book via my Amazon link, I get a bit of cash.

Anyway – the book is very good.  Gary says, “This book is written by a firmware engineer but is directed primarily to hardware engineers.”  I’ve been a hardware engineer and a firmware engineer, and I think both groups should read this book.

Gary has been in the trenches of firmware/hardware co-design for 20+ years and this book shows it.  The book gives 300+ “Best Practices” which are actually usable and practical – a departure from many software or hardware design books.  Gary talks about low-level concepts like interrupts, register definitions, and debugging, as well as higher level concepts like planning, documentation, and block partitioning across multiple product generations.

Summary: You should read this book if you’re a hardware or firmware engineer.

This is one of the books that I’ll probably revisit a couple of times a year to refresh myself on A Right Way to do hardware/firmware co-design.

‘Nuff said.

The Importance of Selective Importance

Bob Sutton quoting Bill Vlasic quoting Terry Woychowski about bureaucratic and measurement inflation at GM:

“But as soon as everything is important, nothing is important.”

That quote applies to pretty much any area of life.

Like money, priorities and importance can be devalued through inflation.

Plan, measure, and react accordingly.

Book Review: Accelerando

I just finished reading Accelerando by Charles Stross for the second time.

It’s a scifi novel which starts in the near-future with the first hints of computers augmenting man’s intelligence.  The Singularity draws near as man becomes more integrated with machine  – posthumans are born.  Well, not born, more like evolved.  Humans and intelligence change more rapidly than many can cope with.

The most fascinating idea from the book is that of cognitive forking (my phrase, not Stross’s): people can “fork” threads of their own consciousness to carry out tasks in parallel to their primary consciousness.  When a forked thread of consciousness is done with its task it rejoins your primary consciousness and you instantly know whatever it learned.   Want to research several things at once?  Fork a thread for each task, wait a little while, and voilà!  You’re smarter in 1/Nth the time than if you’d just had your primary consciousness.

The book also discusses what happens to people who are unwilling or unable to keep up with the ever-faster changes in technology and humanity:

“The faux-young boomers feel betrayed, forced back into the labor pool, but unable to cope with the implant-accelerated culture of the new millennium, their hard-earned experience rendered obsolete by deflationary time.”

“Capitalism doesn’t have a lot to say about workers whose skills are obsolete, other than that they should invest wisely while they’re earning and maybe retrain: but just knowing how to invest in Economics 2.0 is beyond an unaugmented human. You can’t retrain as a seagull, can you, and it’s quite as hard to retool for Economics 2.0.”

It is a GREAT book – one of the most original books I have ever read – highly recommended.

You can read the whole book online at Stross’s site.

I also recommend another book by Stross, Halting State.

B-eautiful B-flat

Check it out: http://inbflat.net/

Another theme change

I had to change my theme again today.

A few days ago I switched to a new theme that I really liked, “LonelyTree.” One of my favorite parts of that theme was the header graphic: a great big, beautiful, wise looking tree.

Today I got an email from Oliver Flores, an artist from Guadalajara, Mexico, saying that the image was his, and could I please take it down. His email was very polite, and he gave me this link to his original image: http://oliverflores.blogspot.com/2007/10/grow.html

A quick look told me that the LonelyTree theme seems to have ripped off Oliver’s image, so I changed my theme and sent Oliver info on where I got it.

I browsed through some of Oliver’s other art, and it’s really good! You should definitely check it out. So even though I lost a great header image (for good reason!), I have a new artist to follow.

New Look

I’ve changed the theme of this site to “LonelyTree.

Nice, eh?

Though that little heart favicon has got to go.

Running A Marathon (relay)

I ran in my second running race today – the Silicon Labs Austin Marathon Relay.  It’s sponsored by Silicon Labs, my employer.

Today’s race was a 5K, sort of.  There were five people per team, each ran one part of a marathon: 12K, 10K, 10K, 5K, and 5K.  I ran the penultimate 5K and blew away my time expectations – I guess I wasn’t training hard enough.

I’ve been training three days a week for the last month or so, doing 1-2 mile runs the first couple of weeks and then 3-4 mile runs the last couple of weeks.  I was running 10-11 minute miles pretty consistently, so I was hoping I could get near the 10 minute mark for today’s 5K.

I clocked myself at around 8:13 for the first mile.  Uh-oh.  Note to self: SLOW DOWN!  I realized during this first mile that drinking water from a cup while running is a skill that I do not possess.  The course had water stations, and I happily grabbed a Dixie cup of water only to choke and cough as I tried to take a regular sitting-down-at-dinner drink.  I recovered without spitting up too much water, poured the rest on my head, and ran on.

Mile two flew by.  I clocked myself at 7:10.  Uh-oh.  I wasn’t slowing down, I was speeding up!  Note to self: learn how to pace yourself.  I was worried that I would start dragging and have to walk.

The final 1.2 miles were definitely slower: my time was 13:08, which works out to about 11 minutes/mile.

My final 5K time was 28:31, which is 9:11/mile.  I felt pretty good at the end of the race, I ran the entire way, and I beat my time goal.  It helped that my wife was there cheering me on, as were a bunch of coworkers who were also competing.  (I think at least 30% of my department was running, including my entire management chain up to the VP.)

Our team (“Tortugo”) ran the entire marathon in 4:10:03, which I think is pretty dang good.

I look forward to running more 5K races this fall, and hope to work myself up to a 10K or two as well.  I think I may have even talked my wife into doing a 5K with me, which should be fun.

As I continue training I need to learn how to pace myself better, and push myself more – 9:11/mile felt pretty good, 8:30 here I come!

Technology vs. Psychology

Do you write software for a living?  Or design hardware?  Or maybe some of each?  While the particular projects any two software or hardware designers do may be worlds apart, we can characterize what we do in the same way: our work is 20% technology and 80% psychology.

Most of the work we do is 100% solvable – it “merely” requires people and time to accomplish.  It may be difficult, it may be risky, but it’s doable.  Most projects don’t require quantum leaps in technology to accomplish – current hardware and software platforms will do just fine, thank you.  Most projects don’t fail because the IDE wasn’t up to the task, or the compiler, or the linker.  Most projects fail because of the carbon-based part of the tool chain, not the silicon-based one.

All projects have some inefficiencies and problems.  They always start small but aren’t life- (or project-) threatening:

  • The build process is manual and annoying, and therefore error-prone; but most engineers run it before checking in new code, and the errors are always found quickly enough.
  • Code drops from external groups happen less frequently than we’d like, but it’s been okay so far.
  • The external contracting team has found a few bugs in the spec, but it’s nothing that can’t be fixed later, and we don’t have time to check the spec right now.

None of these problems will doom your project on their own.  And because you can live with the status quo, you won’t fix them now.  “I’ll get to that later when I have more time.”  But as the problems multiply, build in intensity and (gasp!) start to constructively interfere with each other, your forward progress will slow down.  It will take longer and longer to do what used to be quick tasks.  Many aspects of the job will become more frustrating, and morale will go down.

Inefficiencies and problems don’t persist because we lack the appropriate technology to fix them – they persist because we lack the appropriate psychology to fix them!

That’s an important thought, so I’m going to repeat it:

Inefficiencies and problems don’t persist because we lack the appropriate technology to fix them – they persist because we lack the appropriate psychology to fix them!

How do we address the psychological aspect?  We need to trick ourselves into doing the Right Things in the Right Ways to make continual progress.

Here are two guidelines for doing the Right Things in the Right Ways:

  1. We MUST make activities that are good for the project as easy as possible and as enjoyable as possible. 
    • Can your pre-commit tests be run automatically?  Yes?  Great – do it!  Make sure they run reasonably quickly, with easy to read status updates.  When the tests are done and passing, can we help the user enter a helpful commit message by supplying a list of the diffs automatically?  Yes?  Great – do it!
  2. We MUST make activities that are bad for the project as difficult and miserable as possible. 
    • Checking in without passing all tests?  Okay, but you have to run this ugly command line, fill out the TPS reports on this slow web page, and get a note from your mom.  Consider making “bad activities” impossible.  Checking in without passing all tests?  IMPOSSIBLE!  Can’t be done.

Two of my favorite geniuses agree with me, so I must be right:

  • Albert Einstein said, “Everything should be made as simple as possible, but not simpler.” We need to worry about making our processes as simple as possible.  Don’t worry about making them too simple, I doubt we’ll get that far.   Can you make it simpler?  Yes?  Then do it!
  • Kathy Sierra said, “Make the right things easy and the wrong things hard.“  She says it much better than me – go read her post!

Of course sometimes we don’t have time to improve a process right now, because we (hopefully) have paying customers banging on the door, deadlines to meet, product to ship.  You’ve got to pick your battles and manage your time wisely.

But we geeks need to spend more time thinking about our psychology – the “how” and “why” of what we do – instead of just focusing on the technology – the “what” we do.

The earlier you find and fix inefficiencies and bugs in a product, the more time and money you save.  In the same way, the earlier you find and fix inefficiencies and bugs in the way you create a product, the more time and money you save.  But you get an extra bonus from improving the way you create a product because it produces not just a one-time boost, it produces a many-time boost!  It’s like compounding interest.  Actually, it’s not just like compounding interest, it IS compounding interest!

High-concept pitches

Links are conversations for Web 2.0.

Welcome to SaidSvec.com!

I finally bit the bullet and moved my site from WordPress.com.

I’ll be messing with the formatting, style and everything else over the coming days, so please excuse the mess.