The Rime of the Product Manager

| Comments

After I wrote The Maven, I started thinking about what poem I would hack next. I didn’t intend to land on another Romantic–allegedly I do not even like the Romantics very much–but then the title just came to me one day. I want to say “and then the rest happened quickly,” but in fact principal photography took place over a total of four days spread over more than two years. Editing and the the composer’s work came together quite a bit more quickly than that, and only at that point could the rest be declared to be history.

My plan for Rime was to produce a more complex film with multiple sets and multiple actors. This is a difficult undertaking for professionals, much less unschooled hacks who are trying to produce the least amateurish artifact they possibly can. I can say two things about the process: it is apparently difficult to get right, and it is one of the most enjoyable things I do.

With that, I present to you The Rime of the Product Manager:

I won’t drag you through a detailed account of what I meant to convey with the film, but I will say that my message changed from the time I originally hatched the idea to the time I finished editing. The place I landed is hopefully obvious enough. Once again, because artistic license sometimes pulls me to extremes, I should make it clear that it is not my opinion that the role of the product manager (or “product owner,” which is more precise but does not scan) is a bad thing, nor on the other hand do I think Scrum is somehow destructive.

Finally, you might just consider giving the original poem, The Rime of the Ancient Mariner, a read. You can also clone and build the Asciidoc-based screenplay, or just read the full text here:

The Rime of the Product Manager

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
A tired Product Manager
Spies a group of friends
He grabs the young one and proceeds
His great wisdom to lend

The Conference-Goer stands chagrinned
His eyes and mouth agape
The PM grabs his hand and then
His friends make their escape

The Conference-Goer took his seat:
He cannot choose but hear;
And so spoke on that tired man,
The Product Manager.

We started in a coffee shop
Upon a city street
UI mocks were drink to us
And code our only meat

We coded long, we coded hard
We coded day and night
We coded like our days would end
Unless we code aright

None among us told his peer
The features he should build
If we'd have played the manager
Our vision we'd have killed

Then one dark night, we launched the site
Our hearts besot with hope
In Graphite's thrall we watched it all
And dread caught every throat

We watched the charts all day and night
Frowning, sighing gently
Our only goal, the favor of
The Valley Cognoscienti

We got the mentions we were after
Traffic started spiking
The cluster groaned under the load
All servers running to the hilt
We dared to think we might have built
A product of our liking

We bathed in growing revenue
With metrics in our favor
Subscribers new, renewals too
Made these the days to savor

The VCs saw what we had built
And offered to us terms
That we could scarcely not accept
—so much we had to learn!

We closed an A round and we thought
Success was now in hand!
Who could but think that capital
Had ratified our plans?

With all due youthful confidence
We set ourselves to hiring
We poached, cajoled, and outbid for
The staff of our desiring

And what with shiny laptops humming
Could all these hackers do?
They built the features users wanted
Feature on feature accrued

We coded long, we coded hard
But a hacker needs to rest!
With VC funds we bought some cheer
And wine and gin and Scotch and beer
We worked and drank and worked 'til near
Our work was not our best

Now such a team could scarce avoid
A Providential chastening
No one could know that this new flow
Had been our failure hastening

Those early days of coding hard
In cafes on the cheap?
Were gone and in their place we’d built
A comp’ny growing weak

No longer was each eager coder
Focused on our users
No vision animated them
No judgment was within their ken
We looked at our new features then
We judged these features losers

We all agreed the thing we’d need
Without a doubt averred:
I’d hang up coding and become
A Product Manager

The founders’ product vision now
Came through the medium
Of story cards and backlogged scars
Of endless tedium

And I had done a hellish thing,
And it would work 'em woe:
For all had seen, I'd killed the team
That made the comp’ny grow.
You wretch! said they, the team to slay,
That made the comp’ny grow!

Day after day, day after day,
We stuck, no more did we code;
As idle as a painted team
Upon a painted repo

Product, product everywhere
And happiness did shrink
Product, product everywhere
Nor anyone to think

Subscription growth had flatlined and
Our runway shrank to nothing
Subscriber acquisition cost
So bloated we were blushing

That dream team that we'd hired then?
No longer could they trust
We'd have an exit worth their time
So left they as they must

If it were only staff I lost
Survive I just have might
Buy my partner joined the tide
And left me in my plight

There was nothing left to build
The vision we had started
I could only turn and leave
A founder, broken-hearted

And now I fly from show to show
Spreading far my story
To coders young who've yet to learn
What made my heart so hoary

It doesn't matter what your scale
Nor where you got your funding
If devs don't love their users then
Your futures will be plunging

The vision that you started with
To set the world aright?
Must be spread to everyone
Who gives your product life

The sub-creators of the world
Must love the things they make
If you would lead, then you're the one
To spark their hearts awake

They can't be bought with snacks or drink
And process least of all
Can bring the flush of health into
A coder once he fall

And now I fly from show to show
Telling wide my story
To coders young who may yet learn
Where lies their future glory

The old PM, whose eye is bright,
Whose blog with age is stale,
Is gone; and now the Conference-Goer
Departs the conference vale.

He leaves like one who has been stunned,
And is of sense forlorn:
A sadder, wiser hacker then
He rose the morrow morn.

Stopping by the Training Room on a Snowy Morning

| Comments

With apologies, as usual, to the original author:

What class this is I think I know
The slides are on my laptop though
I did not look at them last night
I can’t be sure I know their flow

My Facebook friends must think it queer
That I am gone nine months a year
My eyes betray I did not sleep
But for this class? Affected cheer!

A student jolts himself awake
To ask if there is some mistake
The only other sound’s the hum
Of laptop fans before the break

These slides are lovely, dark and deep
But I have classes left to teach
And miles to earn before I sleep
And miles to earn before I sleep

Journey Zone 2015: PolarZone

| Comments

The 2015 JavaZone was the same amazing event it always is: world-class speakers, JavaZone’s ground-breaking continuous food concept, and an expo floor that’s actually fun to walk around. Like any great conference, it’s a place to learn and reconnect with friends—some whom I only get to see once a year.

JourneyZone—the long weekend away someplace in Norway that JavaZone provides for its speakers after the conference—is always memorable, but this year was truly a once-in-a-lifetime experience. In commemoration, I present to you Polar Zone 2015:

I Wandered Lonely as a Cloud App

| Comments

I wandered lonely as a cloud app
Late of Heroku purchases
When all at once I saw a crowd,
A host of microservices
Beyond the build, beneath the stats
My code in chunks and bits thereat

Continuous was the app deployed
In all its many-splendored parts
They spread in Dockerfiles alloyed
With CoreOS hosts’ very hearts
Ten thousand saw I when I looked
At Kubernetes’ dashboard hooks

The Mesos cluster’s web display
Showed every resource fully used
Yet the goal at start of day
Was just an app for scraping news
I gazed—and gazed—but little thought
That wealth to me this stack had brought

Now oft, when at my screen I stare,
Commenting on Hacker News,
My only company, despair
And the bill from EC2,
Then filled my heart with sorrow is—
The sorrow of the services.

Inspired by Paul Biggar’s fictional dialog on the same topic. See also the Wordsworth original of which I frankly am not too fond, but for which I am grateful on the occasion of my own fooling about.

DISCLAIMER: since I have friends who work with some of the named technologies, I should make it clear that I am not down on any of them. As I have said elsewhere (shameless plug!), distributed systems are bad in just about every way and should be avoided when possible. Fortunately—since I make my living in distributed systems—sometimes they are the only way to do the awesome thing you want to do.

Goodbye, GitHub; Hello, DataStax

| Comments

I’ve had a great time at GitHub over the past year and a half. I’ve traveled to plenty of interesting places, taught thousands of developers how to do a better job working together, and learned quite a bit myself from GitHub’s unique approach to organizational structure. It’s a tautology to say that the experience has changed me, but I think time will reveal that it has changed me in important ways. Hopefully I can write about some of this in the future.

GitHub is a great place to work, but the landscape of one’s career is constantly shifting, and staying on top of one’s own calling requires constant adaptation and re-evaluation. Managing a career is like climbing a mountain, except it’s a mountain whose elevation constantly shifts in response to your own footsteps. My current path has led me, as of today, to leave GitHub for an exciting new opportunity.

I’ll be joining DataStax as their Director for Technical Enablement. I’ve known the folks at DataStax for years, and even did some contract work for them back when I was on my own. When they offered me an interesting position doing what I love, I jumped at the chance. It doesn’t hurt that they’re a classy bunch of people who seem to have figured out how to combine a startup’s pragmatism and adaptability with the structures and attitudes of a mature business.

Starting a week from today, I’ll be focused on helping DataStax channel partners be better at delivering Cassandra-based solutions to their customers. Apache Cassandra and DataStax Enterprise are complex products that solve difficult problems, and people need help getting that job done. I’ll be doing a lot of the same sorts of things I’ve been doing of the past few years—conference talks, classes, workshops, and videos—but focused on the indirect sales channel instead of the end user. This is a whole new world for me, and I’m really excited to jump into it. I will do my best to keep you posted here with what I learn.

Speaking at DJUG Next Week

| Comments

There’s nothing quite like a home game, so I must say I’m happy to be speaking at DJUG next week on Wednesday, October 10, 2012. The topic will be GitHub Power Tools, including such amazing topics as:

  • Pull Requests
  • Issue Tracking
  • Project Sites
  • Custom domain names
  • Team and organization access controls
  • Wikis
  • OPTIONAL BONUS: Integration with third-party services

It’s like the fun never ends! I’d love to see all my Denver friends there, and join you for drinks afterward.

DJUG meets at the offices of FullContact at 1621 18th Street Suite 40 Denver, CO 80202. Food starts at 5:30pm, and my talk at 6:00pm.

SurvivorZone Documentary

| Comments

I mentioned in my last post that JourneyZone had a few surprises this year—which surprises should perhaps not be all that surprising, given that we were riding mountain bikes in the same part of Norway that served as the location for the Hoth scenes in The Empire Strikes Back. (Thanks to Brendan McAdams for that link.)

Whether we should have seen it coming or not, we had a great time. In fact, JourneyZone wasn’t merely JourneyZone. Witness SurvivorZone 2012:

JavaZone 2012

| Comments

JavaZone 2012 is in the books now. I don’t mind saying I love that show and the city it’s in. Oslo might be an expensive place to visit, but it makes up for it by being beautiful and generally easy to get around.

This was my third JavaZone, but my first as a GitHubber. I actually submitted my proposals to the show before even beginning to consider going to work for GitHub, so there was no Git to be found in my talks as originally planned. Happily, the schedule had some holes open up at the last minute, so I was able to give three talks: a brand new lightning talk on Git internals, my talk on software architecture and form entitled Then Our Buildings Shape Us, and an improvised Advanced Git talk containing some new material I have recently been testing out. The response to the latter on Twitter was especially enthusiastic, with more than a few people saying it was their favorite talk of the show. Thank you, Norway! Honestly, I love you too.

This beer was actually in Flåm, not Myrdal

Next was JourneyZone, rechristened “SurvivorZone” for its 2012 instance. JourneyZone is a three-day weekend trip to some exotic destination in Norway that the conference offers to its speakers. This year, JourneyZone started with a 22-mile mountain bike ride across the mountains of western Norway. This is typical summer fare for active Norwegians (and does not seem at all odd to this active Coloradan), but we just happened to get caught in a nasty bit of weather on Friday afternoon. Five hours of cycling through 35-mph winds and freezing rain will take the fight out of you. Let’s just say I have never tasted beer as good as the beer I had in Myrdal that night, and leave it at that.

Outside our hotel in Aurland

After thawing out and resting up, we took a train to Flåm to rest for the day and tour one of Norway’s largest microbreweries. If Flåm were trying not to be beautiful, it would count as the most spectacular failure known to the sons of men.

When we returned home on Sunday night, I hosted the second annual GitHub Oslo Drinkup. Oslo developers came to talk about what they were doing with Git and with technology in general, joined by not a few JavaZone speakers and staff—Git fans all.

2012 The Octocat makes its appearance in Oslo

Thanks to GitHub for the opportunity to evangelize our technology in places like this, to javaBin and the JavaZone organizers for putting on such a great show. God willing, I will see you next September.

Cassandra MVP Achievement Unlocked

| Comments

I was more than a little bit jazzed a couple of weeks ago when DataStax announced that I had been nominated as a Cassandra MVP for the 2012-2013 term. I wasn’t able to be at the Cassandra Summit to receive the designation in person, but I was no less grateful for it.

As an MVP, I’ll be able to participate in the occasional Cassandra webinar, blog in an official capacity, talk to press like a boss, and generally just enjoy an enhanced reputation in the world of the best scalable non-relational datastore on the planet. Best of all, I’ll continue to speak on Cassandra when I’m able. Be sure to look for me to talk about what my new employer, GitHub, is doing in this space.

It’s one thing for DataStax to recognize members of the C* community who have contributed to its success, but it’s another thing entirely for them to shower generous gifts on them. When I got home early on Saturday morning from a week away, I was delighted to find that they had send me tee shirts, an awesome pint glass (pictured with homebrew), and a new iPad! Thanks, DataStax. This was truly a classy gift for a guy who loves you and your product.

The Maven

| Comments

After I wrote Oh, The Methods You’ll Compose last year, I started casting about for what I’d do next. I had just finished writing Building and Testing With Gradle with Matthew, so JVM build tools were on my mind (and in the case of Gradle, they still are). Standing in my kitchen one spring day, not thinking about anything in particular, it hit me that Maven rhymes with Raven. The rest is, of course, history.

A long and interesting history, as it turns out. One filled with glued-on muttonchops, an awesome sister who knows far too much about period costumes and has more 19th-century-looking artifacts lying around her house than ought to be allowed, and a son who shows no small amount of promise as a composer. It is therefore with great pride that I present to you The Maven:

Full Text of The Maven

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
Once upon a midnight dreary, while I pondered weak and weary,
Over files from a project which I'd never built before,
While I nodded, nearly napping, suddenly the build was crapping,
As if some build script's code was jacking, jacking up my source code store
"'Tis a little bug," I muttered, "crapping on my source code store—
Only this, and nothing more."

Ah, distinctly I remember I was just a junior member,
Of a staff who counted building code as something to ignore
An open-source solution neatly I had sought to use completely
In vain hope that I deplete the problems in my source code store—
To fix the troubled build that kept a hold on my poor source code store—
My broken build, for evermore.

And the sullen sad surrender of my servers to the end of
Days when code would build had lent me terrors never felt before
So that now, to still the beating of my heart, I stood repeating
"'Tis some little bug entreating entrance to my source code store—
Some little bug entreating entrance to my source code store—
Only this, and nothing more,"

Presently I took to guessing how my build script might be messing
Messing up the build I thought should work as in the days of yore
But the fact is I was coding, not counting on the foul foreboding
Of a Tool now overgrowing the bound'ries of its building chore
It made its mark upon my code beyond its humble building chore
It owned my build, still wanting more

Deep into the POM file peering, long I stood there wondering, fearing,
Doubting, dreaming dreams no coder ever dared to dream before;
But the silence was unbroken (the error message gave no token),
And my greatest fear unspoken was if again I'd have control
Could I again believe myself to be the one who had control?
To own my build, and nothing more?

Back unto my laptop turning, all my soul within me burning,
Soon again the build was crapping somewhat harder than before.
"Surely," said I, "surely that is what happens when a depend'ncy graph is
Stretched until the length of path is b’yond what man has seen before
Let me see what jars are needed, and their dependencies explore—
'Tis just the jars and nothing more!

"Now adopted as our standard to build each project I commanded
Maven be the tool that we would use to ease our building chore
Straight away it took to forcing us to follow, not endorsing
Its coerc’d opinions now divorcing sense from all my source code store
It took control of every build inside my troubled source code store
I built with Maven, evermore

From the enterprise beguiling this tool my fancy into smiling,
By the standard settings and conventions rigid that it bore,
"Though thy brackets angled, Maven, thou," I said, "art sure no craven.
Mayhap you'd ease the maintenance of my builds and their Sis'phean chore
Tell me, can you ease the burden of my Sisyphean chore?"
Quoth the Maven, "Nevermore."

Much I marveled this ungainly tool to hear discourse so plainly,
Though its answer little meaning—little relevancy bore;
For we cannot help agreeing that no living human being
Ever yet was blessed with speaking tools within his source code store—
Tool or script within the central repo of his source code store,
With such name as "Nevermore."

But the Maven chosen boldly as our standard now spoke only
That one word, as if its soul in that one word it did outpour.
No more meaning then it printed—though its output scrolled and dinted—
Till I scarcely more than hinted "Other builds I've built before;
On the morrow it will leave me, as my builds have failed before."
Then the tool said, "Nevermore."

Startled at the stillness broken by reply so aptly spoken,
"Doubtless," said I, "what it utters is its only stock and store,
Written by a tortured coder whose melancholy's only token
Left both code and coder broken till his tool one burden bore—
Till the dirges of his hope that melancholy burden bore
Of 'Never-nevermore.'

"But the Maven still beguiling all my sad soul into smiling,
Straight I wheeled a cushioned seat in front of build and editor;
Then, upon the vinyl sinking, I betook myself to linking
Fancy unto fancy, thinking what this ominous tool of yore—
What this grim, ungainly, ghastly, gaunt, and ominous tool of yore
Meant in croaking "Nevermore."

Thus I sat engaged in guessing, but no syllable expressing
To the tool whose fiery eyes now burned into my coder's core;
This and more I sat divining, with my head at ease reclining
On the Aeron's vinyl lining which the backlight gloated o'er,
But whose charcoal vinyl lining which the backlight gloated o'er,
My code shall see, ah, nevermore!

Then, methought, the air grew denser, perfumed by an unseen censer
And dependencies whose downloads glut my cache, and even more.
"Wretch!" I cried, "VanZyl hath lent you—by these downloads he has sent you
Respite, respite! and some Red Bull from my cursed source code store
Quaff, oh quaff this can of Red Bull, and forget this source code store!"
Quoth the Maven, "Nevermore."

"Prophet!" said I, "thing of evil!—prophet still, build tool or devil!
Whether useful tool, or whether bane of every coder on this floor
Desolate yet all undaunted, on this code base yet enchanted—
On this build by horror haunted—tell me truly, I implore—
Is there a tool that would not own me? Tell me, tell me, I implore!"
Quoth the Maven, "Nevermore."

"Prophet!" said I, "thing of evil! Prophet still, build tool or devil!
By that Heaven that bends above us—by that God we both adore—
Tell this soul with sorrow laden if, by building with the Maven,
Shall I never make the claim that I retain just some control?
Could some little token of my build remain in my control?"
Quoth the Maven, "Nevermore."

"Be that word our sign of parting, building fiend!" I shrieked upstarting—
"Get thee back to Sonatype deep in the night's Plutonian shore!
Leave no jar file as a token of that lie thy soul hath spoken!
Leave my project's build unbroken!—quit my central source code store!
Take thy POM from out my heart, and take thy cache from my code store!
"Quoth the Maven, "Nevermore."

And the Maven, never quitting, still is sitting, still is sitting
In that pallid project's repo deep inside my source code store;
Its POM files' eyes have all the seeming of a demon's that is dreaming,
And the backlight o'er me streaming throws my shadow on the floor;
And my soul from out that shadow that lies floating on the floor
Shall be lifted—nevermore!

Now would probably be a good time to re-read the full text of the original work. It’s truly a brilliant poem, without which this remix would not have been possible.