#PAXAUS – Day 1

I bought our tickets many many months ago. I think almost as soon as they became available. They are just too much of a bargain to take risks with how long they will be available.

If you want to ask me “What’s a Pax?” – go over to Penny Arcade, read some comics, and maybe watch a video or two. A PAX is essentially a glorious celebration of amalgamated nerd culture. Over a three day weekend, there are panels on many varied topics, a show floor for PC, console, handheld hardware and games, board games, and many places to play and try a little bit of everything.

All set on the south bank of Melbourne, with all the food, and entertainment, and gas torches.

We’re now at the end of day one, and it just doesn’t feel like there is enough time to get to everything. Too many sessions. I am on average triple-booked throughout the day. I need more time to see all the great cosplaying. I need more time to play all the games.

Or perhaps a better filter. As great as the event is overall, it is not all equally great. I’ve been in two panels that felt a bit under-prepared. Like the host had had a great idea for a session, suggested it, got accepted, and then didn’t do any work to put together a cohesive set of questions and a narrative digging into the material. Which is a shame, because I was looking forward to the sessions on diversity in games.

And although Mike didn’t manage to make it to Australia this year, Jerry (Holkins) is firing on all cylinders like always. I like his words. He puts them in order in the most fantastic way. I need to figure out if there is something I could ask him to sign on my pass. I am leaning towards “A Second Naked Kris Straub” at the moment for reasons I cannot adequately explain outside of the context of the game of Quiplash I witnessed. I could easily listen to him all day.

I had a specific request lined up for Mike as well. Something from First 15 that I thought would go well on a T-shirt, but I will have to forego that privilege for now.

Maybe that was more to assuage my guilt over not knowing what either Mike or Jerry looked like last year, and possibly accidentally snubbing Mike at the pin-trade. Which I have since learned would have been an even more severe snub for the fact that pin-trading came forth from his imagination.

It is a shame that all these cool people gathered here together disperse again in less than 48 hours.

3 days just feels too short.

It’s like… less than 1% of the year. Does that sound like enough to you? It doesn’t to me.

ADSD with AOA and Udi – Day 4

It has been four days since I slept.

I am hallucinating Authorities (aka Services), Bounded Contexts, or is that Business Components? Up is down, down is up. Everything is abstract. Everything is physical but different. Or not.

Today we moved at a much steadier clip through our materials. I was more alert by necessity, and there were fewer tangents, although still enough. There’ve been a few cases of not-really-questions-more-comments-to-try-and-impress, but far more frequent are in-depth tangents that feel like individuals trying to get some free consultin’ out of Udi.

It is of course hard not to bring your real-world scenarios into the learning experience, but there is a difference in the feel of a question motivated by not-quite-understanding and a question that is looking for a solution.

Today was actually surprisingly more concrete and nuts-and-bolts. Still provocative and even surprising in places though, but I wouldn’t have *that* any other way. Why yes, yes, let’s connect the javascript client straight to the database; and the case he made was surprisingly compelling all things considered.

I cannot quite tell how he felt about CQRS; the tone and body-language was somewhat dismissive, but he explained it with a level of nuance and determination at odds with that posture. He was definitely dismissive of Event Sourcing though. And we’re not allowed to use Udi Says for justification, but it was hard not to sympathize with his assessment of the limitations on its value.

He still reveals some things with a larger sense of mystery and caginess than I think is warranted, but at this point I’ve decided the showmanship is just getting the best of him.

And… I was so hopeful.

We got to 200 pages out of 250 around 4pm. I thought today was going to be an “early” one (i.e. 5:30pm for example), since I knew he had a further speaking gig in the evening, and surely he eats?

In the end he raced through to page 237 by about 7pm. I’d have said that bodes well for an early mark tomorrow, but I really have no idea what to believe anymore. I’m doing my best to stay focused and absorb everything throughout the day, but it is … so … hard.

One more day.

I can do this.

And then, hopefully, a more in-depth summary of what I got out of the experience.

The Answer Might Surprise You.

ADSD with SOAAOA and Udi – Day 3

Dear diary, today is day 12 of my 5-Day Training Course.

I would complain about the energy drain if not for the appreciation that Udi is investing so much of his time. Every day starts at 8:30, and goes well past 6 pm with very limited breaks. It’s a … marathon? (I hope?) We’re now 30 hours in with at least 20 more to go that I can tell, excluding further homework tomorrow.

I am a bit mystified why Udi uses the word “Service” so much when he clearly has a distaste for its nebulous definition and general appropriation. “Authority Oriented Architecture” sounds like a much better descriptor overall, even if Authority isn’t ideally unambiguous either.

IT managed to go through all the good words by the end of last century, re-defining them all into meaninglessness.

The pattern in Udi’s style is abundantly clear by now; cleverly selected examples without singular answers, and a well-honed skill at arguing, together make for a lot of head-scratching around the room. I am enjoying thinking around the provocative propositions he throws out there, but I cannot help but feel there’s a level of empty calories about the exercise.

There will be no technology advice anywhere along the way. That’s an implementation-detail that is case-specific and therefore not something he can (or will) give us. I think some in the class are still hoping/thinking we may end up there, but that’s not the direction this course is following.

There will also be no scientific underpinnings for the theories. De-composing architecture along the lines of his advice is a good thing, because. And by squinting just right I am convinced overall that’s true, but I wish I had something more concrete to hang that on. Case studies. Empirical evidence. A rigid mathematical proof (I can dream…), but that’s also not where this is heading.

It’s a very valuable exercise at stretching the mind, and learning new ways to approach architectural and design decisions though, and that’s not to be sneezed at.

Still no silver bullets, sadly.

ADSD with SOA and Udi – Day 2

So,…

Apparently I am back in school now; after a long day (8:30am – 6:30pm) I have a homework assignment for tomorrow. I had hoped to get some extra sleep tonight, but no luck.

Using Thing-Oriented-Architecture, I am modelling the service boundaries for a hotel booking system tonight. I probably will save some for on the train tomorrow morning, because I could barely keep awake today and if I don’t sleep well, tomorrow will be worse still.

As much as yesterday felt like the set-up for some grand unified theory on distributed design, after today it feels like there aren’t going to be any answers, just increasingly vague questions. And a lot of my own opinions. So maybe more than anything this is a course to help me figure out what I believe myself? With some rules-of-thumb thrown in?

So far the single most useful piece has been a helpful question to determine whether services are sitting in the right context together (or not). I can tell it’s going to get a big work-out in time.

And I’m looking forward to the suggested approach to pull information back together into a cohesive interface. I can kinda see where Udi’s leading, but it is still a little bewildering. This may be exacerbated by the fact that he is clearly purposely constructing worst-case examples to push boundaries.

I’m hoping tomorrow brings more answers than new questions.

I’ll hold off on holding my breath.

ADSD with SOA and Udi – Day 1

I am learning this week.

Advanced Distributed Systems Design with Udi Dahan.

So far, I have acquired many new questions that I didn’t think I had need of, and I am hopeful that in another 4 days they will all have disappeared again whence they came. I am an optimist.

One thing missing from the copy of the slides we all got was the reference table for quick lookup of relative latencies in computers; it’s good to keep in mind how much slower memory is than the CPU, and how much slower an SSD is than memory, and network than SSD and reboots beat everything. I kinda feel an urge to start suffixing method names for nasty latency surprises to make it a bit more obvious.

As my mind wandered onto tangents, Conway’s Law took on a whole new dimension too. I wonder if software organisations should ever re-structure if there isn’t a need for software re-architecture.

I have so many provocative notes in my little booklet that I’m not sure how to turn into cohesive provocative statements. I’m also not sure which ones I actually believe yet, so maybe I will have a more nuanced view to filter them through towards the end of the week.

There are definitely things I disagree with, possibly strongly, but I haven’t given them as much thought as Udi, so I do not feel qualified to disagree overtly just yet.

First, I need to get through all these damned questions.

Testin’, What is it Good For?

Not quite absolutely nothin’, but I am starting to wonder.

More tests means more coverage means more green that changes to red at the slightest change. 100% test coverage means 0% freedom to change a line of code without changing a test as well.

At the start of the month we retired a truckload of tests at work, and the world didn’t end. We instated a rule that tests that are red for 3 consecutive days get terminated with extreme prejudice. Always red = no value.

But I have been thinking. What is the value of a green test? I mean, a test that is always green. Tests that have never been red are no more valuable than tests that do not go green. But it is so hard to let go; so tempting to think that a test surely inherently has value.

But do they really?

What makes a test worthwhile? What are tests for? How many?

Bug-free software is a white whale. Every test is a constraint to change. Like any other code, it isn’t free; keeping it is costly. So, I guess the answers are “just enough” and “giving us confidence where we need it” and “when it proves a real invariant truth”.

I just need to work out a practical applications of those holistic answers. But it definitely starts with “less is more”.

Three Whys

“Why?” is the most powerful question in existence.

I hadn’t thought much about it till a year or two ago when I experienced a CTO that wielded it like the probing tool it is. “Why” doesn’t judge. It doesn’t presume that anyone is wrong. It just asks for an explanation, and at the end of it you either learn something new, or you discover a fallacy. You win either way.

I was of course also aware of Simon Sinek’s excellent TED video on his theory about purpose (disregard the sound quality around the start; from memory it is quite poor).

I hadn’t given “Why” much more thought other than as a tool for pitching.

I have sold “Why” short.

Change of Job

I have been working at my new job for about 6 months now. A few months ago, our corporate core values were unveiled, and I am proud to say that “Make Mum Proud” is literally at the top of the list.

But more significantly, “Care About Why” was the one that kicked my mind back into gear.

“Why”.

Always there.

And I decided to buy Simon Sinek’s book “Start With Why” which is an expanded written version of the TED talk I linked above, essentially no additional information, but a more full exploration of the power of his central thesis that customers by “Why” you do it, not “What” you do.

Companies that do well have in his experience one factor in common; they know why they do what they do.

Why for Companies

He makes a compelling case that companies with a strong purpose, a strong “Why”, outperform companies without one. And before you think a glib “To Make Money Of Course!”, that’s not a “Why”, that’s a “What”.

Apple’s central purpose is revolution. Microsoft’s central purpose is unlocking potential. SouthWest Airlines’ central purpose is to bring air travel to the common people.

Those clear “Why”s do not predestine these organisations to greatness, but they create a framework for authenticity that consumers buy in to. And as long as the organisation keeps living by its “Why”, the consumers that identify with it will continue buying. It’s the stuff religious computer wars are built on.

The “What” of the organisation should flow from the “Why”, and by staying aligned, it proves the “Why”.

When organisations lose alignment they decay; like Apple did when they got rid of Jobs in the 80s. Like Walmart has done since giving up on “Making quality goods affordable”, instead focusing on lower prices at all costs.

Why for Departments and Why for Teams

I had a sense though that “Why” applies at more than just the top level of an organisation, but I was having some trouble formulating why. Ironically.

Organisations without a good why have to rely on every level of management to carefully refine and align plans with their bosses, through the VPs, all the way up to the CEO. That’s hard work. When you don’t have a clear purpose, you cannot rely on everyone marching in the same direction without detailed orders. Don’t get me wrong, Apple still needs middle management, but when they are steering for that next revolution it has to be a little easier when everyone up and down the management chain knows what the company is about. Trade-offs at the lowest levels can be resolved in line with the central purpose without continuous supervision.

So, why bother with “Why” below the top?

I think though that every department and every team must have a purpose of their own; obviously not completely distinct from the corporate “Why”, but aligned with it and in support of it.

If I were to work in software within Apple, I think there’d be a strong “Why” driving for an integrated experience across their products. “It just works” has always been their mantra, and that doesn’t just happen.

If I were to work on iTunes within Apple (shoot me now!), I think there’d be a strong “Why” driving for tapping into the consumers’ sense of identity and the artists with which they identify.

But those “Why”s are more malleable than the corporate one; every re-organisation is a signal that there is a “Why” to re-align based on prevailing conditions within or without. Companies rarely re-align their complete identity. And even more rarely succeed.

Bonus – Why for Individuals

This fourth “Why” gets touched upon by Simon in his book as well. But it is of a slightly different nature. It’s worth keeping in mind though, because when your personal “Why” gets misaligned with your “What” you’ll feel it. You’ll know something is wrong.

And what it usually means is that it is time to move on.

You cannot expect an organisation to adapt itself to your personal “Why”, and although you certainly can, I wouldn’t recommend following the “What” just for the sake of a known job; change is scary, but a misaligned “What” is more painful than you realize until you finally let go of it.

Now excuse me while I go ponder my Team “Why” and my Personal “Why” some more.

F430 F1 – Ferrari: ✔

When I left my previous job at AEMO after 11 years, a group of my closest friends and coworkers gathered around and presented me with a very unexpected and awesome gift. Although I have been enjoying my other gift from the wider company (lots of Kindle credit!) on a daily basis on the train, this was definitely something else entirely.

2015-07-29 - Ferrari-2

I hadn’t intended to take quite this long to get around to it, but it turns out this is a pretty popular Red Balloon gift, so June was as early as was available at the start of the year, and I decided to make it land near my birthday on the 26th.

I must admit. When I put a Ferrari on my list-of-100-things, I was just expecting that maybe someday I’d have a chance to drive one on the road.

2015-07-29 - Ferrari-1

Driving one on a race track is better.

Much better.

2015-07-29 - Ferrari-3

I have no practice at driving really fast, and I shamefully admit I didn’t quite nudge it past 200 on the straight, but I had an awful lot of fun trying to get there. I didn’t notice the adrenaline as I was going, but when I got out of the car I had an immediate urge to look for a drink because my mouth had dried out completely.

I have to clarify; 200 sounds like a lot, but in more qualified hands the car I was driving tops out over 300. Still. It’s faster than I’ve ever gone in a car myself.

2015-07-29 - Ferrari-4

First of all, you sit incredibly close to the road. It’s less than 1/2 Rav4 high. Secondly, the brakes are incredibly effective; anything more than the lightest touch and you stand still instantly. That’s a hard thing to get used to. I think the twitchy controls are what most held me back from pushing it faster. That, and the knowledge I was driving the cost of a modest flat around.

2015-07-29 - Ferrari-8

Through it all the instructor was amazing. Encouraging, calm and composed. Like a personal sat-nav pointing out the spots I should try to hit in the corner, and when to push it faster and when to ease it off. I got better on later laps.

2015-07-29 - Ferrari-7

The track I was driving wasn’t quite as expected either. See Eastern Creek geographical map style; that is what I was led to expect. Then, see Eastern Creek satellite view with the extra twisty bits on the right; that’s what I actually got to drive. Those tight corners are… intimidating.

2015-07-29 - Ferrari-5

I’m not quite done yet with my catch-up birthday, but the experience of the morning almost led me to buying a console with racing games straight out of the gate.

2015-07-29 - Ferrari-11

This afternoon I have a massage booked, and then dinner with some friends and family at Criniti’s for an Italian close to the day as well. What could possibly go wrong?

CM Goes Fiji

Despite being an accomplished airplane passenger, I must admit, after such a long time of not crossing any oceans I felt a little unsettled to be on a plane that was going to be crossing four hours of Pacific. But between my podcasts and my Kindle it whooshed by in the blink of a moment.

It is impossible to complain when your employer flies you to Fiji for 4 days to meet all your international co-workers face-to-face. Thanks Ben, Dave and Alex, and Campaign Monitor in general!

As first impressions go, Fiji leaves an interesting mix.

Landing against a backdrop of sharp volcanic teeth biting into fluffy clouds rouses an expectation of something raw and elemental. But that has proven more a set-piece to a pleasantly relaxed and hospitable stay.

The first step off the plane greets me with a blast of warm humid air. I quickly dispose of my jacket and sweater and drape them over my arm as I wind my way through the customs queue. The walkways into the airport feel improvised and the customs desks themselves seem accidentally placed in the middle of an otherwise bare carpeted room, more so than a well-planned line of border security. I guess there’s just not a lot worth worrying about.

Even the x-ray of my bag seems more cargo-cult formality than security per-se, when nobody questions the contents of the bundle of jackets, wallets and miscellaneous electronics I carry right past the machine through a striking absence of detectors.

And that’s just the first taste of an interesting contrast between a laid-back culture and signs of tourism-induced modernity along the way to the resort.

2015-07-16 - Fiji Hibiscus

The entire landscape leaves an impression of barely-tamed nature on the verge of consuming what civilization has been built among it. The place looks incredibly green everywhere, except where it is a natural yellow from the reedy grass. Strangely absent are flowers other than an occasional spray of hibiscus. Green is the colour of nature. It is the only colour omni-present.

Even the road looks like a merely temporary encroachment on nature, ready to be swallowed up by the grass if I look away for a moment… Don’t Blink!

Unnaturally narrow railway tracks follow the contours of the roads through the cane fields. My curiosity over the stability of any passenger train on these tracks is resolved when I spot the carriage packed with what I first mistook for bundles of twigs. The rail seems only intended for the sugar cane that grows everywhere.

And then every once in a while a cow.

Grassy field… Cow. Cane field, cane field,… cow. Bend in the road… group of cows blocking our way. I am completely desensitised to random cows now. It’s all good. Relax. Fiji time!

And then the resort.

2015-07-16 - Fiji Village

It looks like a little village in the jungle at the side of the bluest lagoon you’ve ever seen. It’s almost a shame to be “working”. But this is an incredible opportunity to make connections when working in a company with co-workers all over the US and Europe.

I have been chatting my ass off trying to put faces to HipChat aliases while drinks just keep materialising from smiling faces. I may recall about half, but that’s half more than I knew before. I think I’ve spoken to at least half of our international support team. And I had a few great conversations with members of the GetFeedback team (like SurveyMonkey, only much cooler, now with 99% less monkey). And a good number of the sales and marketing teams besides.

2015-07-16 - Fiji Shirts

And in between social events we have had an awesome All-Hands meeting with most of the company here. Our core values are now expressed everywhere through the medium of interpretative t-shirts. The thing indelibly impressed upon my mind from that session is that the head of sales has the energy of a pack of toddlers on red cordial.

Yesterday we went out into the community to build desks and tables for a school in a nearby village to kick of CMs new Community program which sponsors up to 4 days a year of community work for each staff member. I thought I had reached peak-pride in my employer, but there always seems to be more “up” there. We each brought a book for their library as well, which is now stocked with 150-odd new English books.

That’s another fact about Fiji that surprised me. English is the official language. It’s so strange to arrive on a tropical island and see all the street signs, and roadside shops advertise in English.

Sadly, I missed out on the great Team Building experience this morning. I woke up at about 7:30am with a migraine from what the bed had done to my freshly massaged back. I had to take some Panadol and another 4 hours sleep, rolling straight into lunch-time at the beach. I wish I could have joined in the fun.

2015-07-16 - Fiji Path

And the last day is left for free time to mingle.

Part of which I squandered wisely learning how to play “Up-and-down-the-river” with some of my Engineering friends (thanks Trips, T4, Rich, Ken and TJ). Apparently it has many other names, but I personally call it “screw over whomever you can; the game where someone always loses – the beginnening (part 1)”. I may have had a few drinks though, so it might be called something else tomorrow. I did poorly, but I screwed a whole bunch of people over so that’s winning in a way, innit?

To an introvert a holiday like this is a little like work. But an incredibly worthwhile time, and hopefully reason enough to repeat the exercise next year when we’ve grown even further!

Bula!

Oh, and the best time to join Campaign Monitor is obviously last week (everyone gets to come along; plenty of bemused three-week-hires floating around)… but the second best time to join is right now, so go and have a look at our Careers Page and apply!

2015-07-16 - Fiji Buggy

(Unit-)Testing State of Mind

My mind has been steeped deep in the quagmire of automated testing for the past few days. If ever there were an area of software development where I wished for a silver bullet that I could just load and fire…

I’ve gone from a job where testing was predominantly a lightly automated activity, to a job where large swaths of the testing effort are automated to a high degree. I definitely prefer the latter in principle, if only there were a definitive book of recipes and best-practices to follow.

I enjoyed watching the Pluralsight video on Code Testability; it has the best explanation of what makes testing code hard that I’ve ever seen. The side-by-side examples in which he shows how using dependency injection increased what he calls the “sphere of influence” (or the directly testable surface) of the code was an A-Ha moment for its sheer clarity.

And another video that has gotten lost in the blur in my memory made a great point regarding keeping tests descriptive and linear. Unit Tests are easy to write because they do not branch or loop. They test one thing well at a time, and as a result feel more reliable; being able to read and trivially understand a test is a major strength.

And yet… it bothers me when a lot of the hands-on examples in videos still show how to test an “ArgumentException” type gets thrown. I blogged about exceptions what feels like an eternity ago (Exceptions – 3 specifically), and ArgumentExceptions should not be caught; they aren’t for code to deal with, they are for code to try and avoid at all cost. So why test them? Like… ever?

There are plenty of proto-guides on (unit-)testing best practices, but few if any get beyond the obvious: isolate your test cases, pick structured names, be wary of mocking, test one thing only. But that still doesn’t really give any guidance on what is worth testing. Writing tests is easy enough, writing the right tests, and no more than necessary, is the hard part.

Are there resources out there I haven’t found yet?