Archive for the ‘Big picture’ Category

The Case for the Analyst Draftsman

Friday, November 5th, 2010

Real old style engineering, for building things like a steel bridge over a river, is different from building a software application because you can see and touch a bridge whereas software is invisible. If somebody tells you they are making good progress, you pretty much have to believe them. You only find out when the delivery date floats by, the code is buggy and won’t run, or the users refuse to use it because it doesn’t do what they need it to do that you’ve been a victim of what I call the ‘tyranny of optimism’ (which can be understood as ‘don’t worry, somebody else knows what is going on’).

Software engineering tries to excuse itself by saying that it’s a young discipline so it can’t be expected to get it right yet. But software engineering has been going for 50 years or more, and in the same time, if bridge engineering hadn’t managed to get its act together people would still be using ferries to get across rivers; they would have concluded it couldn’t be done.

There have obviously been software successes. It’s said the computing power in the Nasa rocket to the moon was much less than the machine I’m using to write this. Some teams are better at delivering software than others. How would it be if some bridge builders built bridges that stayed up while others built bridges that fell down. If you needed a bridge built you’d know where to go – to the successful team.

It’s easy to know if a bridge is successful (i.e. it doesn’t fall down), it’s easy to see what progress is being made over time and it’s easy to know if the bridge is going to come in on budget . If you were on the team whose bridges kept falling down, you would probably go and see what the successful teams were doing that was so different from what you were doing. Instead of working from a drawing scribbled on the back of a cigarette pack, you might find they had a good cohesive set of engineering diagrams and conclude that these were prerequisites of project success.

In the days of old, it wasn’t the bridge architect that drew the diagrams, it was the draughtsmen. Draughtsmen were the power behind the creative vision. Draughtsmen studied long and hard to learn their craft. Draftsmen would sanity check a design. They would ensure the maths were right and the bridge wouldn’t collapse. They figured out how much steel and how many rivets to buy, they drew diagrams that explained the order in which things needed to be built. They drew the bridge from different angles, they drew it from the top and from the side to provide perspectives.

Software engineering needs good drawings. Up until now good diagrams have defeated the software engineering community. The state of the art can describe approximately what they should look like, but the state of the practice is to forget them all together. In the old days we used to use Data Flow Diagrams (DFDs) and other arcane representations. Programmers found they were of no use. There was no way to go from the drawings to the code – so nobody could see the point. Instead, sections of the IT community decided it couldn’t be done, it was a waste of effort so they dreamed up the Agile way of working and somehow this got mis-interpreted as meaning the drawings weren’t important. They never really said that, but it was easy for programmers who always hated doing drawings anyway to interpret it that way. So they didn’t do any drawings, they didn’t believe in capturing the requirements upfront, they just believed in programmers getting their heads down and working as a band of heroes to somehow build software systems in a warm fuzzy collaborative environment where the requirements would simply present themselves as a consequence of the programmers building something and showing it to the users. Think about it – what I’m describing is a process where the making of the diagrams is too hard, so nobody bothered. And if that had worked we’d see the crisis in IT project delivery solved, but that hasn’t happened.

By the model described in this paper, Agile can be broken down into Agile Delivery (writing code and sprints etc.) and Agile Requirements. Agile Requirements is an approach that requires the breadth of the requirements to be articulated. It does not require the depth of the requirements to be articulated in advance; depth (or detail) can be deferred on a ‘need to know basis’. Another way of thinking about this is as a ‘just in time’ approach to requirements representation.

It is possible to draw good diagrams, but it can’t be done without training aimed at doing exactly that. It’s not something you learn on the job. Good drawings are mostly done in UML and are drawn according to internationally recognised standards. The drawings show the system from different perspectives including both data and behaviour. All the drawings are related, they are all cross-referenced and they all tell a different part of the story, but it’s all about the same story and it’s clear how they are related, how one starts where another ends, or how one provides an input to another.

Engineering drawings are divided into static and dynamic models. The important views are:

  • Data view
  • Use case model view (the ‘epic’ view)
  • Activity view (or the process models)
  • The wireframe view

These views are used for a host of purposes. The epic view is akin to the ‘table of contents and is especially useful in:

  • defining the user stories or iteration stories programmers use to write code against
  • informing release planning
  • informing project progress reporting against the project plan
  • informing user acceptance testing
  • defining ‘done’ i.e. when the system is finished

It takes education to produce software engineering diagrams, and it takes training and motivation to read them. To the uninformed a UML engineering diagram might be right or it might be wrong. The uninformed can’t tell the difference between good and bad. Diagrams that are not validated as correct and which do not go on to be used effectively are useless. I’ve coined the term ‘Analyst Draughtsmen’ to describe the people who produce the diagrams. Ideally, two analyst draughtsmen should work together to verify the diagrams one of them produces. The diagrams will go on to be used by the product owner, the project owner, the project manager, the software designer, the architect  the programmers and the coders.

A sufficiently accurate representation of the requirements can be reliably constructed through the application of requirements patterns. All database driven applications are similar at an abstracted level and an understanding of the patterns allows the professional analyst draftsman (or woman) to create a requirements framework very early in a project, typically taking no more than six weeks. The approach taken is both top down and bottom up (meet in the middle) where a requirements framework is created using requirements patterns that are verified with the business through interviews/workshops. All that is required to apply the requisite requirements patterns is a natural language description of the system, ideally a scope document or project mandate. This is sufficient in most cases.

A typical IT team is a group of people educated as programmers and computer scientists brought together and led by business people. The business people receive no training in how they are supposed to manage the IT team. It’s a formula that shouldn’t work – and normally it doesn’t. Too often the project is reduced to mutual recrimination where the business blames IT for failing to deliver and the IT team blame the business for failing to engage with the project. But nobody’s trained the business to manage the IT project – that kind of training is not currently available. This is a big obstacle and a real opportunity for forward thinking educationalists.

In future I envisage a Masters level degree course with two components, the first exists to train business staff to manage IT projects. The second component is for business or technical analysts who want to become analyst draughtsmen. It doesn’t sound particularly high-powered, the role of draughtsman has never attracted great status, but it is where a real difference can be made in representing requirements properly and allowing managers to make informed decisions based on a common language of understanding. The analyst draughtsman is first a technically minded analyst who understands business process and is second an artiste with a CASE tool.

SEMAT, Controversy, and Pragmatism

Thursday, June 17th, 2010

Leaving aside the question of the need for a general theory of SE, I think the idea of a meta-kernel is very useful. It seems to me that different organisations are going to configure their software engineering practice differently based on the nature of their business. If there is some theoretical underpinning to the idea that one size does not fit all organisations that’s a good thing. Let’s assert that this meta-kernal includes the following placeholders [opportunity, way of working, requirements, system, architecture, team, governance]. If I were to treat those placeholders in the kernal as holes into which I could mix and match practices, I would have something useful. Here’s where my thinking comes from…

I was watching a Jeff Sutherland video at (http://www.youtube.com/watch?v=9y10Jvruc_Q) where he talks about Scrum and Google building Adwords, and it seemed to me that the way they did that made sense for them. Not everybody is Google. We might classify Google as an ‘information company’, and Microsoft as a sealed package company, and PatientKeeper as a ‘managed service’ company. But that still leaves lots of organisations where software is not what they fundamentally offer, what they ‘do’, what they sell. So it stands to reason the way those organistions organise themselves to build software is going to be different. Not everybody is going to be an XP shop (clearly), not everybody thinks Scrum will do everything.

So with a meta-kernal if Bank of America want to combine [RUP, use cases, Java, MVC, cross-functional teams, Scrum, PMBOK] then why not? There are a lot more organisations out there like banks, insurance companies, stock brokers etc. manufacturers, wholesalers etc. who are never going to be cutting edge Agile houses, but maybe they can use bits and pieces from different practices that work for them and maybe that would be OK. Why not? Now that would make a meta-kernal really useful and whether or not it provides the foundation of a universal SE engineering doesn’t matter for this application because it provides a universal notion of how different practices in different fundamental areas of software engineering concern can be combined.

If you find this interesting read ‘Agile and the Universals of Software Engineering’ (an earlier posting…)

Agile and the ‘Universals’ of Software Engineering

Thursday, June 17th, 2010

Different kinds of organisation build software differently. Why might that be? Maybe it’s true that for some organisations Prince2 or PMBOK, or Scrum are absolutely the right choices. Maybe for a certain organisation .net is the way to go or Java, or Ruby on Rails. Perhaps your organisation captures requirements in natural language, or with use cases, or in user stories and that works fine for you. Probably every organisation in the world uses software, but for some software is the centre of their universe and for others it is a support function.

A company like Microsoft is likely to have a very different way of building software from a government department, or from a 3rd party supplier of software who wins their business in open competition. One way of describing organisations based on how they use software is presented below:

  • Sealed Packaged solutions e.g. Microsoft, Apple
    Build software products and sell them.
  • Unsealed Package solutions e.g. Siebel, SAP
    Build software products, sell them and configure them
  • Managed services e.g. PatientKeeper,
    Build a single software service and sell access to the service.
  • Information provider: e.g. Reuters, The Guardian, Google
    Build and platform that gives access to valuable information.
  • Professional services, (incl. Government, Manufacturer/Supplier): e.g. Aviva, Barclays, Lloyds of London
    Provide banking, insurance, order processing, manufacturing support, government services etc. and use IT to support the business.
  • 3rd party supplier: e.g. mPhasis, Tata, Logica
    Build software and services on behalf of other professional services or information providers.

How core software is to what the organisation does is going to affect the way an organisation configures itself with respect to software engineering.

The ‘Universals’

If you want to build software, what are the kinds of things you need to worry about? Have you got all the bases covered? That’s the question the group ‘Software Engineering Methods and Theory’ (SEMAT) have been asking themselves. SEMAT aim to come up with a design for a meta-method-kernel. This is perhaps not a fundamental theory of software engineering [1], it is however a useful thing to have [2] because everybody building software should have thought about the tasks they are going to be faced with and can at least make a rational decision on what practices they should adopt. The decision they make will be affected by the type of organisation they are and the centrality of software to their core mission.

SEMAT haven’t finished their work yet, (and perhaps they never will!) but we don’t have to wait to propose one view of what that kernel of software concerns might look like.

Figure 1: A version of the Universal kernel of software engineering concerns

The kernel in figure 1 is a collection of placeholders and it is up to the organisation to put some practices into the holes. It can be argued that there will always be something in the holes, even if the something is actually an ad hoc practice. Having watched Jeff Sutherland talk about the work at Google to build Adwords, one is left with the impression that Scrum pretty much does it all [3].

Figure 2: a populated kernel as Jeff Sutherland might have visualised it working on Adwords.

That could be absolutely fine for Google, because they are pretty good at building software and they have access to their product owners on a daily basis. The culture of Google is to have few managers and it is led by engineers. Not all companies are like Google though and therefore there is no need to copy them, because the way they do things may just not be right for the way you do things.

Consider a different kind of organisation, such as an insurance company. This company spends a lot of money on I.T., they used to do it in-house and now they’ve outsourced it to Eastern Europe. They have a Programme Management Office (PMO), they have people who want to manage risk, and are interested in ‘quality’. It’s not my job as a person interested in methodologies to tell them they should change before I can help them build better software. I can work with them to demonstrate that maybe there is a better way and if that is successful they can choose to change themselves.

In the meantime it’s perfectly possible for them to take advantage of the kernel of concerns and define a set of good practices that work for them to improve their software delivery.

Figure 3: a populated version of the universals kernel that would be appropriate for an organisation where software was not its primary product.

In Figure 3, our imaginary insurance company has chosen a set of practices that suits it, its culture and the degree to which software is integral to its business. One of the benefits of this way of visualising a software engineering practice is that it makes it easier to ‘hot swap’ one practice out for another without disturbing the others. This is the familiar concept of ‘encapsulation’.

My particular areas of interest in this topic include:

  • Opportunity: Demand management, Ideas management, and Benefits Analysis
  • Requirements: Agile Requirements Practice
  • Way of working: Unified Process lifecycle
  • Governance: PrinceLite www.princelite.co.uk

References:

[1] ‘Why We Need a Theory for Software Engineering’, Dr Dobbs, Jabobson I, Spence I, [2009] http://www.drdobbs.com/architecture-and-design/220300840;jsessionid=RZLXNZ2D4154PQE1GHOSKHWATMY32JVN

[2] ‘A Detailed Critique of the SEMAT Initiative’, Cockburn, http://alistair.cockburn.us/A+Detailed+Critique+of+the+SEMAT+Initiative [2009]

[3] Scrum Tuning: Lessons learned from Scrum implementation, Jeff Sutherland, [2006] http://www.youtube.com/watch?v=9y10Jvruc_Q

Is Agile Broad Enough?

Friday, June 11th, 2010

It is widely accepted that Agile delivery demonstrateably adds value to software teams and their ability to bring software to fruition. There is however a question around whether Agile can achieve its full potential in the face of cultural resistance within the wider enterprise. For some there is now the acceptance that IT has the potential to be more than a cost burden; it is actually an avenue to compete more effectively in the market. IT is a strategic tool where projects with quantified business value deliver everything from streamlined internal processes to new customers through social networking sites. The better able the enterprise is in harnassing IT the better it will prosper, however it is not easy and they achieve varying degrees of success.

Set against a wider context of the end-to-end business process, actually delivering some working code comes far downstream. What needs to happen first? First ideas need to emerge in the organisation, gain momentum, become scoped, costed and valued and then, if all goes well, the initiative results in working system.

Given the project delivers a working service, we would be interested in a retrospective aimed at measuring success. For instance, certain assumptions were made regarding how much value the project would bring and how much it would cost to bring to fruition. We want to know whether it was ultimately worth taking this project forward once it has had a chance to ‘bed down’ because that information is valuable. Ideally a cycle can be established where the assertions and outcomes of initiatives are tested so that they may inform future estimation activity resulting in the ‘go/no go’ decision that governs all intiatives becoming more accurate. In this scenario, the estimates of future projects (cost and value) are compared with the resulting outcomes ultimately leading to the enterprise fully directing the IT function and reaping maximum competitive advantage.

Tags: idea management, governance, PMO, Programme management, Project management, effort estimation, value analysis, agile evolution

A New Definition of ‘Epic’ 2

Friday, June 4th, 2010

This is the second post on a new definition of ‘epic’. The first post is all about types of story. If you haven’t read that first post, it might be a good idea to read that first. This post looks at the other elements (not stories per se) that crop up as inputs to requirements.

On day one, before running any workshops or conducting any interviews, you have to become familiar with the documents that have already been written. There might be reports, or project mandates, or business cases to read, or whatever. A good approach is to read the documents and start creating index cards for each salient point you encounter. Then it’s a question of making sense of them, categorising them, and creating a requirements hierarchy. Let me be absolutely clear on the point that I am not advocating a big requirements effort upfront reminiscent of ‘waterfall’. I’m just taking the pragmatic approach that whatever you do going forward, there is a need to make sense of what’s already gone on. This can be termed ‘traceability’. How can you demonstrate that what you propose in a couple of weeks time (a nicely groomed backlog – filled with implementable testable functional stories) satisfies all the inputs that have already been given?

Non-story inputs include:

  • Constraints: a condition that must not be broken
  • Non-functional requirement: a condition that must be exhibited
  • Business rules: related to a particular story (functional behaviour). Implemented as an if…then… condition. Often related to ‘state’ of a business object
  • Implementation tales: someone’s suggestion as to how the solution will be implemented
  • Acceptance criteria: related to a particular story (functional behaviour). A test that can be run to determine whether a story concludes in the manner desired

Even if you are starting the project from the outset, not everything people tell you is going to make a good candidate story. Take ‘security’. Say somebody tells you the system needs to be ‘secure’. This seems like a statement of the obvious; of course the system needs to be secure. Are you going to write a story:

As a data specialist

I need to ensure our customer data is secure from outside hacking and mis-use

So that data is not stolen and customers compromised bringing bad publicity on to the organisation

Clearly it is possible to describe ‘security’ as a story (as demonstrated above) but is it the best way of articulating the need? Is it the best use of your time? There are no hard and fast rules about categorisation, but there are guidelines (although there remains ambiguity and we can argue about it). Again though, remember we are ultimately aiming to get that well-groomed backlog created, and that means defining stories the programmers can implement as functional behaviour. Nobody is going to use your new system and come to it with the express objective of ensuring their data is secure. They are just going to use it with the expectation their data is secure. The system needs to function without breaking the rule that data is secure, so it’s natural to see ‘security’ as a constraint; behaviour that is not violated while the system is in use.

Figure: A new definition of a ‘project epic’.

The Baby and the Bathwater

Tuesday, June 1st, 2010

Every now and then people get so fed up with software failure they reckon it must be a systemic problem and they throw the collective knowledge in the bin and start again. This is the hunt for the silver bullet. The magic weapon to slay the vampire. This happened with use cases when user stories came along. It’s a shame. It’s lucky that use cases got stuck in the U-bend, and somebody used the plunger to suck them back up again.

The problem is not, and never has been, with developers being unable to cut code. Programmers do a good job with what they are given. It just happens that what they are given (the software requirements – user stories, whatever…) aren’t very good. Programmers don’t bother going back to the business and asking for something better, because they don’t get it, so they become resigned and get on with doing the job as best they can.

Agile delivery works fine. But user stories can be just plain silly. Just because it’s hard to define a good software requirement does not mean you don’t have to do it. If a user story isn’t properly fleshed out, you will find yourself trying to get to the details in programming time, not in investigation time – and that is wasteful and very expensive. It is going to lead to a lot of frustration.

‘Make things as simple as possible, but no simpler’. I wish I’d said that, but I’m just quoting it. (Apparently it wasn’t Einstein.) User stories with no structure, user stories that have no sense of wider context, are just too simple to be relied upon in anger. Hey, it’s not the delivery team that’s broken, it’s the requirements team. It always has been, and it still is.

User stories are a technique that in the hands of a good analyst are going to give the business a nice warm feeling that they are participating in the process. That’s a good thing. That’s a great thing. But you still need the analyst. This is not a process that can be de-skilled. It just can’t.

As Alistair Cockburn puts it “it’s much easier to write user story tags on index cards [then apply use cases] and let the project blow up later.” Agile project fail all the time. Practitioners claim failure is a kind of success. No, failure is failure. There’s no silver bullet, that’s true, there’s a whole box of silver bullets, and they only work when they are applied in a coordinated manner. Read: http://alistair.cockburn.us/Why+I+still+use+use+cases

How big is the elephant?

Monday, May 24th, 2010

A colleague of mine likes to ask the question “how do you eat an elephant?” The answer is “one mouthful at a time”, which isn’t really that funny, but it’s supposed to illustrate the Agile principle of ‘baby steps’. It kind of reminds me of an episode of the Simpsons where Homer is determined to eat this massive steak, and if he does it, he gets the steak for free. At least the restaurant tells him the steak is 16lbs. so he knows what he’s letting himself in for – kind of. Where am I going with this?

With an Agile project, we suspect we’re looking at a big steak, and we’re going to break it down and eat it bit by bit, but we have no idea how long we’re going to be at it, because we don’t know how big the steak was in the first place. Now say you had eaten a 4 pound steak before and you knew what that was like. If you set yourself up to eat a 16 pounder, you’d probably not eat for a few days beforehand to work up an appetite. You would at least have an idea about what you were letting yourself in for. But with Agile, nobody is saying how big the steak is. Nobody knows. Couldn’t somebody at least weigh it? OK, so maybe some of that weight is bone and some is fat and we don’t have to eat that, but it would be really nice to just have some kind of ball park figure. Know what I mean? Otherwise I’m not sure I want to get involved with this competition. I don’t need to know everything about that steak, but I’d be very grateful for a head’s up.

Maybe the analogy doesn’t hold. Say you haven’t got enough room in the fridge. Maybe I’ll just eat until you tell me I’ve eaten enough and can stop. Afterall, you are paying me to eat the steak (thanks). But you are not going to know whether I’ve eaten enough until you see it for yourself. What happens if while I’m busy eating the steak, you realise you really wanted me to have the chicken. Look, I can’t give you back the steak, that part of it is already eaten. What happens if I just eat whatever comes out of the fridge first, say it’s some bone (I’m going to find that pretty hard) or it’s some fat (pretty tasty maybe, but of no nutritional value). It’s a minefield. Perhaps I’ve taken this analogy as far as it will go. What I’m trying to say is I’d like to know what’s on the menu. That’s sensible. How do we make that happen in Agile? It’s not going to happen in Agile Delivery, that’s too late, it has to happen in Agile Requirements. Give me accuracy – precision can wait.

Estimation, Guesses and Lies

Monday, May 24th, 2010

I’m not talking about estimation of user stories during planning using ‘planning poker’. I’m talking about the big picture estimation during feasibility (I prefer the term ‘contemplation).The boss says ‘good idea, how much is it going to cost?’ Is this question supposed to go away? ‘Listen boss, just trust me, we’ll get started and see how we go, and if we don’t make any progress, just cancel the project.’ Fine if that’s the kind of company you work for. I’ve never worked for anybody who ever thought like that. Perhaps that’s a pity, but it’s my experience. No, they want to know how much it is going to cost upfront and it doesn’t matter that it’s it’s a pile of hooey. Everybody knows the number has effectively been plucked out of the air, and somehow it becomes the budget, and everybody’s disappointed when the real project bears no relationship to the estimate. Odd, a number based on a guess is wrong – who would have thought it. But it is still the case that if that is what the accountant types want, that is what you have to give them. So, instead of a completely random guess, wouldn’t you prefer to base the guess on something so instead of a wild guess it was an educated (OK, an ‘informed’ guess). Yes it’s hard, but that doesn’t mean it’s impossible, nor does it mean we can ignore it. It just means it’s hard. But, it is possible to get better at hard things – that’s why people practice at things. Nothing worth doing is easy – remember that old saying. I hated it when my mother told me that – but that doesn’t make it wrong.

So it could be that your estimates are today an illusion – they represent an illusion of control. In reality the business would be happier if they could keep their illusions of control and they’d be a whole lot happier if the illusions became more concrete over time. OK, so to start with estimates are rubbish, but it is possible that if a reasonable process were defined, and refined iteratively, with a meaningful feedback loop from projects completed, we could get better at it. This doesn’t mean years of analysis, we’re past that, but why can’t we have an accurate representation of what we want without cluttering it all up with mis-leading precision?

Human history is littered with stuff we don’t know, then we figured it out, and then we realised it was just a question of us not knowing – yet.

Agile Stress

Monday, May 24th, 2010

Why do people choose Agile? Is it because they are desperate? On the one hand Agile seems pretty straightforward – it’s a method that gives development teams more say in how they build software. On the other hand, Agile is hard because business people have to change the way they work coupled with needing a lot more trust. The business has to give up the illusion of control, and go for real control over a smaller planning window. They have to move away from the idea of fixed price/scope/timeline and embrace time and materials. No wonder management feel insecure. Wouldn’t you? And even though the Agile coaching community make it clear this is what is required, the business doesn’t want to hear it. It seems to me that people only hear what they are ready to hear – no matter how clearly you say something. That’s just the way it is.