Monday, November 1, 2010

Google Chrome Pumpkin

Last weekend I went up Monroe with some friends for her family’s annual pumpkin carving tradition. After the long drive out of Seattle (and past Paradise Lake, which is a great mountain biking destination) we arrived at her grandfather’s house. The day involved a hay ride at a quaint farm and hunting for pumpkins in the rain. Most of them were rotted out from the weather, but there were still some good ones to be found.

Once I found a suitable pumpkin, it was time to get carving! Being that I recently started a new job at a large dot com, I figured I would carve something appropriate. Here’s what I came up with:

The Google Chrome logo! It was carved twice as fast as the Internet Explorer and Firefox guys, who were still scooping out their pumpkins as I was finishing up. Here it is lit up in the dark:

I carved this pumpkin in a few steps:
  1. Find a suitable pattern. I couldn’t find anything good on the Internet, so ended up drawing one by hand.
  2. Tape the pattern to the pumpkin, then use a tack to poke through the pattern to transfer the design to the pumpkin.
  3. For the first pass, use a sharp knife to cut out the edges of the pattern as a v-cut. This defines the edges of the pattern. Peel away the rest the rind and even out the depth of the inner areas.
  4. For the second pass, use a spoon or scraper to shave away the areas where you want the light to shine the brightest. I didn’t actually cut any holes through the pumpkin, but still wanted areas of the pattern to be lit up.
Unfortunately, I didn't have a good SLR for these photos and just used the iPhone. Apart from these blog-friendly photos, I have some higher-resolution photos here and here.

Sunday, July 19, 2009

Is Software Engineering Really Dead?

I recently read a very interesting post on a well trafficked software blog claiming that Software Engineering is Dead. After having just spent 4 semesters at a large university to earn a master of software engineering, I was scared. Did I just waste my time and money? Could I have just continued to hack on code to get it to work like I did prior to my educational venture? Knowing first hand that I'm a better engineer for the experience, I can say that this isn't true.

Following is the comment that I posted to the blog:
What scares me about this blog post is that it's sending the message to budding computer scientists and software developers that they don't need to pay attention to software engineering practices. In the absence of any software engineering practices, what is the next best alternative? Glorified hacking with venerated gurus working in dark rooms churning out beautiful code when they're ready to grace the world with their creations?

I think it might be more accurate to say that "CMMI Level 5 project management is inappropriate for developing blogging platforms" instead of the general statement, "software engineering is dead." Several other comments have addressed this, that rigorous software engineering is appropriate for different kinds of projects like compiler development, so I won't belabor that point.

A true software engineer has a tool belt of best practices, techniques, and approaches that can be applied to different types of software projects. Are you working on aileron control software for Boeing? Then you'll apply the heaviest practices possible, with complete software specifications and sign offs possible to CYA. Are you working for a start up with a vague idea, little cash, and no ROI model? Then you'll apply a lighter weight process with an iterative life cycle, rapid prototyping, with a concentration on vetting your ideas and getting to market as quickly as possible to grab market share. Working for an open source project with no revenue model? Then hack away!

Finally, are you somewhere in the middle, working for a medium size project for a dotcom, with a dozen developers, PMs, testers, designers, and business stakeholders with an estimated year over year revenue of 1 million dollars? Then you'll want: the accountability of a medium weight software specification; usability testing to validate initial business ideas; software estimation to determine milestones and deadlines for business commitments; software processes to have repeatable release practices; iterative development to verify that your estimates are correct; and automated regression testing and unit tests to reduce bugs in your delivered software.

Software engineering means different things to different developers. Many of the detractors of "software engineering" view it as unnecessary documentation in the way of getting to the fun part of coding. But you have to remember that software engineering is more than just generating paperwork. It's about knowing what SDLCs are available to the practitioner, such as RUP, Iterative, Scrum, or Waterfall. It's about knowing that estimation and setting milestones is a good thing when you have commitments that you need to adhere to (it's easier to steer a ship around an island if you know its location well in advance). Using project management software is appropriate if you need to make sure you're still on track for hitting your milestones. Requirements analysis and change control is good if you have a client who keeps trying to add features to the product that threaten to compromise your milestones (death by a thousand paper cuts). It's about knowing that commenting your code and documenting your interfaces and APIs is a good thing if someone else needs to know how to maintain your system when you're gone (see 'hit by a bus' above). It's about having repeatable successes by documenting the processes used to get the product to production. It's about using unit testing to prevent new bugs from cropping up when you make changes to your system, and verifying that old bugs stay fixed.

I don't believe that software engineering is dead; otherwise we would all give up on unit testing, setting milestones and deadlines, and writing comments in our code. Knowing that Coding Horror is an advocate of unit testing, I know this is not the case.

Part of engineering is about knowing your goals and constraints, the tools at your disposal, and how to navigate trade off space to achieve your goals. We all operate within a constraint space to do what we do best. I absolutely know that I can't let 4 developers do whatever they want for 4 months to deliver a million dollar ROI project, so I apply software engineering to achieve the business goals within this constraint space. I apply the right dose (this is where craft comes in) of software engineering practices to ensure that I can achieve the business goal, keep my career, and successfully deliver the product on time.

In this regard, software development as an engineering discipline is still very much alive and strong.
This really is a sales pitch for software engineering. It's unfortunate that software engineering is equated to the generation of reams of documentation. It's almost like saying that electrical engineering is about solving differential equations for potential energy fields to predict electron distributions. This misses the point that EE is about building computers and other electrical systems based on first principles and higher level abstractions (transistors, circuits, logic gates, ALUs, HDLs, and logic libraries). It's about designing an electrical system using first and second order principles within your constraint space (hardware, physical, budget, power, etc.)

Likewise, software engineering has a similar scent to it, where the tools and first order principles are different, but the approach of solving a problem within a constraint space is the same. If we think of software engineering as a set of tools and approaches to be used in the right situation, then it's not dead by any means.

Tuesday, December 2, 2008

2009 Western Washington Calendar

More link-love to be sent out here, for the Western Washington calendar John is pimping out too. This would make a great low-key gift idea for the holidays:

2009 Western Washington Calendar


A collections of images from Western Washington. Photography by John Hagen from the Bellingham, Mount Vernon and Seattle area.

If you enjoy photos of tulips, Space Needles, majestic mountains, and freshly tilled earth, check out this calendar!

2009 Taste of Haines Calendar

So I need to send out some link-love for "The Taste of Haines" calendar my brother has posted on If you have a chance, check out some of the excellent photos from the small town of Haines, Alaska, where we grew up:

2009 Taste of Haines Calendar


A collection of images made around the Southeast Alaska town of Haines, Alaska.

Despite the name, it's not about food, it's all about scenic photos and whatnot. So if you have a hard time keeping track of dates and birthdays, pick up a copy!

Monday, December 1, 2008

Lifehacker tip: Label your hard drive with installation date

The weekend before last I went through the tiresome task of upgrading the hard drives on my main desktop. I was up to my scuppers with music and videos without much headroom to do anything else. I always thought that a 500GB secondary drive would be enough, but that didn't last long. Also, they tell you it's a good idea to replace your drives every couple years before you hit the mean time before failure (MTBF). I think those drives have been in my computer before I upgraded to a quad core system a year ago. And who knows how long they were in there before that.

Then it struck me. Instead of wracking my brain and trying to count the months since I last installed the drive, why not label my drive with the installation date? That way I know for sure how long it's been in there, and I have a good idea of when I should replace it next.

So the next time around, there won't be any doubt as to how long this drive has been in the computer. May this hard drive last me well into my Windows 7 years (and maybe 8). Now, only if the OS, or even the SMART info would just tell you when you added the hard drive...


And as a bonus, I need to send a shout out to Acronis True Image 10. I've been using this for a couple years for ghosting my primary hard drive (I just copy everything on the secondary drive to an external drive for off-site storage). In addition to being able to copy and compress an entire hard disk, it also has some utilities built into it for mucking around with your partitions. Acronis gives you the ability to clone a source drive to a destination drive, and will also resize your partitions to fit onto the new drive. This was exactly what I needed for moving things from the old 500GB drive to a 1TB drive.

Thursday, November 27, 2008

Mad about MySpace, or "How do I change my profile picture?"

"How do I change my profile picture on MySpace?"

What started out as a simple task turned into a huge ordeal, highlighting everything I hate about MySpace. These are a few of the reasons I've been avoiding MySpace like it's some sort of Digital Detroit.

I was on my way out the door this morning to meet up with my brother and sister in law for Thanksgiving, and decided to update the status on my Facebook, MySpace, Gmail, and MSN accounts. That's when I noticed that the profile pic on my MySpace account was out of date, and wanted to update it with the same pic on my Facebook account. I saved the pic from one site, uploaded it to MySpace, then went about to set it as the profile pic. Alright, no speed bumps yet.

I started out looking near the profile picture for a link that should say "Change profile pic" or something to that effect. Nothing. Then, I searched the menu for something under the "Profile" menu. Nothing there. Then I remembered that some sites actually have that option on the destination picture, rather than on the current profile pic. I looked on the page with the picture I wanted as the profile pic, and again, came up short. In all reality, I spent about 15 minutes searching, hunting and pecking for something that should have taken at most 3 clicks.

After wasting too much time with that crap, I started to run late, and gave up. Upon returning from dinner, I found a Yahoo! Answers post referring to this problem. For some awful reason, MySpace calls this functionality "Set as Default."

The "Set as Default" button is used to change the profile pic.

What kind of lessons were learned by this example, besides the fact that MySpace is an atrocious website?
  1. Make the simple tasks easy. Take time to understand what your users are actually doing on your website, and optimize your site for that core set of tasks. As a web developer it might make sense to bury an option under 3 layers of menus, but think of your end user.
  2. Do usability tests early and often. Companies that care about making their site easy to use will perform usability tests on their website. This consists of having a set of scenarios or end goals, and having a user try out your site and see what kind of success they have with accomplishing their goals. You can do this with low-fidelity "paper prototypes" or mockups of what your site might look like. Or you can also do this with a nearly finished or production quality site. The risk is that any usability bugs you discover become much more expensive to fix.
  3. Use web analytics tools to understand the behavior of your end user. You can sometimes use web analytics tools to understand your users' behavior on the site. There are tools like Omniture that can analyze "click streams" and see what the common tasks are. After making a small change, you can then analyze the users' success rate with their end goal. Additionally, you can also define reports or alerts for important pages on your website. If you see fewer users on your login page, or fewer users getting from the login page to the login success page, then this tells you there might be a bug on your login page.
The true question is, should MySpace really care that much about the usability of their website? Here are three tactics that MySpace could have applied to find this usability bug, but in the end, I eventually succeeded. Plus, it's not like they have to care about revenue generated from purchases. However, their value is based on their user base and ad impressions. Users are fickle, and you shouldn't give them yet another reason to leave your website for one of the competitors. Hence, bugs like this are still important enough to fix.