There are 2 types of meeting. Discuss.

Meetings. Terrible things; but like democracy they are the least-worst way of solving the problem*. They can be a terrible waste of time and they are the only way of really getting the best from those terrible, frustrating, wonderful, inspiring, brilliant people that are our co-workers. They are the best high-bandwidth, bidirectional, audio-physical media that works for our 3d simian brains. How can we get the best out of our meetings? I think that the answer lies in that excellent reasoning device: the barbell (i.e., there’s something at either end and nothing in the middle). There are 2 types of meeting:

  • The Decision meeting
  • The Discussion meeting

Once I’ve said the names, there isn’t much more to say, but let’s grind through it.

1. The Decision meeting

The Decision meeting is pointy. The ultimate example I’ve seen is the decision meeting for an investment buy/sell. There are defining characteristics of the decision meeting:

  • The point of the meeting is to make a decision, the decision makers should know who they are before the meeting
  • In order to stop debate, the decision should be laid out in a document, before the meeting
  • In order to stop groupthink, each decision maker should make and submit their decision before the meeting
  • There must be strict record-keeping; minutes and decision notes must be recorded consistently
  • In IT, we like data. Recorded decisions should be mine-able and have a confidence level. Or use the Apache voting system.
  • There must be rules of engagement; the format of the meeting should be known and every point covered.

If all this is done before the meeting, what is the point of getting together? Well, you establish the agenda, set your own opinions and then drill into those opinions and see if anyone needs to change their mind. If you’ve ever watched The Apprentice, you know what happens when you get people together to make a decision without a strong, reasoned opinion. You get a shouting match and then vicious reversals and selective memory after the fact. Don’t do this. Of course, all this is great but you must do a lot of work to get there. The hardest thing is building a decision to decide on. You have to put together an exhaustively documented plan of action/architecture/strategy to vote on. That must be close to what people want or you’ll be lost in debate. PGMs are good because the answer is always buy/no buy. The other thing is, this decision meeting doesn’t have to be a democracy: the decision maker might be one person who ignores everyone else, but if things go bad then the documentation is there to fall back on. Meeting minutes are a cleft stick; vital and yet timewasting they deserve a post of their own. One thing is certain, publishing meeting minutes is not a way to communicate what you are doing, you have to do something to make them digestible.

2. The Discussion meeting

The Discussion meeting is schmoozy, smooth and free-flowing. In order to get the best out of this you really need an agenda, if you don’t have an agenda you better all know the problem well. You might be having some early stage meetings where you don’t even know what the agenda might be, but you better have an opinion before you walk in the room. These meetings will be useful when you are hammering out what the options are, or for finding out what the problems are. I’ve found that if the meeting group is always the same and you keep talking about the same focussed subject-area, you soon develop a team spirit and a shared context and vocabulary that enables a productive sharing of ideas; if the meeting attendance changes or meetings are infrequent productivity drops drastically as we need to reset each time.

There is a special case of the discussion meeting that is, in my opinion, the best type of meeting: the one-to-one.

These are the meetings where you share ideas freely and inspire each other. This is one case where it might be OK to not have an agenda, the very act of having to talk it out will clarify things and throw up angles and aspects that you would never find alone. See also Programmer’s dog. This is where I and the core values split: I think that brainstorming without focus is a disaster, but balanced, thoughtful, egoless collaboration, where you abandon your idea when a better one comes along… for a certain type of creativity,  there is nothing like it.

And of course, finding out how people tick will only happen in this type of meeting.

Types of meeting to avoid

  • The status update: Utter fail. Send me an email. Or don’t, even better.
  • The boxing match: One person talks, someone else argues with them. Everyone else listens and checks email on blackberry.
  • Any meeting that DOESN’T START ON TIME
  • Any meeting where people check emails other than to make the point that “this meeting is pointless”. TBH, sometimes I do send myself reminders from a berry, but until we have in-office multi-user Siri in every room…

Conclusion Know your meeting, value your colleagues time. Choose one or the other and make sure they know which it is.

*  Churchill said that. Amazingly here are the Hansard minutes that say so. Meeting minutes are a wonderful thing. (see first few lines in the linked page for comments on democracy)

Want better ideas? Stop snacking between meals

I have an observation to share with you: the invention of eating meals is the cornerstone of civilisation and all its works.

A bold claim but I’m sure it’s true. As the frequently shamed owner of several children I can tell you that when you are in contact with an environment where you are distracted by something bleating at you, the quality of thoughts really goes down a long way. There is a point at which you are being distracted so frequently that you cannot even remember what you were…umm..Anyway. So, being distracted by the constant bleats of hunger and the need to pick berries, be alert for tiger growls, children falling into streams etc. means you never really come up with anything new. So, hence the invention of mealtimes; once you have mealtimes you start to enter into a rhythm where you do one thing (gather food) then another (sit down and eat) and then another (sleep, with full bellies and empty heads). Once you are down that road, five minutes later Adam Smith turns up with a pin factory and we are all happy.

So what’s the point? That the working environment that we have built in this generation is heading for the hunter-gatherer start of constant alert with IMs and emails taking the place of tiger growls and status update meetings taking the place of passing wolfpacks.. And we can’t think straight when we are out in the rain with tigers after us. So what do we do?

Here’s my idea: stop snacking on ideas and start eating meals.

Need some time to innovate? Then try booking some time to do it and make sure you commit to it. Make a meeting booking and block out the dreaded calendar. When you are in that time, make sure that you don’t do anything else. Don’t answer the phone, don’t answer IM and, my goodness, finally take the blue pill and unplug that email.

Personally, I think that the only way to innovate is without a computer. The computer is just rails for my mind to run along, and personally I just can’t think unless I have a pen in my hand. I like to book a meeting room and sit in it with no blackberry and either alone or with one other person draw pictures of what winning looks like.

If you really do need your computer then I suggest that you get some noise cancelling headphones and/or some J. S. Bach (or Gregorian chants, or whalesong or surf sounds or this excellent stuff: which has melody but no form, try to ignore that it is birthing music) and cancel out those tiger growls.

What you also need is a sign that says “Touch me not!” Wasps have their stripes and you need some too. My own option is the “thinking cap”; when i wear it people know not to talk to me. I used to share a desk with someone who liked to chat and sometimes she didn’t see the hat. However, when I simply didn’t answer she would look up, see the hat and shut up. And actually that worked, I was able to keep focus for the 5 seconds until she realised that I wasn’t going to answer, I couldn’t advance, but equally I didn’t drop any balls (I was a Thread.Sleep but didn’t lose any state…) and could continue from where I left off.

This is really the key: if you want great creativity, you need a flow state and that takes time.

If you think you don’t need to innovate just more execution? Well, maybe that is your current problem, but we will spend our whole lives in the future, we should prepare for it. Make time.

So what?!

There is a big demand for analysis of data in all companies. We love data. We love analysis based on fact, and that means data. But that’s not enough.

The method of doing analysis in an environment where developer and analyst overlap goes like this:

  1. Find the data, make sure it is clean and consistent to the nth degree; no approximations.
  2. Discover the important questions
  3. Answer the important questions
  4. Think about what would be the perfect answer to those questions
  5. Provide the “so what?” analysis

My experience recently has been with a few large datasets where we would hope that the application of a few GROUP BYs and some graphs would let the data speak for itself.

However, I have generally found that is not the case.

You can ask specific questions and get specific answers but dashboards don’t just appear out of thin air. And in the manner of “Zen and the art of motorcycle maintenance” there are far more questions than you have time to answer them, just that not all of the questions are interesting and not all of them will produce a result that you can use to change your business.

So how do we get to the “so what?” answers?

I think that an essential part has to be a great tool that allows you to quickly try out ideas. That means the tool must be

  1. Quick to use, low friction on getting and manipulating data
  2. Plenty of “batteries included” that will make use of the work of others
  3. Must have a REPL or something like it that allows and encourages you to “play” with data, rather than static processes like ETL
  4. Must have plotting and graphics.

So I looked and saw this: and really liked it

http://nbviewer.jupyter.org/

It’s a way of turning python code (notebooks) into interactive documents with living code.

So you put your python notepad into Git and then feed the git address to this thing and bingo. It’s the cloud, innit. And the notebooks look great. Very much in the manner of Magic Ink. Also looks very familiar from my days using Mathematica (great days they were too).

There are many other notebook like systems of course, and different tools support different languages. One of the most polyglot is Beaker which allows you to mix python, R and JavaScript. Which might not mean much to your analysts, but to the devs it looks awesome (and a train wreck too).

Just remember, you aren’t making software here! This is the new whiteboard: you throw up some ideas, ram the data in and see what happens. Just because it’s made of code and attached to Git, it doesn’t mean that this is software you want to keep.

 

Open discussions

This is the problem with encouraging debate via social media: everything you say hangs around, and thanks to search engines people will remember what you say. Especially if you “give bile a permalink“. So you need people to be prepared to stand by their words, but nothing freezes people in the act of creation more than realising that what they say will be remembered forever. So let’s allow anonymous posts, then we just get the good stuff, right? But, nothing encourages bile like anonymous ill-informed website comments, especially when I’ve had a drink.

But then, for the people wanting to really share information nothing beats a no-holds-barred meeting where you can say what you need to say. Trust is a precondition, and you keep it open, honest and candid then you can really get something done. The precondition for trust is stability, so that what goes around has a chance to come around. Really that’s the foundation of any community that extends into the future.

For examples to the contrary see basically any page on The Internet and cf the eternal September.

    

But how can you go forth and use that information given so openly? That information was given in a trusted environment, that can’t be blown by re-tweeting. The ideal – to me – would be some sort of online version of the Chatham House Rule

When a meeting, or part thereof, is held under the Chatham House Rule, participants are free to use the information received, but neither the identity nor the affiliation of the speaker(s), nor that of any other participant, may be revealed.

Which doesn’t exactly square with the typical 360 review convention. But not everything is a single-person rigorous opinion. Sometimes we are trying to establish a Body of Knowledge or even a *gasp* consensus because we can only make progress together.

Speak up

Developers are also really great at criticising stuff; especially things that are full of interesting ideas which aren’t universally true under every condition that I can think of. That means that the balance is on people not saying anything, whereas on the Internet we have an environment that is toxically full of so many low quality ideas that you can’t even delete them fast enough, never mind convince people of your idea.

So, being in a company where people hold themselves to high standards, and are naturally snippy, the environment becomes very critical and it is very hard to put your head above the parapet to say something; even an un-original idea or just telling people why you did it; but you can start by encouraging others when they do so. You don’t have to sugar-coat anything but remember that there are no facts, there are only points of view*.

Encourage discussion by participating in it, and not only by reacting to what other people say. You can try creating something yourself for a change and see the difference between refuting someone’s idea and creating something yourself. Oh, you didn’t like what someone made? It was bad in some indefinable way? You could have done more? Well why don’t you show them the difference between something that is truly “excellent” and merely “the best you’ve seen so far”.

 

*Hold back those comments, don’t tell me that there are some facts. Before you tell me that 1=1 and that’s a fact. A) you already know that I mean non-trivial assertions about the real world B) you are doing that criticism thing already C) that’s an axiom not a fact.

Documenting Learning – aka Autodidacts do it better by themselves?

It’s easy to convince ourselves that learning by reading is the only route for “people like us” and autodidacticism is the norm for developers; we expect to teach ourselves new technology and to find our way around problems as they occur. In some other cultures, say a military one, that type of learning; ad-hoc, piecemeal and always incomplete would be seen as woefully inadequate. Coral reef knowledge has its advantages, but we can do better.

How much time should you spend learning?

You know, at the end of the year, if you took some time out, deliberately and on purpose, from doing “real work” to do some learning about something, and you provided evidence that you weren’t just browsing the web looking for a new job, do you think that your manager is going to penalise you? If you are then you need to spend more time learning, you’ll need a new job soon.

A working year has about 2000 hours in it. And how much time do you invest in learning and reflecting on where you are and want to be. Maybe a few hours a year in your annual review meeting? If you ran a project that was a person-year and you spent 0.1% of the time on planning, people would say you are nuts.

So: spend some time on it, but decide how much. Ideally, be upfront and agree it in advance. But it’s your life.

It’s learning, not just surfing the web

How can we soup-up self-learning?

  1. Be proactive, determine when you think you need to learn, don’t wait to fall into a hole
  2. Plan first: don’t just jump in a start surfing or installing new applications on your machine, do some sort of breadth-first check and make sure you know “what winning looks like” and when you are “done” for this piece of learning
  3. Document it: write down what you want to do, then write down what you actually did, make notes, draw pictures, put dates on it, use paper as well as documents, and KEEP DATE STAMPS, this is a log of your learning rather than a source of information.
  4. Pay it forward: when you spent time learning you are investing your company’s money in the future, you need to spread the learning. At the very least you need to pass the info back to your manager so they are aware of what you know.

 

One Note

My weapon of choice for this is OneNote. It isn’t quite as good as Evernote because I can’t use my iPhone to insert pictures into the notebook (cloud wins there).

Below are my personal power tips for using One Note. Which I also use for drafting some documents when I’m offline on my laptop. And also I use it for my ongoing journal of everything, which helps me at year end.

Create a template page for learning OneNote

One thing that you can do with OneNote is use a template. I’ve got quite into using Word templates as well recently, but OneNote is great for building a learning scrapbook.

Creating new templates is easy:

    

Then you can get this and it will factory a new blank page for you to fill in:

    

 

Power tools of OneNote

These are the ones that I use all the time:

  • Snip: press windows key + s at any time and you can draw a screen capture, great for stealing diagrams
  • Timestamp: alt + shift + f for entering the date and time, so you can see how your learning progressed and how much time you spent on it.

New languages

So, I’ve been spending some time with new programming languages over the last few months trying to see if I am missing a trick. Maybe there are some things that are easier if you find the right language.

I’m not looking for a DSL exactly, but more of a tool that people other than programmers could use. I’ve been particularly looking at data analysis systems like Matlab, python + num.py, R. One of the things you notice is that you’ve got used to C-style syntax which has completely dominated programming languages – except for aberrations like Haskell and f# – that you think everything else is weird. But you have to free your mind, maybe there is a better way.

Consider this code from Matlab, which creates a million random numbers, and profiles the performance as it does so:

tic;mean(rand(10e6,1));toc

Whoah. Tic toc? Seriously? But it’s readable, up to a point. The lack of structure makes it easy to read initially but then you get into trouble. Like removing all the punctuation from a novel you end up doing some weird stuff because you can’t tell when Jane is speaking or if it was Barney the dog. It is probably easier to write it that way as long as you do it right first time and don’t have correct it.

C# is becoming a language where one can adopt many different styles, and the language constructs are quite dazzling. Classes, static, virtual, public, namespaces, bracket syntax, overloaded operators, attributed code, LINQ (functional expression or query syntax?). All this adds to the syntactic noise that obscures. I saw a little of that when I tried to teach my kids to read. When they start, even the idea that letters mean sounds is hard to get across* and every distraction is a problem. Which is why Comic Sans
is so popular.

You can start putting that structure into these other languages, but then they lose some of the stuff that made them good. Plus you have to make that structure up as you go. They also lose some of the fun.

Matlab is based around an interactive session that is something like a SSMS query window where you run “live” and a powershell command line. Actually quite familiar to those of us who grew up with this:

 



the interactive shell prompt of the BBC micro ran BASIC right from boot up… PRINT(“Hello Sam!”)

 

There is something about it that is quite fun, and encourages play. Which is great for data exploration, and modelling. But I don’t build bridges from Lego.

 

* Me speaking to child: “What is a letter? They are on the page. I mean printed on it. It’s that mark there. On the page. No, not that one; that’s a dog. No not that one, that’s a full stop. No not that one, that’s a bar code. No please don’t throw the book.”

It’s not a little bit cheaper

From Amazon letter to shareholders which is doing the rounds at the moment, on their database offering Aurora

“It has commercial-grade durability and availability, is fully compatible with MySQL, has up to 5 times better performance than the typical MySQL implementation, but is 1/10th the price of the traditional, commercial-grade database engines.”

This.

Not because Cloud is cool, or because it is web scale (“Mongo db is web scale!”).

Cloud is going to destroy all the on-prem because it’s 10 times easier to get what you want, now, right now. And you don’t have to patch the SAN, and VMware, and the firewall, and the OS and the database server. And 1/10 of the cost. Not a bit cheaper, and a bit better. It is so much cheaper and so much better. That’s the thing that has only recently occurred to me, it’s not only a cost argument; it is a transformational change in how easy it is to get what you need.

Of course there are other risks like vendor lock in to Amazon (or whoever). But here’s the thing: you have that anyway. You think that you can change from VMWare to Hypervisor? Or from VM to physical? You can’t. Or, you can, but at so much cost and time that it would be as easy to go cloud.

Yes yes, the NSA will be reading your files, but they are doing that anyway. We shouldn’t belittle those risks, because they are the real risks. The potential company destroying risks that directors are paid to take on (even though there isn’t enough evidence, they need to decide anyway). We shouldn’t be too bold ignoring those risks but the advantages of cloud are quite tangible.