RSS
Facebook
Twitter

Tuesday, January 18, 2011

FogBugs and Kiln World Tour

Last Thursday I was fortunate enough to get a place on the FogBugz and Kiln World Tour.  I booked it before I moved jobs, and I'll be honest I had no real interest in the software.  I've been reading Joel's books and blogs since my friend Brent bought me Joel on Software and made me read it (he had the foresight to know I'd want to hang on to his copy if he'd lent it to me!).  I wanted to see the man in the flesh and hear what he had to say about his software.  Because really, do we honestly need yet another bug-tracking / project-management tool?

Who would benefit from FogBugz?
Joel's demo was really good at demonstrating exactly how you might use the software - the processes you might follow, how to raise / update a ticket and chase it, and how you can see what's going on with the projects tracked.

I can actually think of a number of companies I've worked for, or friends have worked for, that would see an improvement in productivity from using FogBugz for bug tracking / project management.  When I worked at Touch Clarity (later swallowed by Omniture, which was gobbled by Adobe) I was desperately looking for a product to help us:
  • Record defects
  • Capture new feature requests
  • Assign tasks to developers
  • Estimate tasks
  • Track progress - both at a project level and for individual developers
  • Provide us with a lightweight process which was easy to follow
  • Generate reports for management.

From the demo I saw, FogBugz will do everything we wanted at that time.  We were using Bugzilla back then, and badly.  I'd also investigated XPlanner, VersionOne and a bunch of other defect/project management tools, and not really seen anything that did what I wanted (certainly that was cheap enough).  But this was back in 2004/5, we were doing a half-hearted version of eXtreme Programming, and we didn't have a lot of cash to burn.  It was hard then to find a lightweight, customisable, inexpensive tool.

The things I saw in FogBugz that I thought would be useful were:
  • Nice UI - usability of these things is so frequently under-valued.
  • Really easy to track what's going on with a defect, to add and edit comments etc.  I actually liked that the edit feature still tracked versions of the comments, I can see how some organisations would need that audit trail.
  • Evidence-based scheduling - I liked the way that it uses past information to have a good guess at how accurate an estimate will be, and therefore the soonest, likely and latest times a feature might be delivered by.
  • Visibility over an individual developer's workload.
  • Visibility over work at a project-level
  • Loads of charts/reports to let you slice and dice the stuff you have in there.
  • Dependency management
  • Neat integration to source control - yes, I know you can get this for loads of management tools now, it doesn't mean it's not useful. It seemed pretty slick here.
  • It seemed quick.  But then it could have been a locally-running instance with about 3 defects in it.

The things I thought would not be so useful in a more Agile environment:
  • Evidence-based scheduling
  • Visibility over an individual developer's workload.
  • Lots of the ways the data can be sliced and diced
  • Dependency management

So, you like it and you don't like it?
Yeah yeah, I've gone all multiple-personality again.  The stuff I liked about the product would be dead useful for the types of projects that work that way - where you assign work to individual developers who estimate the work; where developers are assigned to specific projects; where stories / features might not be broken down into small, independent tasks.  These places might be running waterfall, or some agile-ish process, or no process at all.  A tool like this will give them much better visibility over what's going on, over which deadlines won't be met, over who's estimates are flaky and who's are generally reliable.

However even before I joined ThoughtWorks, before I joined LMAX, I was sold on Agile as a more natural way to run development teams (this is despite having worked with Touch Clarity's sort-of-XP and A Very Large Media Organisation's ScrumBut).  The problems that some of the features in FogBugz tries to address are similar to the problems that Agile (XP/Scrum/Kanban or some hybrid of these) is also supposed to address.
  • Evidence-based scheduling: I totally agree with getting statistical about this - teams and management should have a good idea how reliable estimates are.  But one of the ways to reduce the variation is to have the estimates done by the team.  At LMAX, we would have three developers estimate every story.  With any luck at least one of those would know enough about it to provide some solid technical guidance on what was involved, but if there wasn't someone in a group of three that had that knowledge, chances were pretty good the team generally were going to be pretty vague on it.  Granted, if you're using FogBugz you can enter the team estimate instead of just the individual who is going to implement it and then your evidence-based scheduling will be for team-estimates instead of personal ones.  This is totally fine, in fact it's a good thing - I just think we shouldn't use evidence-based scheduling to "fix" the problem that estimates are just that - an estimate, a guess.
  • Visibility over a developer's workload: If you're doing pair programming (XP), if the team takes ownership of the implementation of features / stories (Scrum), there's no need to look at how busy an individual developer is.  Yes, there are lots of organisations that do allocate work to individuals.  In many (most?) Agile-practicing teams, this will not be happening.  So really you only need visibility over a team or project level.
  • Reporting: Ah, I love reporting.  I love data, statistics, pretty charts. Maybe I'm secretly a project manager.  But it's SO easy to get hung up on the stats, on one tiny measurement, rather than the bigger picture - are we getting closer to "done" or not?  I think you should be able to get at all that data, but not get carried away micro-optimising for metrics which may be hiding bigger problems.
  • Dependency management: another thing that is dead important in some types of teams or organisations.  But the last few Agile projects I've worked on have not tracked hard-link dependencies at all - each story should stand alone, should be estimated on the basis of just doing that piece of work.  Yes, this is idealistic, and even in the projects where we did not officially track dependencies, we'd have a good idea of a very general order things should be done in (or an idea of the order things could be done in to make life easier).  But these things can be fluid, if a specific feature needs to be done now, you shouldn't have to do every single story that might have a tiny piece of functionality this story is dependent on - just tackle this story and everything you need for it.  
All of those points could be blog posts in their own right, I know it's taken me years to get my head around the way I personally see Agile.  But you get the idea, or maybe you don't - that's fine, maybe you're in exactly the sort of place that could use FogBugz to improve your productivity.

FogBugz vs Mingle
I started at ThoughtWorks last week, so I'd better mention that ThoughtWorks Studios have a competitor product, Mingle.  I'm reasonably well-qualified to talk about it since I've been using it in anger for the last two years in a maturing agile environment, and I had my Mingle indoctrination induction last week.

To me, the main difference is the angle the two products are taking to approach the same problem: how do you provide a tool that
  1. is easy and lightweight enough to use that people (particularly developers) will keep it up to date;
  2. tracks just the right amount of data that people have visibility over the state of development (What are we doing?  Are we going to hit our deadlines? What are our blockers?)

To me, it seems FogBugz is coming from the traditional development model - it might not be anything as formal as waterfall, but it may not be based on short iterations and assumes individuals rather than teams are assigned work.  Mingle was developed for the Agile team, e.g. collective responsibility, pair programming, short iterations.

Mingle is highly configurable, and while FogBugz has a number of templates and custom work flows, Mr Spolsky specifically stated at the demo that these really shouldn't be used.  That they've worked hard to find a process that works, and we should all follow that.

So, Mingle embraces the differences between teams/processes and FogBugz specifically discourages it.

I reckon these things are actually also the potential downfalls for both products too:  Mingle can be abused so badly that it adds no value; FogBugz could be so prescriptive it slows down productivity.

But it's horses for courses, every tool has its advantages and disadvantages.  Or should I be pushing Mingle at this point until I pass my probation??

Kiln, and an introduction to DVCS
Good Lord, I've written all that stuff and that's only from the short demo at the start of the day.

Fortunately I have a lot less to say about the latter part.  It was an introduction to Distributed Version Control (DVCS), and it was pitched absolutely right for someone like me.  

I've never used a DVCS; most recently I've been using Subversion, but I've also used PVCS, ClearCase, VSS and a bunch of others (in fact, I'm pretty sure I've had to learn a new source control system every time I've switched project or company!).  I've been introduced to Git over a lunchtime, and I read Martin Fowler's blog post on version control tools.  The intro provided by FogCreek was spot on for me.  It showed me:
  • The differences between a DVCS and something like Subversion (OK, specifically svn, which is fine for me);
  • Advantages of using a distributed source control system;
  • Some mindsets that you need to change when switching from svn to a DVCS like Mercurial;
  • The FogCreek way of setting up the repositories.

The last point was particularly useful in giving some real-life examples of how to use a DVCS and why.

Then there was some stuff on why Kiln might give you more than just the freebie Mercurial install.

It was more useful in a general fashion than the FogBugz section.  However, like the FogBugz talk, I got a good feel for the types of teams/companies Kiln might be good for, and why you might use it.  Personally it convinced me that using a DVCS in general is probably better than Subversion (insert usual disclaimer of different tools being appropriate for different situations).  It certainly encourages working practices that will lead to a) less accidental loss of code (after all, that's what source control is for) and b) if well organised, better separation of bugs / features / stories and better integration across versions and branches.

If you want to know what I've been blathering on about in this section, check out Joel's excellent introduction to Mercurial.  OK, I admit it, I haven't read it all.  But it seems to cover everything that was covered in the conference session, with Joel's usual wit and appeal to the developer mindset.

In Other News
In terms of an education session, the "World Tour" was excellent - succinct, easy to digest, and (to my mind) aimed exactly at the audience.

However.  I actually ended the (half) day being slightly disappointed, and not just because these tools don't seem to be ideal for the Agile team. 
  • I didn't get enough of a chance to network.  Now, I'm happy to admit this is a problem I regularly have - because, like many developers, I find it difficult to talk to new people in a big room full of people I don't know.  However, given that this was a big room full of developers, I wish there had been more of an effort made to help us to mix and network. Before the talks we were on tables in another room having coffee etc, which I liked because it did lead to some conversation in small groups.  But I would have been nice if there had been a chance at the end of the talks to chat to people and dissect the session (if there actually was, it was so badly publicised I missed it).  I went with a stack of business cards and didn't give a single one out.
  • The half day didn't seem like enough.  But this might be more a reflection of the above point since I got what I wanted from the talks, any more would have been too much info.  So maybe I just wanted more time with the attendees and with the FogCreek guys.
  • I was shocked by how few women there were.  I'm no tech newbie, I've been to training sessions, conferences, user groups, seminars, and worked on site at a lot of different types of places.  I was very surprised to see that in a room of several hundred people I counted 5 women (myself included).  This seems low even for gathering of techies, it seems very low for a presentation on a piece of software that is effectively project management software.  I don't have the stats to hand, but in my personal experience any technical event with even a sniff of project management stuff is better represented across both genders.  I wouldn't normally comment on it because it's something I'm used to myself, but I've been asked a bunch of times in the last two weeks "what do we need to do to encourage more participation by women?", and I have my eyes open for stuff which might help me answer that.

In Conclusion
  1. A generally good, well-run event, especially as it was free (if I recall correctly).
  2. FogBugz and Kiln are excellent tools for a certain type of organisation / team, and I'm not talking about a small minority of teams here.
  3. If you're Agile, these tools are probably not for you.  You can get them to work, and if you're "kind of" agile they're probably better than a lot of your options.  But true agile teams running an effective process might find themselves hindered more than helped.
  4. I'm going to download and install a DVCS the very next time I have to write a line of code.


Monday, January 17, 2011

CSS for Developers: Horizontal Layout Using CSS

I'm a Java Developer.  But I'm also a Web Developer.  Web Developers have been so badly maligned over the last decade or so that I always feel wary (and sometimes slightly ashamed) admitting this.  There's some sort of assumption that Web Developers (and Front End Developers) aren't real programmers. Similarly, "real" developers don't like to be tainted by coming into contact with that nasty "front end stuff" in case someone mistakes them for a designer.

Trust me, no-one is going to mistake a Java Developer for a designer.  For a start, when designers wear geeky glasses it's ironic.  Or chic.  Or something.

But developers will be forced to do something around the front end at some point in their lives.  Even if it's because they're sick of manually kicking off some process and want to give the users a big red button to press instead.

So, as much to compensate for my own goldfish-like brain as anything else, I'm going to make a note of some of the CSS stuff I've used or found helpful during my mad scramblings to get the LMAX Trader user interface to a) look the way we wanted b) perform fast enough so our awesome back end performance wasn't totally invisible to the retail user and c) Not Suck Too Badly in Internet Explorer.

Part One: Horizontal Layout (or: There's No Excuse For Tables Any More)

You may (or may not) have heard that using tables for layout is a Bad Thing.  But to be fair, most of us don't care.  I've done it myself, it's usually the quickest way to lay stuff out on the page, especially if you're new to HTML / CSS and/or short on time.  There are loads of arguments all over the web as to why this is a bad thing, but the reasons I didn't want tables on the LMAX UI was a) we saw the performance improve by a really simple replacement of tables with divs and b) given the amount the UI was mutating, divs positioned with CSS was going to allow us a much quicker turnaround for the umpteenth re-design of the UI (ideally the upshot of this would be letting the designers mess with the CSS when they changed their minds and leave us developers out of it).

Anyway let's assume Tables Are Bad.  Tables are only for tabular data, not for layout.  In my world.

1.1 Simple Horizontal Layout Using Inline

The most common use of tables for layout is where you put elements side by side - the default behaviour of divs is that they lay out underneath each other.

However it's pretty easy to get divs to behave this way too, and using divs has some advantages over using tables.
<html>
<head>
<title>Horizontal flow</title>
<style type="text/css">
#left {
background-color: cyan;
display: inline;
}
#center {
background-color: yellow;
display: inline;
}
#right {
background-color: red;
display: inline;
}
</style>
</head>

<body>
<div id="container">
<div id="left">Left</div>
<div id="center">Center</div>
<div id="right">Right</div>
</div>
</body>
</html>
The first option is to use display: inline.  This will lay div elements next to each other, similar to a span.  This is the simplest way to get divs to appear side-by-side.

The disadvantage of this technique, however, is that inline elements can't be sized the same way as standard divs.  By default they contract to fit the content.

The screenshot above is from Chrome on the mac - you'll notice by default the elements have some spacing between them.  Reducing the margin/borders on the elements doesn't seem to eliminate this, so that's something else you might need to consider if you use this mechanism to display elements side-by-side.

1.2 Simple Horizontal Layout Using Floats


<html>
<head>
<title>Horizontal flow</title>
<style type="text/css">
#left {
background-color: cyan;
float: left;
}
#center {
background-color: yellow;
float: left;
}
#right {
background-color: red;
float: left;
}
</style>
</head>

<body>
<div id="container">
<div id="left">Left</div>
<div id="center">Center</div>
<div id="right">Right</div>
</div>
</body>
</html>
Similar to using inline, floating a div will do the following:
  1. Make it shrink to fit the content
  2. Lay it out side-by-side with any sibling floating divs.
You'll want to apply padding, margins, height, width and whatever else to make it appear less rubbish.


1.3 Wrapping Horizontal Layout


<html>
<head>
<title>Horizontal flow</title>
<style type="text/css">
#left {
background-color: cyan;
width: 50%;
float: left;
}
#center {
background-color: yellow;
width: 50%;
float: left;
}
#right {
background-color: red;
width: 50%;
float: left;
}
</style>
</head>

<body>
<div id="container">
<div id="left">Left</div>
<div id="center">Center</div>
<div id="right">Right</div>
</div>
</body>
</html>
The advantage you have using divs over tables is that you can get the browser to work out how the elements should flow.  Tables require you to determine exactly how many cells appear on each row, but with divs you can determine a width for each element and have the browser work out whether to show it on a new line or not.  This will work with both percentage and pixel widths.
  • If you want a more table-like structure where you know exactly how many elements should appear on each line, use a percentage of the screen with.  
  • If you know the width of each element, you should set a pixel width on the elements and have the browser work out how many to show per line.

The next CSS post will go over floating behaviour in a little more detail.

Sunday, October 31, 2010

Live at Last

We went live with "real" customers this week just gone.  It's the culmination of nearly two years work for me personally, and three years for our company.



It's really nice to be live at last, and to have our name out there. It might (in fact, should) change the focus of our work. Without paying customers it's much more difficult to prioritise work based on what they might need or want.

Exciting times for LMAX!

Friday, July 9, 2010

This is just a summary of the points I took from the Lean conference at Bletchley.  They all need expanding, this is just the stuff that struck me that I want to record.

A Kanban Multiverse – Karl Scotland
Points from his talk
  • Meaning = visualise; interact; persist
  • Kanban provides the translation between communities
  • Remove columns from the Kanban board - no more chucking things over the wall to people
  • Flip charts for design models
  • Dots on cards for every day in dev, crosses for every day in test
  • Exploration of UI is part of the card
Ideas applicable for my project
  • Add broken acceptance tests to the Kanban Board?
  • Start doing task breakdowns again
  • Add issues and impediments to Kanban board?
  • Mingle should be updated to reflect the Kanban, at the moment the states are incorrect

Converting a Scrum Team to Kanban - Mattias Skarin
Points from his talk
  • Moved from releases per iterations to releases per week
  • Shifted motivation from delivering at end of iteration towards delivering quality
  • Establish release cadence and team rhythm
  • Root cause analysis to find problems and target them
  • Removed the need for estimates
Ideas applicable for my project
  • Shift to focus on release cadence from iterations?

Product Development in the Land of the Free

Points from their talk
  • Goal should be to “Delight Customers”
  • Sitting together decreases waste
  • Sysadmins belong to the team and rotate
  • Deliver value fast enough and you don't have to ask for permission

Learn to Lean: Becoming a Lean Startup – Damon Morgan

Points from his talk
  • Introduce a learning culture: blogs, brown bags, conferences
  • Scrum introduces a half-day overhead of planning etc.
  • Scrum implies a handed off release to QA / Ops
  • Didn't have “QA” but “Developer/Testers” and “Tester/Developers”
  • Lean = planning on demand. 
  • Not sure when we're supposed to do retrospectives with a pull model?
  • Definition of Done is not only released to production, but has two possibilities: Generating Value and Not Generating Value
  • Cards that are “complete” but not released are inventory (and therefore waste)
  • Need fast smoke tests
  • Monitoring allows you to reduce errors and see if the release was good. Auto-rollback if not
  • Releases can be small, feature-specific releases
  • Have an ideas wall for anyone to contribute
  • AB Testing very useful to this organisation.
  • Reduced reliance on estimates
  • Releases not a big deal – happen daily
  • Measure outcomes, not activity
  • Out of 20 ideas, maybe one works. But cost/benefit clear and well understood
Ideas for us
  • Become more release-focussed
  • Should we encourage developers to do (more) exploratory testing?
  • Definition of done should be “released”
  • Better automated monitoring

Using Kanban to Continuously Improve – Benjamin Mitchel

Points from his talk
  • Quality First
  • Flow important
  • “What wasted your time?” to do root cause analysis
  • Measure time taken to flow through the board
  • Even if you show people metrics they still don't believe you
Ideas for us
  • Thank goodness we're not a big enterprise organisation

Behaviour Driven Development – Liz Keogh

Points from her talk
  • The term BDD and what it means has solidified over time, but it's nothing new
  • Concentrate on your riskiest tests first
  • Write your tests starting “should”
  • Conversations are around behaviour not tests
  • Development of stories is focussed on learning
Ideas for us
  • We're pretty good at BDD

Value Stream Languages – Eric Willeke

Points from his talk
  • Really just a summary of the day / Lean
  • We should respect different languages
  • Break things down into what you need to learn, not what you need to do and how long it will take
  • Variation comes from time it takes to learn, not time it takes to do
  • Ask “what do we need to know that we don't know now?”
  • Break milestones down accordingly – High Learning → High Risk → Core Value → High Value
  • Standup should be phrased “what did we learn yesterday; what do I need to learn today”
  • When your acceleration of learning decreases it might be time to stop designing and start doing
Ideas for us
  • Maybe a shift in thinking about “learning” instead of “doing”

Summary

Points frequently repeated and/or relevant to my project
  • Aim towards no estimation
  • Not focussing on iterations but on releases
  • Releases are part of the definition of done
  • Our BDD and basic Kanban is pretty good
  • Visibility allows us to find bottlenecks and target them
  • Focussing on learning might be a path to improvement
  • Silos are Bad, mmmkay?

Friday, May 15, 2009

Comments on representations of our industry

I have not (yet) seen the presentation this post is referring to.  But I think many of the comments Ted makes are very valid, and our industry as a whole should occasionally stop and think.  I've seen Ted speak at QCon, and I've had a lot of time for his comments ever since.

I'm aware that this blog is rapidly filling with comments about gender and perceptions and people-y stuff, when I originally wanted it to be a purely technical blog.  But I guess this other stuff interests me more.  And there are less people talking about it than there are talking about pure technical solutions to problems.

Thursday, April 2, 2009

Monday, March 30, 2009

Sexism in IT?

Let's celebrate our IT women

"Everyone" knows that there are more men than women in IT.  That it's a "boys" job.  Not a lot of people know that the first programmer was a woman.  Not a lot of people realise the number of women in IT is DECREASING.  And has been since the 80s.  In a working world where I honestly believe that *in general* there are more opportunities for women (OK, inline with the other stuff I've been reading I'll caveat this with white, middle-class women), it seems shocking that such a growth industry as IT is actually losing women, and appears unable to determine why, or stop the flow.

I get asked a lot, as a girl programmer, why there aren't more women in IT.  This is a complicated issue and one I've been thinking about for years and still don't have any good answers, but I personally think it's more about perception than anything else.

I don't think it's because you get more outright sexism and laddish behaviour in IT than anywhere else.  I've worked in half a dozen companies, in a range of industries, including very male industries like manufacturing and banking, I've been a consultant so been onsite at a bunch more companies.  And I have to say I don't think I've ever seen the sort of behaviour that is mentioned in the article.

I would go so far as to say IT, certainly in terms of programming or IT support, actually attracts men that are quite the opposite to laddish.  So here I will succumb to gross generalisation and stereotypes myself, but the guys I've worked with are highly intelligent and more likely to rate you on your ability than on your colour, sex or background.  These are often guys who were actually studying at school rather than absorbing anti-female sentiments in the pub or from The Sun.

I find being a woman in IT both a blessing and a curse.  As a girl, you are, I believe, more likely to get through to interview, and since you stand out as different are more likely to be remembered and called back for a second interview.  I think once in the organisation, we suffer more with low self-esteem and find ourselves constantly trying to "prove" that we're not just some token bimbo hired by HR.  And do you know why?  Not because anyone ELSE thinks that, but because WE think that.  We are our own worst enemies.

We need to take a leaf from the boys' book and have more faith in ourselves, more confidence.  We might not be as good as that person over there at this particular thing, or this other person at something else, but we are good at what we do, otherwise we wouldn't be there.  And if we express our insecurities instead of our confidence, other people will assume we're as mediocre as we sometimes think we are.

Some of the very worst culprits for sexism in our industry are us, the girls who are already in it.  Yes, it does exist, I am not denying that for a second1.  But the way to overcome it is to reflect it back at them, not to internalise it as our problem, something wrong with us for being in the wrong job.  The more we show that it's normal for us to be here, that we belong here, the better we'll feel about ourselves.  And maybe we'll attract a few more girls too.



;1Take, for example, the CEO who interviewed me and said "I'm probably not allowed to say this, but how will you feel working in an environment full of men".  To which my answer was, have you read my CV?  I went to a boys' school for sixth form, I was one of 6 girls on my degree course (out of approx 150), I worked at Ford for 4 years.  Don't you think I would be more freaked out working with girls?