Mantra
Repeat after me: Some problems have no solution.
Some problems have no solution.
Some
problems
have
NO
SOLUTION.
The elements of a good team
I’ve been thinking about this lately.
Frequent dialogue
Communication within a team should be frequent. But more importantly it should be a dialogue – there is more than one voice contributing to the conversation. What I often see in meetings is one or two people dominating a discussion and not allowing others to pitch in. It’s especially concerning to me when I see people who simply do not notice that they are taking up more than their fair share of time and that others are waiting for them to stop talking so they can let their thoughts out. Unfortunately there’s no helping people like that, as far as I can see, it’s just something that pisses me off.
Trust; no fear
You can only participate helpfully and with compassion if you feel trusted and respected by your team-mates. The only way to promote that ethos is to trust and respect your team. It makes you vulnerable, but when these qualities manifest in a team great things can be accomplished. So it’s worth it. You must constantly strive to be gracious and humble, sometimes in the face of irrationality. It’s the only way, and this is a life lesson in itself.
A holistic view
A member of a team can do their job well if they only understand their role, but one must understand how they fit in to the larger process in order to excel. With this understanding you can shape your role to better serve the needs of your team and the business – and yourself. It also helps you with the previous point; when you have perspective on the team as a whole you also gain perspective on your individual priorities and assess whether your personal misgivings are truly important or not.
A GTD attitude
Getting Things Done. This is more complicated than it sounds, because it’s important to know what to get done. You don’t want to be micro-managed, and you shouldn’t be, because you’re trusted. Hone your judgement. Pay attention to but do not indulge your ego. Help your team to achieve its goals. Earn the trust and respect you expect from your team. Pick your battles. Map your faults. Strive to improve.
With a group of people who embody these qualities I can’t see how you can go wrong.
Requirements
“We need a CMS.”
“Well, maybe you do. What do you intend to publish?”
“We won’t know until we have a CMS!”
This very exchange took place about 2 months ago, and I failed to hear the giant, raging alarm bells.
Fast forward to today: I’ve integrated a CMS with our existing stack and now our designers, developers and UX team are ready to begin creating the assets and modules our marketing team will need for their content. So I let our marketing team know that they can begin creating content in the CMS, in fact we need them to do so so that we can discover what assets we need to create.
The response?
“How can we create content if the assets aren’t ready?”
Uh..
“We can’t create the assets without the requirements. We need you to spec the pages to generate the requirements. It’s a CMS, so you can spec the pages by creating them directly.”
“We won’t know what content to create until we have the assets to work with.”
What’s really going on here is a combination of an avoidance of work and a desire to have an impact. Specifically, a marketing team leader who joined the company quite recently and wants to impress. So us integrating a CMS system is really his/her big thing, a real and tangible project to gain kudos and add to the CV.
Nevermind that we have a team of highly competent front-end developers. Or that although our release cycle is currently a bit long (2 weeks) we’re automating that process and soon we’ll be able to release at the drop of a hat. Or that we don’t actually update content very often. But I digress – this post is about worker-avoiders.
Now that we’re at the stage where we need the marketing team to step up and pull their weight, I’m realising that what they want is to have everything (everything) laid out like a giant lego set, with which they can create a website by plugging all the pieces together. They want the pieces to be created before we know what they should be. They don’t want to have to specify what those pieces should be. They don’t want to work.
There are a lot of people out there like that; people who avoid work. Often they’re not actually blocking anything, so you can just sidestep them. Usually they don’t want to block anything, because they know that would mean they’d need to stick an oar in and help. But sometimes they lead you up a cul-de-sac, and then you’re stuck – you’re relying on them. That’s not where you want to be.
Now I’m in a situation where I need something done and I’m deeply concerned that it’s just not going to get done. The communication is also terrible (these people have never worked in an Agile way before) so I’m concerned that even if the work does get done there will be revisions coming too late. I’m at the mercy of people who are lazy and ascribe too much significance to their role. Which means that making requests around how they work is fraught with risk.
It’s difficult to spot a work-avoider, but some of them are also work-creators. Like in this situation, this is someone who creates a load a new work but doesn’t take any ownership over getting any of it done. The giveaway, in hindsight, was that first conversation:
“We need a CMS.”
“Maybe you do. What do you want to publish!”
“We won’t know until we have a CMS!”
That person did not know what they wanted to use the CMS for. What I should have realised, from that confession, was that they hadn’t done any sort of design or preparation around what content they want to publish. They hadn’t done any ground work, and they had no intention of doing so. What I should have responded with is this: “Until you have some idea of what you want to create, you can’t know what your requirements are. Tell me what you want, and I’ll draw the requirements from that for you.”
This would have the dual benefit of providing you with realistic requirements and, more importantly, forcing the ideas-people to think their ideas through a little. Hopefully during that process they’ll see that some ideas fly, and others plummet through the air like fat, stunted chicks whose mothers impatiently nudge them out of the nest and into the real world.
But I only see this in hindsight. Next time I hope to see it coming.
The Hanselman Bump
@shanselman mentioned my website the other day:
And check out the effect it had on my stats!
That’s right – 7 more visitors in one day! Damn!
Postal – Easy ASP.Net email templating
Just saw this – Postal is a .Net library that uses the ASP.Net MVC view engine infrastructure for email templating. Slick.
http://aboutcode.net/2010/11/17/going-postal-generating-email-with-aspnet-mvc-view-engines.html
TFS – I’m sorry, I’m not allowed to argue anymore
So I created some files in my TFS workspace, then forgot about them. Then the branch they were part of was deleted on the server. Oh no!
No I have a whole bunch of ‘Pending Changes’ where the files actually don’t exist in TFS *or* my computer (I deleted them locally too). I can’t Undo them – TFS tells me “No pending changes were found for [file]“. I can’t commit them then delete them. Basically I can’t get rid of them.
This is irrational. Basically TFS is being quite obstinate about it’s belief about the state of my workspace even in the face of the facts that:
a) the files physically don’t exist anymore
b) I *say* they don’t exist anymore
Why is TFS contradicting me? Why can’t TFS just believe me when I say “those files can be totally disregarded, they’re gone, I don’t care, *THIS* is what my workspace should look like”. Instead TFS replies “no it isn’t”.
“Yes it is”
“No it isn’t”
“Yes it is!”
“No it isn’t!”
[youtube=http://www.youtube.com/watch?v=UMhj3X9lN1E]
Sigh.
DON’T FREAK OUT
I just updated my blog’s theme. No big deal.
Yes it’s a post about buzz
Speculating about whether Google Buzz will ‘halve Facebook’s value‘ is an interesting diversion but not ultimately satisfying to me. As a developer I want to consider the ways in which Buzz can change the way the web works, and the way that users can use the web. I’m particularly interested in understanding Buzz’s place in the platform ecosystem, how it relates to Twitter and, of most curiousity to me, Wave.
So far Wave has not been the game-changer Google suggested it would be, but I’m not discounting it. As far as I’m concerned it’s Email 2, and Google would only have to roll out Wave as a ‘new version’ of the current Gmail to all of a sudden garner a lot of interest.
But again that’s pure speculation and not what I’m interested in writing about today. A particular aspect of these services has caught my attention, in particular the embedding features.
Mashable have added a ‘Buzz This’ button to their blog, which looks like a little hack on Google Reader:
<a rel="nofollow external" target="_blank"
href="http://www.google.com/reader/link?url=http://mashable.com/2010/02/10/google-buzz-contest/&title=Google+Buzz+Contest%3A+Win+a+Google+Nexus+One&srcURL=http://mashable.com/">
<img height="58" width="50" alt="" src="http://mashable.com/wp-content/plugins/wp-digg-this/i/google-buzz.png" original="http://mashable.com/wp-content/plugins/wp-digg-this/i/google-buzz.png">
</a>
The link provides a prompt to add a comment and post the item in your Buzz profile. It’s a really simple way to blogs to push their content out through Buzz.
Wave as it’s own embed strategy, which is to actually embed a Wave into a page, as @kevinblake demonstrates in this example post.
At the moment these two features are disparate, but they indicate an overriding theme that Google have hinted at before in rhetoric around Wave – a ubiquitous sharing and conversation platform across the web. Layers over the web that unify individual websites into a single whole. This is, to me anyway, an exciting idea.
I also see Buzz as a way to blog. There’s currently no direct integration between WordPress and Buzz (nor with Blogger at this stage), and until Buzz offers the kind of features that make WordPress useful to me (stats, mainly) I wouldn’t use it as such. I would however cross-post, which is what I’m going to do today.
Google’s vision is just much bigger than Facebook’s. So perhaps Buzz could hurt Facebook, but I also imagine Google aren’t bothered. Facebook is one of the engines that keeps the web churning. Google on the other hand is more about infrastructure, they’re the banks that the river flows between. What would the river be without something to produce a current?
Cucumber, IronRuby, Exasperation
I’ve spent the last couple of days trying to get IronRuby running Cucumber on my Win7 machine. I’ve hit a wall with it and I’m appealing to anyone who can help me.
I followed this tutorial: http://blog.webintellix.com/2009/10/how-to-use-cucumber-with-net-and-c.html
And when I reached step 5 and executed ‘icucumber features’ (in my case I called the batch file icuc.bat for brevity) I get this result:
Fail. Incidentally I’m using Ruby 1.9.1 and IronRuby 1.0 RC 1 which at the time of writing are the latest versions. I updated the paths given in the tutorial to match the appropriate paths on my machine.
The Visitor Pattern, Double Dispatch and Reflection Performance
Was listening to Herding Code #70 this morning and heard the Visitor Pattern mentioned. It was new to me (in theory but not in practise) so I was led merrily down the garden path.
Background and definition of the Visitor Pattern.
An example of the visitor pattern in C# using double-dispatch and reflection.




