Firebones: The Blog

Code. Money. Writing.

Updating to Octopress

| Comments

Today I am giving up WordPress and going with OctoPress instead because I like the static generation, the hacker-friendliness and the plugins. Along with this, I’m purging some of the old posts; mainly the ones regarding the family stock contests and all the StockTwits stuff. I will do a recap on those later, and I guess if you’re really motivated you can find them in various caches, but they served their purpose and they’ve become dated.

In the meantime, a few things make be broken, including comments and possibly a few links, as I try to navigate my way through the migration. By and large, it’s a pretty easy transition if you’re comfortable with Ruby.

At the Coalface

| Comments

Hacker News had a great post recently about whether startups have enough time for TDD/BDD. More here.

Caveat emptor: I haven’t worked in a startup, but have spent most of my career incubating nascent ideas in a startup fashion within a small growth company. My observations:

  • Any emerging solution that’s finding product/market fit within an established company goes through a cycle of preparation, learning, and optimization

  • In the preparation phase, you have a general idea of what you want to do, but no actual users, and you are possibly tempted to worry about standard metrics such as code coverage. This is a sign of a team experienced in maintaining and releasing code, but one not familiar with facing a market Within a company, you have the buffer of longer product cycles, competition for budget, establishing viability.

  • As the team gets closer to having something to market, the techniques that pay off greatly in a stable operation fall by the wayside as factors related to responsiveness and true agility come to the forefront. No one looks at code coverage reports any longer; they’re focused on the client/user/customer needs (as they should be). This is a good thing. They are at the coal face of maximizing learning and establishing product/market fit.

  • At the product reaches a certain level of maturity, the benefits of TDD and BDD start to become apparent again; we’ve now reached a steady-state and the pace of change (and the rate of learning) has decreased. The traditional values around code maintenance are now prized, and we’ve presumably established viability and a sense of what parts of the code we’ll be living with for some time.

Therefore I believe that in the context of a true startup, or for a project that’s acting as a startup within the context of a larger, more stable company, that the value of TDD/BDD is inversely correlated with the rate of learning about the market’s needs; and in a startup, most of the time spent away from the coalface of learning the market’s needs is a net negative.

That said, even in this startup mode, there are certain fundamental pieces of infrastructure which you know will be preserved regardless of market feedback. These are worthy of TDD attention. The trick is to know what is core, fundamental keeper code, and what is going to be tossed out many times over. In my experience, data models, data access and core services last forever; business logic, workflow and especially UI/UX tend to change dramatically as learning grows. Apply your TDD wisely.

On the Fragility of Golf vs Tennis

| Comments

Thought I’d weigh in on this interesting question posed on Paul Kedrosky’s Infectious Greed blog.

While Tiger Woods may very end up winning the tournament, how do these performance surprises happen? What is it about golf, in other words, that makes competency so fragile?

To put some numbers on it, Tiger is deemed the best golfer in the world because he wins 28% of all major tournaments that he enters. Meanwhile a top tennis player, like Roger Federer, wins a significantly higher percentage of majors, with Federer at 35% and the great Bjorn Borg at 41%. Winning competency in tennis is more stable, it seems, than in golf.

What is golf so fragile? The ball doesn’t move, and the player isn’t in motion, so two major variables disappear. Granted, the golf swing is longer and the clubs change, which is not the case in tennis (there are no serving rackets, etc.), but staying in place with the same equipment and a stationary ball are all major advantage.

The answer seems obvious to me, and several of the comments get it right. In a typical round of golf, Tiger Woods has somewhere between 62 and 80 opportunities to exercise his skill against the overall distribution of opponents who each have between 62 and 85 opportunities to exercise their skill as well. In the course of a tournament, this is around 280-300 opportunities. In contrast, a typical tennis match gives Federer or Nadal anywhere from 400 to 700 opportunities to exercise their skill advantage. Over the course of a tournament, this may be upwards of 3500-5000 opportunities. If you consider Woods’ or Federer’s advantage as something akin to the house advantage at a casino, a small edge becomes more definitively pronounced the more bets placed; the confidence of a larger sample size in revealing level of skill is higher than that of a smaller sample size.

Furthermore, in golf, variance in a particular stroke creates dependent events; one bad shot can slightly increase the likelihood of additional bad shots for the scope of that hole (one of 72). In tennis, the scope of dependent events is limited to a single point (one of perhaps 250-300). While smaller than the other effect, this also contributes.

The other factor: within a tournament, tennis matches are played serially and one-on-one, typically progressing from seeded matches where the house advantage is larger to ones where it is smaller. Golf is every player going against a relatively small sample against a long tail of competitors–something similar to the birthday paradox comes into play as the likelihood increases of finding someone capable of stringing together 4 outstanding rounds (relative to their expected advantage) as the number of simultaneous competitions goes up.

Finally, Kedrosky implies that prior performance above the norm in close proximity to the tournament in question should predict future performance. On the one hand, it should be easy to dismiss this. If separate tournaments are independent events, then hitting 14 of 14 fairways the week prior should have no bearing on whether he does so this weekend, no more than the roulette wheel coming up red 14 times in a row should affect the 15th spin. However, you can’t discount this entirely. Good performance is an indicator of lack of impediment (e.g., lack of injury) so to the extent that the course and conditions are similar from week to week and there being no evidence of injury occurring in the intervening week, we at least know that some of the factors that could degrade from his optimal advantage are not present. Put another way, rather than Tiger being “in the zone”, we may only really infer that he’s “not not in the zone”.

Further related reading: Intensity of tennis match play

Gary Vaynerchuk, Meet Rose McCoy: A Spiel on Performance and Crushing It

| Comments

NPR’s “All Things Considered” aired a Radio Diary tonight about Rose McCoy, a member of New York’s “Brill Building” pop songwriting cabal of the 1950s and 60s. McCoy came to New York at the age of 19 with six bucks in her pocket and went on to have an incredibly prolific songwriting career.

The songwriting environment of that square block in New York was a hotbed of collaboration.

After work, many of the employees would gather at a restaurant around the corner, called Beefsteak Charlie’s. Soul singer Maxine Brown remembers that it was like a music marketplace.

“The place was hoppin’,” Brown says. “Writers, they would run over and pitch their songs. Just right there on the spot, start singing it. And the verse would be on a napkin, and he’d reach in his pocket and the bridge could be on a brown piece of paper bag … [A] lot of the songs that you heard back in the old days were sold right out of that restaurant.”

McCoy had teamed up with a songwriting partner, Charlie Singleton. They set up their office in a booth at Beefsteak Charlie’s.

“We’d write back there,” McCoy says. “People got to know us so well, they used take our telephone calls. We’d meet there every morning, 6 o’clock, and buy a little glass of wine for 30 cents, and we’d sip on that.

You can’t help but connect that to the entrepreneurial activity taking place in your average Starbucks today.

Hell, they even invented an entire company dedicated to bringing beggars (that would be guys like us who want money) and funding sources together on every street corner in America — STARBUCKS!

I am willing to bet that more deals are getting done at Starbucks than ever got done on the fairways, greens and tee boxes of the old boy network. Even at $4 for a freakin’ latte, it’s cheaper plus no sunburn.

–JLM (Jeff), via Howard Lindzon, via Fred Wilson

Collaboration, riffing, working together to create the perfect song, the perfect pitch, the next hit, the next killer app.

As the mid-60s approached, so did change:

The 1950s and early ’60s were the heyday of the professional songwriter in pop music. But in 1964, the music scene was about to change. That year, The Beatles had five of the 10 biggest songs on the Billboard charts. One was a cover of “Twist and Shout,” but the rest were their own songs.

“People like Bob Dylan, et cetera, start emerging [and] perform their own songs,” Bell says. “So they got recognition as a singer, but also a great writer. And literally I saw our industry, for want of a better way to put it, kick the songwriter to the curb, [and] Rose was just another songwriter.”

“When the singers find out they can write for themselves,” McCoy says, “they didn’t want to see your song. They wanted to write their own songs.”

As a result, the Brill Building songwriters had to find new ways to make a living. Carole King and Neil Diamond launched successful singing careers. Some became producers, while others left the music business.

Earlier in the day, I watched the Zapurder-esque video of Gary Vaynerchuk’s FOWA 2009 keynote speech:

[vimeo 3366107]

Gary hits on a number of themes:

  • “Twitter is not a marketing plan.”

  • “Do what you love. Love your damn family and crush it.”

  • “The people willing to get obnoxiously dirty are going to win.”

But the core theme he drove home was that the content producers no longer need the intermediaries. Kanye doesn’t need Apple, he could do everything he does from kanyewest.com. The democratization of technology and of distribution means that talent wins out in the end for those willing to get dirty and “crush it”.

What Vaynerchuk, Dylan and Diamond Have in Common

Yet in thinking over these two pieces today, I’m struck by the contradiction in Gary’s message. He’s obviously crushing it, speaking all over the country, pumping out Wine Library TV episodes like a maniac. If you’re a lone democratized voice creating content, do you see the parallel to the Brill Building era? It’s not just being a brilliant content creator, just as it wasn’t enough after the Beatles arrived to simply be a brilliant and prolific songwriter. The ones who made the leap and survived were the songwriters–the Dylans and the Neil Diamonds–who got dirty, crushed it and amplified their skill set to adapt to a new environment.

The logical conclusion then, as it appears to be now, is to learn how to perform their own content. To become not just a content creator, but the performance artist. Alignment of passion.

There are no doubt wine store owners and liquor store owners as passionate about their work as Gary, who could create content and ideas just as good, but without that passion to work hard and put themselves out there to perform, you’ll never hear of them. Vaynerchuk is the ultimate performer of his own content–no one else could pull it off or amplify it any better than he can. You can’t perform a “cover” of an impassioned Vaynerchuk rant. Content and performer and performance are inseparable.

If you’re creating brilliant content, and you want it heard, you have to become the brand. Maybe it takes getting into fisticuffs with a hated rival. Maybe you have to speak at 300 dates a year. Maybe you have to have the shameless knack for self-promotion. Whatever it takes.

Content is just the start. Focus on building value and intellectual capital first, but realize that at some point you’re going to have to create the social capital, and then turn that social capital into flat out live performances. Keep this in mind when you have heady thoughts about democratization of voices, and the rise of the masses.

Rose McCoy is 86 now, living in Teaneck, NJ, about 25 miles away from Gary Vaynerchuk’s wine store. No word if she’s a Jets fan, but if anyone has the passion to turn her into one, it’s Gary.

Surely You’re Joking, Mr Unfunnyman!

| Comments

Unfunnyman Jay Leno is moving to 10PM (9PM Central) next year as NBC tries to shake things up and improve their ratings for the timeslot.

The real story here is that NBC gets about four different things: first, as ad revenues fall, they get a cheap-to-produce air-filler. Second, and perhaps more importantly, they buy time. By locking up Leno, they prevent him from directly competing with Conan O’Brien out of the gate, and all but ensure that a quick Leno flameout marks the jumbo-jawed one as damaged goods for long enough to let O’Brien settle into the new time slot. Third, they get to keep Leno around as an insurance policy if O’Brien’s humor doesn’t capture an audience. Finally, Leno’s shtick has a short shelf-life, especially five nights a week in prime time; by forcing it to play itself out in a single-season overload, they can make it even more difficult for Leno to go elsewhere, as other networks won’t want to take on a broken format and a big salary whose career has no third act.

I don’t see much upside for Leno short of the money and the option of riding in to save the network should Conan fail miserably.

Search Strings That Make Me Happy

| Comments

I don’t get a ton of traffic from search engines, but when I do, it’s entertaining. By far, the most traffic I get is related to my Tuesday Night Football post. And then there was that period of time when Joe Frazier swimming sent me rocking to the top of some keyword chart:

(You gotta love Johnny Bench being disqualified for “walking”.)

But the phrase that made me the happiest, simply knowing that some putz out there besides me has the words of Dick Enberg so indelibly etched in his brain that he must resort to Google to purge the demon echoes is that fateful line from Mattell’s Talking Football: “trap up the middle for ten uh oh penalty”. Such a dramatic turn–you were all set, had the trap play going right into your opponent’s prevent defense, it looked like you got the first down–and then you lose.

O’Reilly Gets Twitter

| Comments

Earlier I posted a very brief post on how I got Twitter. Recently, Tim O’Reilly did the same.

The key insight, which I’ve made elsewhere while trying to explain the value of Twitter in one-on-one conversations, is this:

In many ways, Twitter is a re-incarnation of the old Unix philosophy of simple, cooperating tools. The essence of Twitter is its constraints, the things it doesn’t do, and the way that its core services aren’t bound to a particular interface.

I truly believe that Twitter, or something like it, will be looked upon as one of the essential tools of the internet, as transformational as email or RSS/Atom syndication: a universal utility.  The only impediment is standardization, and that path would seem to lead through XMPP.  Unlike a distributed service such as SMTP, Twitter’s utility relies on centralization of identity and service; an XMPP-based Twitter might have to arise out of a million internal corporate Twitter clones being exposed over the net via XMPP, in much the same way as external SMTP gateways eventually obliterated AOL’s walled garden approach to email.  The race will be whether that outcome, facing many barriers, will come before Twitter itself is enshrined as a free public utility used to drive other business in the same way that Google search became a free service.  Right now (as O’Reilly points out, Twitter has no credible competition which itself is a risk; if Twitter sits still, the walled garden becomes a fatal limitation since it will effectively become a bet against the internet.

Tangentially related to this, today I was reading MacroMates’s TextMate documentation and ran across this clear passage on the philosophies of TextMate:

From UNIX we get that Tasks and Trends Change. In concrete terms this means that instead of writing a command (in UNIX) to solve the problem at hand, we find the underlying pattern, write a command to solve problems of that type and then use that command in a script.

Connecting O’Reilly’s post to the TextMate/Unix philosophy, we see that Twitter, by design or by accident, solves problems corresponding to an underlying pattern encompassing user-extensibility, fast evolution, web transcendentalism, and simplicity.

The evolution of StockTwits as a social investing medium at a time when the market is punishing investors demonstrates the value of the principles the utility supports.  StockTwits is a great Twitter hack, and it evolves quickly (e.g., after starting with ticker symbols prefaced with dollar signs, market updates get prefaced with double dollar signs; the filtering mechanisms inherent to Twitter eliminate the downsides of traditional first generation web-based stock discussion media).

If I had to describe Twitter, it would be “like useful ESP”. Or maybe more accurately: “like ESP, but with useful filters.”

Labor Day Brisket on the WSM: A Smoke Report

| Comments

This Labor Day weekend, I decided to step up my game and smoke a brisket. Here’s the play-by-play.

Prep

First, we picked up a 8.7 pound packer (i.e., untrimmed brisket) in cryovac from Costco for $2.89/lb. This is about the going price these days, although you can occasionally find untrimmed brisket for around $1.99/lb if you keep your eyes open. Saturday night we trimmed it up to within 1/8” to 1/4” on the fat side, and trimmed down the notch of fat in between the flat and the point, then applied a very basic rub all over (see below) and threw it in a 3-gallon zip lock bag for the night.

With low and slow brisket, you figure about 1.5 hours per pound. At a little over 8 lbs. trimmed, that looks like about 12 hours to finish. Since showtime for the block party was between 4 and 6PM on Sunday, I wanted to get the meat on by 6AM, so I got as much of the smoker set up as I could beforehand. I filled the charcoal ring with Kingsford, mixed in the equivalent of 6 fist-sized chunks of apple and cherry. Since the wood chunks were smaller that fist size, I had to guess, but it was generally 2-4 chunks. I foiled the water pan (to help with later cleanup), got all the supplies ready (lighter, 20 briquettes and rolled up paper in the chimney starter, a tile to set the chimney on, watering can, assorted thermometers) and assembled the smoker.

Wakey-Wakey

On 5AM Sunday, I rolled out of bed when the alarm went off, went down and got ready to fire things up. Since I had the ring of charcoal already prepared, and since I’d read that you don’t really want to light a chimney on concrete (at the risk of shattering or scorching the concrete), I put an extra bathroom tile on a small retaining wall in our backyard and fired up the chimney. Within about 4 minutes, I was rewarded with a large “crack” as the tile shattered into five pieces. The briquettes were half lit, but I quickly put them into a notch in the center of the ring of charcoal I had prepared. This is the Minion Method, where a small number of coals in the center gradually burn outward, lighting other coals, producing a steady, long-burning fire that you don’t have to add fuel to throughout the cook.

At 5:25 AM, the fire is going. I filled the water pan with warm tap water, reassembled the cooker, set all vents to 100% open, set up the thermometers up and waited. During this phase, the idea is to catch the temperature on the way up, since the smoker is easier to make hotter than it is to cool down once it’s too hot. By 6:00 AM, the temperature is at 205 degrees, but by 6:15AM, it’s at 260, so I quickly throw the meat on, shut down the vents to 50-50-0, and wait. At 6:30AM, rather than the temperature dropping because the meat went on, it rose to 265, so I had to close all the bottom vents.

In some sense, putting the meat on before the temperatures had stabilized was a mistake, but one that only cost me more time spent managing temperatures. Generally, you want to wait until the smoker levels off to an even temperature before putting the meat on, but I really didn’t want to have to finish this thing in the oven, so I decided to try to stabilize the temperature on the fly. It worked out okay. In addition to closing all the lower vents at 6:30, I adjusted the lid (there appeared to be a little leakage, possibly letting in more oxygen) and waited. By 7, the temp had only dropped to 260, so after doing some more reading, realized that I could also shut down the top vents. This did the trick, and the temps were down to 245 by 7:15, so I opened things up to 25-25-25, re-opened the top vent, and waited.

After managing temperature the whole day, I learned a few lessons. First, there’s about a 10-15 minute delay between an adjustment that you make and evidence of the adjustment showing up in the temperatures. Second, small incremental adjustments work better. The move to 25-25-25 with the top vent wide open was a big adjustment from a closed smoker, and as the temp started to rise again over 250 at 7:30, I overreacted in the other direction, went down to 25-0-0 only to see the temps drop to 227. Finally, after a series of ever-finer adjustments, I realized that 25-0-0 was about right to stabilize things, and by 8:30 I was able to quit baby-sitting it since I’d pretty much locked it in at 250.

The ideal range for low and slow is 225-250 degrees. All these temperatures are top vent temperatures. I hadn’t calibrated by thermometers, but through a little bit of careful measurement and comparison, was able to convince myself that there were identical, and therefore I had some confidence they were all in the ballpark of accurate.

At 10:00 AM, I added water for the first time. The temps spiked over 250 because I had to open the side door, but came back down right away. My theory was that I might have doused some of the coals by overfilling. The temperature dropped into the low 230s, so I went 25-25-25 on the vents until by noon, the temps were back at 240.

At noon, the meat had been on almost 6 hours. With a brisket, ideally, you want to turn twice. Once at the halfway point for the duration of the smoke that the amount of meat dictates (in my case, 6 hours) and once at the three-quarters point (9 hours). At 12:15, I opened up the lid for the first time, turned the meat end-for-end to try to get an even cook, and added more water.

Half Way Brisket

After I got the lid back on, I realized that I forgot to spray the brisket with apple juice, so I had to open the lid again and take care of that at 12:30. Naturally, the temperatures started to spike again, so more vent management. I actually ended up having to add some more cool water, close all the vents again, and close the top vent down to 25% for 15 minutes to get things back to 243.

Sides

Meanwhile, the ABTs were being prepared. We did a mix of traditional ABTs (split jalapeno peppers stuffed with Lil Smokies and cream cheese, with a sprinkling of rub, all wrapped up in a half-strip of bacon) and Lime Cilantro ABTs (same thing, but mixed garlic, fresh-squeezed lime juice and cilantro in with some garlic cream cheese.) At 2:00PM, the ABTs went on the lower cooking grate, and the cooker had by and large stabilized at 240.

This freed up time to get the beans ready, and to prepare for the last turn (as well as the first check of internal brisket temperature.) For the beans, we used the Virtual Weber Bullet default recipe, Bush’s Baked Beans, Brer Rabbit Molasses, ketchup and mustard, brought to a medium simmer for 10 minutes and transferred to an aluminum foil pan for insertion on the lower grate. At 3:25PM, I flipped the brisket, pulled off the ABTs, but on the beans and got a reading of the internal brisket temperature. It clocked in at 159 on the Polder instant read thermometer. This was pretty much on track, perhaps a little behind where I thought we’d be. I had prepared to be done as much as two hours early, and this made it look like I might be at the end of the 4-6PM window.

At 4:25PM, the temperature was 230. We opened up, stirred the beans one time, and put the Maverick probe in the brisket. Still 159 internal (we were measuring in a slightly deeper, better spot) and I rationalized this as the “plateau” that meat sometimes reaches.

I started paying less attention to the smoker temperature at this point, and let the meat guide the way. The temperature had stabilized at 250, and the meat was at 170 at 5PM, 178 at 530. By this time, the fire had died down a bit and the vents were wide open. At 5:50, we reached 185 degrees. Since everything else was ready, including the beans and all the stuff the neighbors made, we sliced up the brisket and served it. I scarfed a few of the scraps, sliced up the point, ate a delicious chunk, and put the rest of the point slices into a piece of foil which I threw back on the smoker for a little bit for burnt ends for Monday.

Slicing

I’m not sure if we would have been better off resting the meat or not. It was pretty good, plain and with Smokehouse BBQ sauce (hot). (The burnt ends turned out great, by the way.)

Sliced Brisket

What I Learned

  • Catch the temps on the way up, and plan another 30-45 minutes to achieve some sort of stabilization before throwing the meat on.

  • The morning was relatively warm, maybe 72 degrees, so I probably could have gotten by with about 12-15 coals instead of 20 to start.

  • On a day like the day I cooked, with temps in the 70s and 80s, light wind and only sun after about 2PM, 25-0-0 to 25-25-0 is pretty good to dial in a stable temperature of 230-250.

  • On an 8.7lb untrimmed brisket at 240-250 degrees, 1.5 hours per pound is about right.

  • I probably need to start a little earlier than I’d expect, to allow time for the meat to rest.

  • It’s true, no matter how many ABTs you make, they’ll always be gone. 24 consumed by 5PM.

  • Don’t mess around with the chimney starter. That thing gets hot.

Cooking Log

TimeTempVent 1Vent 2Vent 3Notes

0525 N/A 100 100 100 Coals on

0600 205 100 100 100

0615 260 50 50 0 Meat on

0630 265 0 0 0

0700 260 0 0 0 Closed top vent, adjusted lid

0715 245 25 25 25 Reopen top vent

0730 250 25 0 0

0750 227 50 50 25

0800 245 25 25 25

0810 252 25 0 0

0822 227 25 25 0 Temp was falling like crazy here

0900 251 25 25 0

0915 257 25 0 0

0930 241 25 0 0

1000 237 25 0 0 Added water

1015 240 25 25 0

1030 233 50 25 25

1100 235 25 25 25

1130 239 25 25 25

1200 242 25 25 0

1215 243 25 25 25 Turned meat end for end, added water

1230 259 25 0 0

1300 257 0 0 0

1315 259 0 0 0 Closed top vent to 25%, added cool water

1330 244 25 0 0 Re-opened top vent all the way

1400 243 0 0 0 Added ABTs

1430 231 50 0 0

1446 233 25 0 0

1500 240 25 0 0

1525 240 25 0 0 ABTs off; beans on, brisket at 159

1600 231 25 0 0

1625 231 75 0 0 Stirred beans; Brisket 160

1700 240 100 100 0 Brisket 170

1730 250 100 100 75 Brisket 178

1800 240 100 100 0 Brisket 185

Note–I’ve since learned that brisket really isn’t done until it is at least 195 internal temperature, and preferably as close to 205 as you can get. This early brisket was still good, but not as good as what I’ve made since then (9/14/2012 update)

Great Failed Startup Post-Mortem

| Comments

Roger Ehrenberg gives a great post-mortem on the demise of Monitor110, a startup focused on monitoring the web for early detection of investing trends.

I really liked the premise of Monitor110. I think there’s a large, untapped world of ideas out there involving the application of natural language processing to the voices of the masses.