Requirements Document: Inception Collector’s Edition

5 10 2010

When Disney released the Blu-Ray of Hayao Miyazaki’s Ponyo without a digital copy option I was very disappointed. Although I had no one but myself to blame, in that I never bothered to actually tell Disney that was important to me.

So, for the convenience of the good folks at Warner Brothers, I’ve specified what is required for a proper collector edition of Inception in the style of a software requirements document.

  • Feature Film on Blu-Ray, featuring multiple full-length commentaries by the directory, cast, and composer.
  • Feature Film on DVD
  • Feature Film on HD-DVD (just in case)
  • Feature Film Digital Copy for iTunes/iPhone/iPad (Full HD)
  • Soundtrack CD
  • Soundtrack on 200g vinyl
  • Soundtrack on iTunes Digital Copy (Lossless)
  • Glossy photo book featuring stills from production.
  • Annotated Screenplay autographed by Christopher Nolan printed on 100% cotton archival paper and bound with hand-embossed Corinthian leather.
  • One square inch of fabric laser cut from Joseph Godon-Levitt’s vest, matted and framed.
  • Glass vial containing a single hair plucked from one of Michael Caine’s eyebrows.
  • A high-five and approving smile from Ken Wantanabe.
  • Personal style consultation and shopping trip costume designer Jeffrey Kurland.
  • Hand delivered to your home or office by your choice of Leonardo DiCapro, Ellen Page, or both.

I don’t want to be unreasonable. I’m perfectly aware that some of these items may be difficult to source and/or manufacture and therefore could impact the release date. I am, however, willing to accept incremental delivery on these items, please feel free to send these items to me as become available. Thanks!





Simple, yet polished

25 07 2010

I have been thinking a lot about polish lately. How it’s often better to have a simple app that’s really polished than a more complex app that feels clunky.

My son is part of the 10% of the population that is left-handed. He’s also part of the 8% of male population that’s color blind. Imagine how he felt when he saw that the iPhone port of Peggle specifically supports color-blind lefties?





Oh no, not more of the same TDD discussion Tedium.

21 10 2009

Hello comrade,

I’ve moved this post to the new Ministry of Coding Blog.

Direct link.





It takes a good journalist to make software development interesting

14 04 2009

Emily (who is best described as the heart of I Can Has Cheezburger) came into my office yesterday and looked around. “KING 5 news is going to be here, so we just want to make sure that there’s nothing offensive up anywhere”

There wasn’t. We used to have a copy of the Hot Chicks With Douchebags book as part of our display library, but that’s missing now. I was displaying my “Wrong-Face Panda” picture, but that’s meant to be disturbing, not offensive. Nonetheless, I tidied up the office a little bit and sat with better-than-normal posture as the news crew visited Ben in his little closet of an office, and then went around, poking their giant camera into different workspaces. They came to my office ,where Ben introduced us as the development team.

The news guy just shrugged and gave a sarcastic “Oh, software development, that’s really interesting” before walking away.

So I yelled back “Yeah, so is local news!”

That’s right, I actually came up with and executed a Winston Churchill-style zinger at the right time, not the day after.   I’m usually not so touchy, but that guy was just being a jerk. Think about it: would you come into some professional’s office and insult what they do?

The truth is, that the story of how we do software development is interesting. Some examples:

Our user activity is massive. We serve six million page views daily. We have a database of over four million funny pictures. A thousand new people register to participate in our community every day. We tally and act on hundreds of thousands of votes every day, in real time.

We’re a small team and we have to generalize and do more with less. We don’t have a dedicated test person, so we make our own robots to test our sites for us. We move quickly (turning around new ideas in days or weeks instead of months or years) yet we have really high stability with fully redundant systems that repair themselves if something goes wrong.  We deploy new code with zero downtime by pulling a server out of service,  upgrading it, and putting it back into service after we’ve tested it.

All of our office infrastructure is virtual. There are no desktop phones or LAN servers. We use Internet-based tools like Skype,  Tokbox, Google Docs, and ReviewBoard to collaborate. Some key members don’t even work from this office, yet they are just as productive as someone who works right here. Our office is essentially paperless, the only time I’ve ever used an office printer was for personal use (sorry).

We have created a public API which opens up our systems to any developer who wants to contribute or use our content in their programs. You can take pictures on your iPhone, drop text on them, and send them directly to us using a program that some guy made for free just because he wanted to.  We’re plugged in to the emergent web ecosystem; we integrate with WordPress and Twitter and YouTube and Digg and Facebook. We’re working on all sorts of new stuff that will be really cool.

We’re living and working in the bright and shiny future of tomorrow, as a profitable Web 2.0 company.   The truth is, I don’t really care if some old-media guy and his ever-shrinking audience doesn’t get it.





Script Frenzy 2009 – Writing a Screenplay in 30 days. Here I go.

3 04 2009

When I was about to start my first attempt at National Novel Writing Month, a friend of mine said “Martin, you’ll have no trouble with this, you have a skill for telling things as they are

“Thanks, but I’m writing fiction”

“Oh.Never mind, then.”

In the same spirit (and organized by the same lunatics) as National Novel Writing Month (every November) is ScriptFrenzy (every April). I participated in ScriptFrenzy in its premiere year and managed to finish a flawed but readable script for a feature film about an insecure superhero investigating a crime involving his former partner who was framed for taking performance enhancing drugs.

This year’s script is for a two-hour pilot for a television drama. It’s set a few years after a mysterious natural disaster which has destroyed every large city on Earth. My characters are (so far) a former Ju-Jitsu instructor turned fisherman turned militia leader, an agrarian bible scholar turned underground spy, a cokehead airline pilot with political ambitions, a fugitive former CIA agent taking refuge with old mafia connections, a shameless disaster profiteer, a teenage girl trying to break away from the UFO cult her family is in, a HAM radio geek turned talk radio superstar, and a cute young journalist who rides a Vespa (her character needs some more depth, obviously).

I’m working under this basic formula, but it’s changing from moment to moment:

(Left Behind – Kirk Cameron/evangelical message) + (Battlestar Galactica – Cylons/Space Travel) + (The Sopranos – pop psychology)  + ( World War Z – Zombies ) + (X Files – creepy sideshow episodes/aliens)

The best thing about writing a TV pilot instead of a feature film is that you don’t have any pressure to wrap things up. I’m going to just open up a whole bunch of messy loose ends and leave them there with an outlandish cliffhanger ending. It seems to work for J.J. Abrams.

After the first two days, I’m off to an OK start. Last night I literally fell asleep at the keyboard and typed an entire sentence with my eyes closed. Upon further inspection, I had to throw it out as it had no vowels in it. Tonight was better and I managed to get up to 8 pages (target is 100 pages in 30 days, so I’m a page or so ahead of schedule).

A big part of making a writing project like this succeed is the visible public commitment to meeting the deadline. This is the same reason that many teams get benefit from doing daily stand-up meetings, is that coders can stay focused more easily when they commit to action in front of their peers. By telling everyone that I’m doing this, it’s a lot harder to just give up silently and go back to watching Hulu or playing iPhone games.

Wish me luck.





One of the Coolest Things I’ve seen in a while.

24 02 2009

Construx to Offer Free Training to Laid-Off Software Developers

This is a total win-win.

Laid off people get some training to keep themselves sharp when they’re not working, and a recent line item to put on their resume.

Construx gets some additional brand awareness/mind share/word of mouth (just think of all of those resumes going out to their target market). They also get the advantage of filling up their classes at a hard time to do so. Trainings like theirs (I’ve been to many) work better with a critical mass of participants.

Here’s hoping other companies will do creative things like this.





It’s Like Working in a Record Store

30 10 2008

Here I am, posting for the first time in a very long time, which is kind of a shame as I had been meeting my at-least-one-post-a-week schedule for a while. Here’s the story:

A few months ago, I decided that it might be time for me to change jobs. While I had learned a lot working with both my client and my staffing agency, I felt there really wasn’t anything exciting on the horizon. The project I was working on was described as “wholly unremarkable” by Gizmodo, which I thought was about right.

The biggest issue for me, however, was the structure of the development organization. The people who created ideas and the people who implemented ideas were never the same people, by design. And while there was a possible opportunity for me to move into doing more idea creation and less implementation, I don’t want to go post-technical yet.  I like writing code.

I did enjoy playing the role of full-on code monkey and improving my chops at the bottom of things. I’m a much better hands on-coder now than I was.  Not only do I write better code than I used to, I’m better at talking about code. I did a handful of presentations on the whole tdd/refactoring/code qualities/design patterns universe. Trust me: nothing helps you understand where your weaknesses are better than having a room full of developers asking you tough questions about a new concept. I also got to do SDET stuff for a while, which is something that all developers should do from time to time (I have more to say on that concept in a later post).

Anyway, I cautiously started looking for something new. I put the RSS feed of a Craigslist job search into my Google Reader and waited. I only responded to a small handful of listings that seemed like interesting companies. One company could have been really good for me, but they were planning on moving from Fremont to East Bellevue. While I don’t want to come across as the latte-drinking Seattle snob that I probably am, I’ve really come to enjoy not driving to work and I’m seriously not ready to ride my bike from Ballard to Bellevue.

And then, one day, this comes up in my RSS reader:

Be a .NET Developer for Cheezburger (http://icanhascheezburger.com) (Lower Queen Anne, Seattle)
Help us make the intarwebs a better tube for millions as we develop some amazing tools and features (we’re more than just a blog under this fur!).

I’m not even huge lolcat fan, but I have realized that I’m an internet culture person. I read in an article about Internet Trolls (which I’m not, just to be clear) that their favorite video game is Portal and their favorite TV show is House. I thought “Oh no! That’s me!”. Besides the Portal/House connection, I blog (of course), have a Flickr stream, I subscribe to few dozen RSS feeds, I listen to streaming radio on my chumby. I listen to podcasts on my iphone. I use facebook/linkedin/twitter to keep in touch with people. Heck, even the times that I specifically unplug from the network (NaNoWriMo and ScriptFrenzy) are essentially internet culture things that happen largely asynchronously.

So, after three weeks of working to make the intarwebs a better tube, what’s life like at the Cheezburger factory? It’s like working in a record store, only for internet geeks instead of music geeks. There’s still a lot of real work that needs to be done, but it all essentially centers around helping people do a better job of wasting time online. Or, if you want to take more uplifting view on it: we make a few hundred thousand people happy for a few minutes every day.

Besides just being in a position to both create ideas and implement ideas, the favorite part of my job is when we get together for Thai food on Thursdays and just talk. We talk about our favorite webcomics (in what would come as a surprise to nobody, Garfield minus Garfield and XCKD are both universally loved). We wonder aloud what kind of people will come to the Fail blog meetup. Someone noticed the “NEDM” inscription on a picture of Happy Cat. It turns out that “NEDM” is an acryonym from the YTMND community which stands for “Not Even Doom Music”, which is to say that something is so horrible that not even the soundtrack from Doom can redeem it.  Yeah, Internet geeks, srsly.

One specifically cool thing about working here is that all of the infrastructure is on the cloud. There’s esesentially no LAN. We use gmail and google docs instead of exchange/office. We use the Mercurial distributed source control system. We use ReviewBoard for code reviews online. The result? I can work just about as well from home or from a coffee shop or from Europe (as one of our developers does) as I can from the office.

And now that things have settled down, I’m renewing my pledge to keep a blog posting schedule and try to write at least one thing worth reading every week.  Wish me luck.





Clearwire: Don’t get my hopes up like that!

12 09 2008

I got a call today from a number I have never seen before from 404 area code.  Rough transcript below:

Rep: Hi, my name is [x] from Clearwire.

Me: Hello.

Rep: I want to talk to you about your clearwire service. Got a moment?

Me: Sure. 

Rep: How is your ClearWire service these days?

Me: Not great, actually. After any intensive usage (downloading, streaming, uploading) it slows down a lot. I think I’m being throttled.

Rep: Do you use a desktop or a laptop?

Me: Uh… both.  I use a wireless access point.

The full answer is that I use the wifi with two laptops, an iMac, a Wii, a PS3, a chumby, and an iPhone, but that’s pretty wordy.  At this point, I thought she might tell me to move the access point far away from the ClearWire modem. Something I had already tried which solved nothing. Instead, I get this:

Rep: Do you want to try our laptop card for free? it’s the new “2.0″ and it works much better.

Me: Uh, that won’t work, as I’ve got multiple laptops.

Rep: Well, I can send you multiple cards.

Me: No thanks.

Rep: OK then. (hangs up abruptly)

The worst part of this is that it was a sales call pretending to a be friendly check up on how I felt about the service. I thought that maybe even someone at ClearWire had read my earlier post and was calling me to say that they’ve seen the light and aren’t going to provide such terrible service to perfectly legitimate internet users. When I wasn’t going to be a sale, there was no follow up about my problem or how I really felt. Shameless. Shameful. Whatever.

All of that, and I doubt that getting the slightly faster laptop card would even solve my problem. The issue isn’t with the base download speed (1.5MB vs. 2.0MB, theoretically), it’s with the aribitrary and opaque throttling. I don’t really need to be able to hit the mysterious limit of my ability to download things at a reasonable rate just that much sooner.





Writers who don’t read, software creators who don’t use software, and The Zune Express

28 08 2008
I’ve moved this article to the Ministry Of Coding blog.




Kind of Chunderwhelmed

11 08 2008

For my birthday (I’m now 100000 in binary) my lovely wife got me a Chumby to place in the kitchen. Specifically, it was to replace the low-quality radio that I had in there. I wanted to be able to listen to internet radio (mostly the KUOW stream) as well as view various photos from flickr.

It does both of the things that I want it to, but neither in the way I actually want.

Internet Radio

Turning on the radio consists of (1) squeeze to bring up control panel. (2) touch  ”Music” button, (3)touch to scroll down to “My Streams”, (4)touch to select my favorite station. (5)touch play. Optionally, if I want to get back to the channel/widget display, I have to (6) touch “done”, (7) touch “done” again, and finally ( 8 ) touch “hide control panel”. 

Yes, that’s 1 “squeeze” and 7 touches to turn on the radio and get back to where I was. Sometimes I want to do this with wet and/or soapy hands. 

Flickr Photos

Flickr has a cool feature where you can get the RSS feed of just about any collection of photographs. You can see the photos your contacts have posted, photos uploaded to a particular group, photos tagged with particular tags, etc. It’s a very cool system. I had assumed that I could just point the chumby at a flickr RSS feed for some of my favorite groups and always get a chance to see new different things. Unfortunately, the Flickr widget doesn’t do this. Instead, I created a simple “Chumby set” in my account, and I’m using the chumby like a simple digital picture frame, looping through the same small set of pictures. It’s cool, but not what I had in mind.

What does this mean to me as a developer?

As someone who both produces and consumes software, this speaks to the difference between a feature and a use case. “Flickr Support” is a feature, while “As an off-camera lighting geek, I want to view new strobist group photos, because I enjoy getting new ideas” is a use case. “Internet Radio Support” is a feature, “as a news junkie, I would like to switch on NPR the moment I enter the kitchen because loading/unloading the dishes is a boring low-stimulation activity” is a use case.

Too often, people are thinking/speaking in terms of features when they should be thinking in terms of use cases. This is not to pick on the good people at Chumby, I think what is more likely is that they were thinking in terms of an entirely different set of use cases than I was. 

To be fair, a lot of things work really well. The chumball game is mesmerizing. The motion sensor works much better than I would have expected. The selection of clock widgets is awesome. My favorite is the death star clock. The sound quality is quite good for such small speakers. Much better than the radio I replaced with it.  I’m still planning  on writing a few chumby widgets of my own, and I plan on getting one to use as a bedside clock-radio. I’m just a little sad that this cute funky toy is so close to what I actually want.





Progressively More Disturbing Contextual Search Results

10 08 2008

 

I was recently searching to see if there’s a standard/ideal way to catch the “potentially dangerous input” exceptions that ASP.NET likes to throw if there’s anything that looks like script injection in the request.

Note: these did not come up in my Google results, but in a page hosting a generally useless forum discussion.

OK, this one is kind of funny. I’ve never watched the show, but I hear that it’s pretty good. I live in Ballard and drive by the signs for the boat tour all the time. I was trying to catch “potentially dangerous” exceptions, and not “deadly” ones, however. 

 

Ignoring for the moment that our culture is already awash in meaningless catch phrases and we shouldn’t encourage people to use more of them, aren’t catch phrases free? If they somehow weren’t free, wouldn’t you be better making up your own?

 

This third one is the most disturbing. Using GPS to track someone you suspect of cheating on you? Added bonus: having an active GPS installed on someone’s car would come in handy for the post-breakup stalking phase. Here’s some free advice to anyone looking into this solution: if your relationship is so bad that you feel a need to track their every move, it’s best to move on. If you need evidence, hire a private detective, because at least that’s kind of cool.

Alas, I didn’t find anything useful with the specific problem I was searching for. I’m just turning off the request validation and dealing with the potentially dangerous stuff manually.





Automated Test Distinctions: The Food Pyramid

22 07 2008

This article has been moved to the new Ministry of Coding blog.

Direct Link





Not Sure the World Needs Another Named Prescriptive Methodology

18 07 2008

This, on the very same day that some tries to create a definitive list of methodologies, Net Objectives (the one-time sister company and training provider for the company I contract through) has just announced their new flavor/version/whatever of Scrum, which they are calling Scrum# (pronounced “sharp”, like C-sharp). It is (as far as I can tell) essentially Scrum + Lean Thinking + Emergent Design + Focus on scalability. Many things that a lot of us are doing already.

To be fair, the approach they are taking is exactly the one that I would advocate, focusing on and being mindful of the principles/values of what works and what doesn’t work. I’m just not sure I can get behind the name.





Respect for People, and Mean-Spirited Trash Talk

17 07 2008

I was at lunch with a few developer friends a few weeks ago when a story of rather horrible code experience came up. Someone mentioned that they should send it to The Daily WTF.

“I don’t really like The Daily WTF.” I said, off-handedly.

Everyone looked at me as if I had said that I didn’t like kittens, or apple pie, or democracy.

“What?” one of them asked.

“I think it’s too mean-spirited” I said, lamely.

I didn’t always feel this way. My position on code-quality-improvement-via-harsh-mocking changed after working with a great developer (the kind that reminds me that I am merely a good developer). He was very focused on code quality and would say things like “I should hop on a plane and fly to where this guy who wrote this is and punch him in the nose for writing this method this way” or just cry out “Jesus Christ!” when he found something that he didn’t like.

Even though we always got along, it made me nervous. If this is what he’s saying about other people’s code, what’s he saying about my code? It created a sort of climate of fear. Not only that, it didn’t do any good to actually improve the codebase as a whole. We still had a team member who insisted on writing things in his own way. He brushed off valid concerns as “well, that guy just hates everything”.

This culture of harsh criticism is what leads people to be generally closed and insecure. Personal example: I thought about releasing the source code to my little Survival-Horror Asteroids game, but I haven’t yet, for fear of having some sharp-tongued rock star developer come along and tear me to pieces. 

None of this is to say that you shouldn’t be discerning. I’m as concerned about the distinctions between (and definitions of) good code and bad code as much as anyone else. I’ve literally had nightmares about having to work with a particularly nasty procedure. I’ve just learned to not be so insecure that I have to insult and belittle people over it.

This isn’t just a problem with developers, either. I enjoy reading about design and usability, and I found a great article about a particularly mean-spirited Flickr thread in response to a screenshot from an iPhone app. The app itself may not look great, but the developer had done nothing to warrant the vitriol of the responses. 

How to make things better:

1. Be kind and respectful, even to inferior coders. When I first read about the Lean Software Development concept of “Respect for People” I read it as “Respect the developers, especially Martin”. But it’s actually omnidirectional. Respect the other developers. Respect the folks in marketing, respect the pointy-haired-bosses (the first step, of course, is to stop calling them pointy-haired-bosses). 

2. Think incrementally. If you’re working with a developer who needs to improve, select a few distinct values-based things that need to be changed when you provide feedback.  If you try to fix absolutely everything all at once, you’ll fail.

3. Be constructive. Comments like “my eyes bleed” or “you, sir, are too stupid for words” don’t help do anything besides inflate the ego of the insult hurler. Comments like “if you do an extract method refactoring instead of copy-paste, it will be easier to understand and maintain” or “some stronger lines of alignment would make this easier to understand” are helpful.  

3a. (update, July-19-08) Realize that reasonable people can have different opinions and pick your battles. I’ve stopped getting hung up on stylistic things such as formatting or casing. I’ve learned to adapt to the consensus of the project. It’s a useful skill.

Also, realize that there’s generally no one right way, most things are tradeoffs. In this de-normalization example, the author is looking into trading one kind of pain (arguably slow joins and more complex queries) for another kind of pain (risk of data anomalies). It’s generally not the tradeoff that I would make, but it surely  doesn’t warrant the “you have no business designing databases” hate that he got in the comments

4. Realize that mistakes are OK and a necessary part of progress. Some developers (including me sometimes) get defensive or insecure when people find bugs in their work. The best developers I’ve worked with never are. It’s not that they never make bugs, but they don’t take their bugs personally.





Is Clearwire right for you? Take this simple quiz!

3 07 2008

Alas, the curse of the early adopter.  I was really excited to switch to Clearwire, especailly after my beloved ISP for many years, Seattle’s own Speakeasy Networks was purchased by Best Buy. I’m not exactly a Best Buy fan.

I should have done some more research before signing up, though. It turns out that Clearwire is actually not for everyone, and the things they don’t support well are not really called out in the terms of service. To help future consumers, I’ve put together a simple guide:

 

Clearwire is not for you if you’re a pirate.

Intellectual property pirate, that is. I think that the company has no problem with peg legs and eye patches. Reading some reviews online, I found that ClearWire openly and aggressively throttles traffic from P2P apps such as BitTorrent. No big deal, I almost never use BitTorrent, and I never ever pirate movies, software, or music. 

 

Clearwire is not for you if you want to watch perfectly legal web video.

Sure, BitTorrent is used largely for piracy and/or pornography, sure the copyright status of YouTube videos is often dicey, but what about Hulu? Hulu is the Republican National Committee of web video, as square, legal, and business-friendly as it gets.  Hulu also provides some of the most conclusive proof that My connection is throttled, as I can reliably watch the first half of an hour-long drama no problem, but the second half is unbearably slow.  Letting me watch the first half of a really engaging show like House but not the second is just mean-spirited.  Now I’ll never know if it was Lupus, Vasculitis, or Paraneoplastic syndrome!

 

Clearwire is not for you if you want to listen to internet radio.

OK, maybe streaming video is too much to ask for even if the video bitrate is well within the download bitrate I’m paying for. How about streaming audio? Well, if I’ve been doing anything network-intensive in the last few hours, the live audio stream from my favorite NPR station to my Chumby stops working.  

 

Clearwire is not for you if you’re a digital photographer.

Every time I try to upload more than a dozen or so pictures to Flickr via the Uploadr, I hit whatever mysterious upload cap there is and the last of them just completely fail with the “Houston, we have a problem” error message. Just like with Hulu, it works fine for a little while before some opaque limit is hit and then it grinds to a halt. How important is this really? It’s not like very many people actually use Flickr.

 

Clearwire is not for you if you need to work from home.

After several years of working from home exclusively, I try not to work from home any more than I need to, but when I need to make a  VPN/Remote Desktop connection to my PC at work, it works out pretty poorly. I know the problem isn’t with my company’s network connection, as when I do VPN/Remote Desktop from a coffeeshop with Wi-fi, it’s like I’m at my desk. Maybe this is meant as some sort of feature? Helping me improve my work-life balance? 

 

Clearwire is not for you if you’re a Linux user.

As linux users tend to be power users who not only download huge ISOs, but also download ISOs using the infamous BitTorrent network. Fortunately, for me, I haven’t been a Linux user for some time.

 

Clearwire is not for you if you’re a Mac user.

This was particularly painful. The first day with a gorgeous new iMac, some software I wanted to run required a large OS X update… which by the end of the download, was coming down at sub-dialup speeds. 

 

Clearwire is not for you if you’re a Microsoft Windows user.

Even more painful and disruptive to download than the OS X updates are the frequent, vital, and huge updates that Windows XP needs.

 

Ouch. That has turned out to be a very negative summary above, and I usually try to be a positive person. So, who would Clearwire be ideal for? Here are some groups of people that I can think of for whom Clearwire would work well enough:

  • The last holdouts of the gopher protocol, those who are convinced that this whole web/multimedia business is just a passing fad. 
  • People who want high-speed internet but don’t actually have any computers or network devices.
  • Dead people.




Finally, I get to talk about Lean Software…

28 06 2008

…even if it’s only for a few seconds.

I occasionally do training seminars on software development technologies. Some are internal to my company, some are external.  Most are on the more technical aspects of Agile software (using the definition of Agile as “any modern software development practices that work”) such as TDD, design patterns,  and refactoring. What I really care about and want to talk about are Lean Software Development and other more overarching values-based approaches to making software, but there doesn’t seem to be the same level of interest. Until today.

This morning, while I was in the elevator at work, I overheard one passenger (total stranger) ask another “so, what does “kanban” stand for anyway?” the other passenger said she didn’t know.

So I pounced!

I managed to cram a pretty good history of how kanban came from the Toyota Production System into a few floors of elevator travel. And I get the sense of satisfaction that comes from making someone’s day a little more strange.





The solution here is not process dogma

13 06 2008

The other day I was discussing a process/dev workflow problem with one of my friends. I managed to get a basic understanding of what the problem was (team disagreement about the importance and sequence of sprint reviews, retrospectives, and planning) but we were both too pressed for time to brainstorm for a solution. He had a meeting to attend, and I had a demo to give.

The only advice I gave was, “The solution here is not process dogma. You can’t just fall back on the Scrum rulebook and say ‘we’re supposed to do it this way’, you have to get to the value of why you should do the previous review/retrospective before the next planning.”

The value, of course, is that you should be taking what you learned from the last sprint and using it to inform your actions of your next sprint. It’s Scrum’s larger-scale feedback loop (the small feedback loop is the daily meeting).  Inside or outside of Scrum, feedback loops are important for making software well.

When I was thinking about it later, I realized that process dogma is never the solution. Software development is intellectual work, and to make a persuasive case with skeptical people, you have to do better than “because the book says so.”





Narcissism

31 03 2008

I was reading the post on Narcissism over at the (always excellent) Coding Horror Blog and I was reminded of something that happened to me.

Many years ago, I was disappointed by my job. I was working at a small consulting company which had been mostly a software development outfit and was transitioning to being more of a general marketing consultancy. I didn’t mind that as much, I have a greater love (or tolerance, depending on your perspective) for marketing than the average developer. Actually, I was driven out by a top-down mandate to “improve our process” which was manifest around trying to adopt development methodologies that were state-of-the-art thirty years ago. It felt as if they were saying to me “all of those things you did to make the last project you ran a big success (tight feedback loops, close developer-to-customer collaboration, design for change, light up-front-documentation)… well, don’t do any of them again.”

So I quit.

In retrospect, I think it would have been possible to improve the situation, but I didn’t yet have a solid handle on why I was doing the things I was doing and how to help a software development team be more effective. I was still essentially “in the closet” –embarrassed that I didn’t want to write 200 page functional and technical spec documents before doing any actual coding. This was before the Agile/Scrum concepts were as mainstream as they are now.

When I was interviewing for another job, I found myself absolutely enthralled by one of the interviewers. He seemed like the single most brilliant developer I had ever met. I was so eager to work with this guy, that I let myself overlook a bunch of warning signs about the organization (legacy code base, previous-generation languages/tools, uninteresting problem domain, deplorable office space, disrespectful management, etc.). I wound up taking the job.

Many months later, as I was trying to figure out how I came to be in the horrible situation I was in, I came to the shameful realization that I thought this guy was brilliant because he reminded me of myself. It was narcissism, plain and simple. Ever since then, I’ve been cautious to think about why I think someone is so amazingly smart.

The same phenomenon came up again last summer, when I did a “Pragmatic TDD” seminar presentation for a handful of development companies. After one presentation, a guy came up to me and said “Your presentation was great. Just brilliant. This is exactly what I’ve been advocating we do for forever.”

Of course I brilliant, I was just like him.

Now, I’m trying to do a better job of being honest with myself, challenging myself, and listening intently to those I immediately disagree with.





(Relatively) Simple Party Photo Booth Project

11 03 2008

One of coolest things about digital photography is the instant feedback loop of seeing what the picture looks like. One of the downsides is that your subjects know this, and often want to get the immediate “how did it turn out” feedback. When I was taking the party invitation pictures, Ethan kept tripping over the flash sync cable trying to get a peek at how the pictures looked. My wireless flash setup is arriving any day now, but that still solves only part of the problem.

Mostly inspired by John Harrington’s far cooler (and more expensive/elaborate) party photo booth rig, I set up a simple one for my Son’s 6th birthday party.

For the setup, I put the camera (Canon Digital Rebel XT) on a tripod with the video out (simple RCA plug) piped into my TV. I set the camera “preview display” mode to “hold” so the camera would send a video signal of the last picture taken until the next one was snapped. The video output is not great (my TV reported the signal as 480i), but it’s enough to give you a sense of the lighting and facial expressions.

For lighting, I setup the Vivitar 285HV with shoot-through umbrella camera right as my main lighting. I had a couple of Sunpak DS-20 cheap optical slave flashes floating around the room to give some extra light, which provided some really interesting medium-tone shadows and edge definition.

The backdrop is a combination blue/green screen that I got when I was working at PlayStream, making server-side software that would integrate with a video blogging app from SeriousMagic (now Adobe) which did the background subsitution in real-time. Other than making a few “this is Martin Cron, reporting live from the White House…” fake newscasts, I hadn’t used it much. It’s held to a ceiling beam with bungee cords hooked to a pair of 3M command clips, which mount easily and remove cleanly without having to use any tools.

This whole thing was triggered from the RC-1 remote control, which I set to a two-second delay which worked out well for a couple of reasons. One, the video output would go blank for those two seconds, which would get the kids to stop looking at themselves on the TV and instead look at the lens. Also, the delay insured that the flash (1/4 power) would have enough time to cycle. Most importantly, it gave enough time to get the remote control itself out of frame, as it has to be line-of-sight with the camera.

Lastly, I set up a simple “prop table” out of frame for the kids to pose with hats, safety goggles, sunglasses, etc.

The cool thing about this setup is that it could be replicated pretty cheaply. The video output cable comes with the camera. The RC-1 is around 30 bucks. While I used diffused off-camera flash, you could do it with available light or (perish the thought) on-camera flash. Instead of a fairly exotic backdrop (blue/green screen), you could just line the kids up against a blank wall.

The most important thing is, of course, that the kids (all around six years old) had a great time and I got some good pictures out of it. I’ll be able to send back prints of the best pictures with the thank you notes.





I, for one, welcome our new pediatric overlords

5 03 2008

From January 2000 until a few weeks ago, I lived (and worked, when I was a freelance consultant) in a townhouse-style condo in Seattle in the Laurelon Terrace complex. I sold it to Children’s Hospital in January to allow them to tear it down and turn it into more condos. It was a good time for me to leave, our family had outgrown the small townhouse, and we had a guaranteed buyer in a down housing market.

This, of course, is why nothing gets done in Seattle. If you tear down a beloved institution (such as Ballard’s Sunset Bowl) to build more condos, people complain bitterly. If you tear down condos to build more beloved insitution (Children’s hospital), people complain bitterly. You think I’m joking about complaining bitterly. Check out the tone of the posts at childrensaction.com. Hell, people even complain bitterly about parking lots being turned into condos. Really.

I’m sad to leave (some parts) of the Laurelon community behind. There’s a lot to be said for shared-space medium density. Getting to know your neighbors, hanging out in the courtyard and and parking lots.

The other parts that I’m not as sad to leave behind? The constantly rising HOA dues brought on by years of neglecting upkeep. The HOA board, generally staffed by misanthropic busybodies whose default response to any idea is “no”. The neighbors who would blur the lines between personal and shared property. Hey, that’s MY bucket you’re using!

I looked into contemporary townhouses, but they are both antisocial and anti-family. Antisocial in that they all seem to be built with an ethic of minimizing shared property/interactions (why have one usable yard used by four families when you could have four unusably tiny yards each used by one family?) Anti-family in the ubiquitous “two bedrooms on the 3rd floor, one bedroom in the basement” floor-plan. You can’t put a small kid all the way down in the basement next to the garage, calling those rooms “bedrooms” isn’t particularly honest.

Note that the bedroom count inflation problem isn’t limited to townhouses. I toured a lot of 3BR houses that were actually “2BR + crappy basement closet”.  In fact, our 3BR home was listed as a 4BR even though it only has three usable bedrooms. Oh well, at least we have a space to store our boxes as we unpack.





More Typeface Snobbery

21 12 2007

I saw this on 37 signals and thought it was the funniest thing I’ve seen in some time.

http://goodiebag.tv/episodes/06_trajan_is_the_movie_font.htm

 





Maybe it’s just me.

23 10 2007

This is probably just me over-reacting as a grammar geek. That, and a person who cares a lot about my dev tools.

I just read the phrase “Integrated IDE” and it really felt wrong to my ears.  Someone who doesn’t know what IDE stands for is less likely to be impressed by an integrated one.  No, “Integrated DE” doesn’t work, either.





Buying Greeting Cards Online? Queue Them

12 09 2007

A friend of mine is doing the software behind a startup web company with a brilliant, yet simple idea. You enter your contacts (with addresses) once, choose a greting card, write a customized note, and then setup the time (birthday, anniversary, holiday, whatever) for the card to go out. So, they sell greeting cards, but the real value is the service of sending the cards to the right person when you want them sent. I can see people setting up their card orders for everyone once at the beginning of the year in one big frenzy and then forgetting about it.

The name of the company is GreetQ (get it, greeting queue?)

It’s sort of like Netflix meets Hallmark. But the cards aren’t the standard lame Hallmark fare, they are gorgeous cards from boutique presses such as Flaunt, Egg Press, and (my favorite) Hello!Lucky.

If you don’t want to go through the trouble of setting up a queue, or you want to hand-deliver your cards, you can just buy the cards and have them shipped to you immediately, without any personalization.

While most customers won’t care, the software behind it is really cool. It’s a ground-up, from-scratch project focusing on code qualities and testability throughout. It’s designed for maintainability, so they can add new features or change existing ones safely and easily.





So, where is it then?

31 08 2007

That’s the obvious question when people see my promotional button (below)

 Ask me about my Mustache!

 It’s still very much a work-in-progress. I just started last week.

But…why?

It’s a fund raising promotion for 826 Seattle, the excellent free homework tutoring/free writing workshop seminar organization that I’ve done a little work with. Every donation helps them help kids learn.

If you want to make a tax-deductable donation to this good cause (every little bit helps) you can do so by clicking on my smiling face at the official mustache content site.





Incrementalism at the Hotel

31 08 2007

I just got back from Portland, where I did two short seminars on TDD (and everything even slightly related, I can’t seem to do anything without talking about Lean Software Development). I stayed overnight at the Ace Hotel.

Besides being extremely minimalist and almost too hip to bear, the Ace isn’t quite finished yet. They left a really cute note in the room to explain this.

 Ace Hotel Note

I especially like the “gives us an opportunity to share our process with the public”. Why not be this honest with your incrementally released software?








Follow

Get every new post delivered to your Inbox.