The upkeep time — a critical metric in GG — was minimal, as these are California Poppies: a native, drought-tolerant wildflower. It only needs a bit of help to compete against imported grasses and weeds. This patch started as just a few scattered flowers. I invested a few 5 to 10 minutes sessions, in winter and spring, to cleaning out the weeds. Once blooming, a few minutes each week dead-heading poppies keeps the bed looking great for several weeks. And by incorporating the time into a stretching break in a bicycle ride, the overall time hit was small and working with flowers is a nice break on a ride! People walking by really liked it. Not enough to stop and help right then, but I decided it would make a great community project: getting people to adopt small parts of their favorite trails.
Sometimes people get bored on the sideline of an Ultimate Frisbee game and need to do something with their hands 😉
This was at the Kaimana Klassik, a high-level invitational tourney in Hawaii. Simply incredible: beautiful, fun atmosphere and great players! The fields are in a partially collapsed caldera and mere steps to the beach: a state park that you camp in for the Klassick. I had worked hard on my throws for months in advance: you just don’t want to shank a shot in front of the world-caliber throwers who come to play and party at the Klassik! I almost goobered it though: taking a few hours of surfing lessons a few days before the tourney began seemed like a good idea at the time. But the constant paddling put an odd strain on my shoulder, my throwing shoulder! I had to bail out of the surfing lesson after a couple of hours to make sure I could still use the shoulder. My instructor got a little ticked off at my wimping out, but when I explained the situation, he got it and very kindly offered to take me out again after the tourney.
I was on the Spirit team: random players coming without a team. The Spirit team usually gets hammered by the tough competition, so I got to gamble more on long throws than normal to get the disc past the well-designed and well-executed team defenses. I made my only two called shots: two full field hucks, right off the pull, end zone to end zone. One was easy; a straight catch the pull and throw in the same motion. We caught them napping and my receiver was past their last man with a few steps to spare. Sometimes, just when the disc leaves your hand, you can feel that it’s perfect. This one came out as a real frozen rope, just zipping down the field, flat as a pancake, bang on target. A sweet, sweet feeling, and an easy catch.
For the second called shot, we knew we couldn’t pull the same wool over their eyes, so I took the pull and threw a slow & steady type pass up to another handler at the twenty yard mark. We had a couple of curl cuts to suck in the defense a few steps, and after one fake up field throw, the handler zipped a fast one back to me. Our fastest guy took off, sprinting down the right sideline. To give him a few steps advantage over the defense, I had to throw it before he made his cut, so he needed to know the where and when in advance. I told him I’d send an inside out backhand down the left sideline, pulling the defense further out away from him, and then curve it deep into their end zone, targeting the middle to give both of us a bit of wiggle room.
The defense forced me to release a little early: I was worried I might have overshot him and anxiously redid the intersection math over and over as the receiver motored down the right sideline while the disc zoomed down the left sideline. But he had great wheels and pulled a sharp curve into the middle once he reached the end zone. And zap! The disc curved in from the other side and hit him in the belly, at a dead sprint, 75 yards away. I kinda had to grin at that one: it’s a low probability shot that you’d miss more often than you’d make. But when a world class thrower mutters “good shot” as we walked back to setup again, you can’t help but feel good 😉
All the practice time was paying off. When we picked up a few new players for the last day, I overheard our captain tell them that when Larry had the disc, they should just cut to any open space: he could hit them anywhere on the field. Then the captain started to walk away, paused thoughtfully for a moment, walked back to the new players and emphasized “and I mean anywhere”; a great feel-good moment for me!
If only I hadn’t broken Michelle’s toe, just before the first game of the first day, it would have been a great weekend!
But she crammed her foot into her cleats before the toe swelled up, played hard all day and then danced hard all night. She was truly radiant with her happy, happy smile and exuberant love of life! She was also smoking hot in a bared-back, peacock-themed top I had picked up for her: “knuckle-bitingly hot” as a friend described it. Several times. 😉 And so the weekend turned out to be pretty nice after all!
I used to dabble in poetry, but much of it was too maudlin to deal with, so I started to focus on fun stuff, like Ultimate Frisbee rhyming cheers, or limericks.
This my last ‘serious’ poem, from 20+ years back, for a proto-girlfriend’s birthday. She was having issues about the big 3-0 birthday for athletes; it was hitting at the same time her knee was giving her recurring problems. This is the moment you intellectually realize you’re on the wrong side of the bell curve for sports, and don’t know what to do about it. I had hit the same wall earlier, multiple times from multiple injuries at multiple ages, so I wrote this advice.
As time grows long and wines age true, when lovers laugh and lives renew.
Your day at birth is brought to hand, and heavy weighs time’s dreaded sand.
But if heart and soul combine their will, then the body must its role fulfill.
So Carpe Diem! Seize the day! Follow your heart and let come what may.
Perhaps this was overkill for a birthday card, especially that early in our very tentative relationship 😉 But when I’m in, I’m in all the way.
So we’re heading out from the convention center, popping up to The Stinking Rose, a garlic themed restaurant in North Beach, to celebrate a great GDC showing. The driver starts off, and innocently enough, asks if we’re in town for a convention. When we mentioned games, he started going off about how games were ruining children and society. From his rant and appearance, this guy looked to be a gold mine of ‘far end of the bell curve’ sample data; a type of fellow I rarely get to use as a data source. I challenged his view on games. He was receptive when I pointed out people were playing more games and reducing their TV time, and that games were a social interaction event versus the solitary experience of the television. But he then got on the ‘computers in general were bad’ rant. I asked him if he had a computer and to compare his TV time versus surfing around on the web. He looked pensive and shrugged “alright, fair enough. I spend a lot of time surfing around, and I learn a lot each time.”
Now that I knew I had an interesting person to talk with, I was concerned about the short interview window; the restaurant was perhaps 15 minutes away. So I started digging in with some questions. He tended to ramble a bit on his answers, so as soon as I had what I needed out of one answer, I would politely cut him off and throw in the next question. It was a ton of fun! I learned a lot and the guy seemed cool; overall, fantastically successful cab ride. So I over-tipped him, we smiled and shook hands and I turned to the two guys I’d ridden up with, as the taxi drove off. Kris stomped his foot on the ground and said “Oh my God! That was the most terrifying cab ride I have ever had!!” Brian explained matter-of-factly, “I thought we were going to die. Several times.”
I was quite surprised, pulled back and looked at them. What could have been the issue? I thought it was a great ride, one of the best ever.
Kris said, “Well, I was a little worried that you would get us killed by challenging this crazy guy’s worldview, on his turf. But you convinced him that he was looking at the problem the wrong way, and I started to think we’d get out of there alive.” Brian interjected with “but the real problem was that he was a totally insane driver.” Brian continued, “then I saw you drop into scientist mode, and I knew it was all over.”
I knew immediately what Brian meant. I live for that sweet spot when you are totally immersed in a problem. And it’s true, sometimes I lose track of time and space, but I was shocked that the three of us could’ve had such a radically different experience in the same cab ride! I pressed for details and they rattled off incident after incident: driving through lights; driving through stop signs; driving without hands; driving while eating; driving while turned around in his seat and talking to me, etc. They had a pretty extensive list of some pretty valid complaints!
I paused and went to the mental videotape; slowly stepping through the cab ride conversation, and trying to observe the situation, not just the data. And sure enough, the guy was completely whacked! He had a big Styrofoam container of noodles that he would hold in one hand, while driving with one knee, and using the other hand to scoop noodles into his mouth, all while speeding down the already crazy streets of San Francisco. He would also do this while turning around and looking at me, regardless of the current traffic situation!
To help deal with this sort of problem (zoning in and missing what is going on around me), I have a little helper thread to track the overall environment; the only tricky part is remembering to feed it cycles frequently enough to catch such problems! As a little test thread, I’ve been forcing myself to take a guess at the current time, then I check the clock to see how close I was. After several months of this, I can now reliably feed background processes — at least, some of them — even when immersed. And it has also improved my tracking of time in general, leading to a much improved on-time behavior!
When Michelle and I were living in Arlington – we bought our first house and moved in together – I accidentally got involved in community improvements, and learned a lot of very valuable lessons. We had bought a house on the street that had the occasional speeder going through, making it very loud and a little dangerous when they did. The dips in the road restricted visibility considerably, and you could easily come over the hill at high speed and find somebody in the way with very little time to react. My neighbor told me there was a neighborhood improvement plan that was proposing a stop sign, or a center median, or something to slow down the high speeds on our street without overly restricting normal speeds. The idea sounded very sensible to me, so when he asked me to come to a community organization meeting to look at the proposal, it was a no-brainer to say yes.
It was a very odd meeting. A handful of people took forever to very boringly go over some minor changes to the proposals. I was shocked when the president said that they could probably get a revised version of the document out in just a few months time! We’re talking like a very few edits of a very unsubstantial scope, and her timeframe for doing it would cause us to miss the summer funding session, pushing the projects back by at least six months. So I volunteered to do the rewrites, just to get things moving. Proposal goes in, I’m thinking things are smooth, and I get on with my life. Then the next community meeting is posted with details of the proposals, and the shit hit the fan like you wouldn’t believe.
Hundreds of people showed up, almost all incredibly opposed to the proposals, even the no cost, beautification projects! It turned out the community “leaders” hadn’t bothered to ask any of the residents what they thought of these proposals! There was the usual assortment of change-is-bad folks but most had some pretty valid points. For example, a proposal that I thought was fine would have directly affected a dozen homes, and the proposal had been written without their knowledge or consent. The pitch sounded innocuous: convert an abandoned alley way into a walking path. But the alley had been abandoned for decades, and almost all of the houses had adapted their landscaping and fences to use this open space. Granted, it wasn’t their open space to use; the land belonged to the county. But you can’t slap something like that in as a surprise to people. At least, not if you want their support.
Side note: a similar issue ironically occurred in our Walnut Creek neighborhood. The city planners had quietly decided to tear down some open space and put in some high density, low income housing, and had gone considerably out of their way not to allow the neighborhood to find out. Fortunately, Michelle and I had been through the problems, similar problems, and Arlington, and knew how to engage our neighbor’s outrage into an actionable plan, and the rogue city planner ran into a buzz saw.
But back to Arlington. The community overwhelmingly voted no to the proposals, and things were looking grim. Arlington had opened up considerable funds for community improvement, as long as they got community buy-in to the proposals. Everything was now at risk because the community association hadn’t gotten by in from the community before hand; they sprung it on everybody, all at once. So long story short, I ended up becoming president of the Civic Association, teamed up with the irresistible energy force of a displaced New Yorker, Lewis Bromberg by name.
Lewis had recently moved into our neighborhood, a few houses down the block, and right in the zone where Waverly Hills transitions from a nice set of suburb housing to some pretty Third World housing and a small commercial strip. Lewis was on board with the notion of community improvement, but by no means was able to knuckle under to a flawed plan put together by flawed leadership. He somehow drafted me into helping out, and between the two of us, plus some key support from a few other people in Waverly Hills, we completely redid the community improvement plan, pretty much from scratch. Shockingly, it turned out that asking people about what they would like to see in their community was a much more successful approach than coming up with a plan and surprising everyone with it. And when we delivered the new plan to the Civic Association meeting, again with hundreds of people attending, it passed with overwhelming support; 90% plus. We not only structured the plan around ideas generated by the community, we phased the developments in tune with changes to project funding structures we knew were in the works from the county. And with surprisingly little effort to me – Lewis did by far the most leg work of anyone involved – we were able to pull in over $3 million in government funded projects to improve our community. Anywhere from colonial style streetlights, infrastructure improvements to the local park, or traffic calming measures on the major streets. One potential drawback of the plan really concerned Lewis and I: there was a lot of legwork involved to make a project happen, both at the community level, and at the county level. And while we were willing to invest the time in a few starter projects, there was no way we were willing to do all of the work, all of the time.
To make it scale better, we redid the proposal to require all new projects to have two block captains involved, located in the affected area. The block captains were on the hook to get local buy-in to potential improvements, not us. Then we’d help them bootstrap the project with the county: which department to apply to, what they’re looking for, how much is potentially available, etc. Essentially a primer on how to make a project happen. Then the block captains would take over the legwork from that point, pushing things forward with the county. It was this organizational scalability that allowed us to tap into so much county funding.
Arlington County loved the approach. In fact, they took our proposal and made it the baseline standard for other communities looking to get involved in the programs!
I recently spent two years at KIXEYE, building a test engineering group and integrating automated testing into every game team. Significant improvements in development time, scalability and operational cost/quality were directly attributed to the load-testing work I led, driven by metrics for the engineering, QA, producer and executive teams.
After the initial success wave of KIXEYE, operational costs skyrocketed and server failures during peak revenue hours became commonplace; the infrastructure and development processes simply weren’t scaling. The KIXEYE executive team issued a priority one mandate to implement load testing tools and test-driven processes for all titles.
To staff the testing team, we set up intern programs with several schools and hired the best interns out of each batch into our QE group, where we trained them in load testing, application metrics and how to work with each game team. We then embedded these QE engineers into each game team, working with the game teams to establish priorities and continuing to run daily scrums for mentoring purposes and fine-tuning direction.
This approach overcame each game team’s strong initial resistance to load testing: engineering decisions and launch decisions became largely driven by results from the automated tests and embedded performance metrics probes. We then grew the work into performance testing for mobile and web clients.
A quite interesting project for me was Robbie; a friendly front-end to the Maxis automated testing systems. After the success of automated testing in The Sims Online, building a second-generation system, integrated into all teams, became a top studio priority. We first tackled build stability, performance and finally content regression for the studio’s next major release: The Sims 2.0. By embedding myself into the Sims 2.0 team, we found tremendous opportunities for turning test and measure tools into task accelerators for the content team, and by aggregating performance statistics into an executive level dashboard we were able to help focus engineering resources and provide clear cross-team communication. For example, the studio head had been able to start a non-confrontational, very directed conversation on performance, as shown in this simple email: “I see on the dashboard that your frame rate is not where it should be at this point in your project. How are you planning to address this risk in the remaining time before launch?”