The Art of Agile Development

Keep this book to hand

The Art of Agile Development was recommended to me by Jeff McKenna when he provided some Scrum coaching to those of us in the Dublin office working on Oracle Social CRM. Back then it was a new, hot off the press book, but I have recently reread it because I have found it useful in providing guidance on what to watch out for when changing agile development practices. This was necessary due to changes in teams and technologies as some of us focused full time on Fusion Applications. Practices, roles and responsibilities we had gotten used to had to be adapted or dropped to blend in with APM, Oracle Fusion Application’s development methodology.

The book, by Shane Warden and James Shore, is a great introduction to agile development methodologies by covering both XP and scrum. Practical examples are generally from XP projects because that is where the authors have the greatest experience. The authors identify a broad set of practices that would be considered as characteristics of agile development methodologies in way or another. Recognising that it is very rare in most organisations to be able to follow an agile methodology completely as prescribed alternatives are mentioned, but not in every case. Shane and James are also very clear that many of these practices are often taking place at the same time in a software project rather than in a sequential waterfall methodology. However, categorising practices by what sort of activity and the nature of the activity give a very useful matrix for teams to analyse how agile their own practices are and perhaps identify areas where realistic improvements can be made. Just being able to have a label or term for a specific practice makes discussing within a group easier.

Download poster from James Shore

I see the collection of practices being grouped by phases (planning, analysis, design & coding, testing, deployment) and verbs (thinking, collaborating, releasing, planning, developing). For example, when team members are working on implementing a specific feature that kind of collaboration is ‘design & coding collaborating’ and the section in the book covers some pair programming techniques. In fact, this particular section addresses the misconception that pair programming is a fulltime ‘paired for life’ regime. It is a useful tool that can be used for a few hours a day to make some significant progress, reduce interruptions, and spread the knowledge of how and why parts of the system being developed work.

Other useful techniques peppered through the book include the Agility Self Assessment and the many skill development routines, which the authors called ‘etudes’. These are short exercises that may help in getting the feel for a more agile approach. When reading the chapters you might be thinking we don’t have the development experience to let team members do organic, incremental architecture design, or implement thorough automated testing. I wonder how many people never complete the book because they do not believe they can carry out these changes and deliver software in a timely fashion. It’s not until towards the end of the book that the authors address the reality of the mixed capabilities of the team. If this was at the beginning it might give the readers more staying power. The book does have some helpful advice on working with and around the politics, the mixture in experience levels, and heavy weight project management within your organisation. It has to be read in it’s entirety though and does make for an excellent reference book to dip in and out of.

This article has been edited since it was first published.

Should we ban anonymity on the Internet?

In an Information Security article a few months back, Bruce Schneier (author of Schneier on Security) and Marcus Ranum put some points forward for and against internet anonymity. I have to admit that I agree with Schneier and find Ranum’s argument quite weak. He appears to suggest that the main reason to enforce identity is to avoid spam. The tools aren’t great, but there are already mechanisms in place to address this. Criminals are always getting better at finding ways to exploit weaknesses in internet technologies increasingly at the heart of the way we shop, interact, work, entertain and inform ourselves. We just have to keep up with the pace in the cat and mouse game. Sacrificing anonymity, and the right to privacy, is too great a cost for just avoiding emails about Viagra ™ and Nigerian generals with a stash of cash to move out of the country.

What is the great danger of not being anonymous? Well it’s all the inferring that goes on about facts that get gathered around the things you search for, shop for, chat about, view and listen to. These are then used to categorise you for advertising, inclusion or exclusion from groups or activities. NetFlix provided a great example of this last year. Just weeks after the contest began, two University of Texas researchers showed that with the NetFlix data one could identify users and in some cases their political leanings and sexual orientation.

Getting back to Schneier’s point, trying to implement a robust identification system, which criminals can not outwit or take advantage of, is not possible…

Mandating universal identity and attribution is the wrong goal. Accept that there will always be anonymous speech on the Internet. Accept that you’ll never truly know where a packet came from. Work on the problems you can solve: software that’s secure in the face of whatever packet it receives, identification systems that are secure enough in the face of the risks. We can do far better at these things than we’re doing, and they’ll do more to improve security than trying to fix insoluble problems.

More than Iron Man – Oracle and Marvel

At the beginning of April 2010, Oracle, using the buzz around the release of Iron Man 2, kicked off a worldwide advertising campaign focused on introducing the powerful combination of Oracle and Sun. This includes old school billboards and commercials on a variety of old and new media platforms…


All this makes for some fantastic visuals, but how exactly is Marvel using Oracle? The list of Oracle products being used by Marvel is diverse:

  • Oracle E-Business Suite, including Financials, Human Resources, Self Service HR, Manufacturing and Incentive Compensation
  • Oracle Business Intelligence Suite
  • Oracle Configurator
  • Oracle Enterprise Content Management Suite (formerly Stellent)
  • Oracle Insight

Further information on how Marvel is able to keep track of inventory, and manage the budget on epics like Iron Man, is revealed in Support for Superheroes, Avengers, Assemble! and Marvel Entertainment Grows its Business with Oracle (video)

Interface Oriented Design

This book has been sitting on my desk for a long time and I’ve been dipping in and out of it for at least a year. I’m a big fan of The Pragmatic Programmers and the topic of interface is very close to my heart as it is often the most ignored when system analysis and design occurs. Apart from performance, interfaces are generally the biggest problem that is faced when a system goes live because once people start to use it, they want to use it with the other systems and tools they are using. The human interface to a computer system gets, quite rightly, a lot of focus. The topic gets it’s own module in Computer Science degree courses. This has meant that today’s software developer is familiar with the concepts of usability, task analysis, workspace arrangement, error detection and recognition.

I was hoping that Ken Pugh’s Interface Oriented Design was going to be that seminal book which would set out design principles and approaches for deriving robust interfaces. It is not. While it does introduce some interesting concepts such as the Three Laws of Interfaces and Interface Responsibility Interaction it lacks a real world sense about it. In fact, the purpose of the book appears to be the platform to launch Pugh’s Interface Responsibility Interaction format. It’s an interesting idea, but unfortunately it does not make a strong case for using such a format in real projects. Some case studies from other projects where IRI was used would have been beneficial.

One gets the sense that this is a serialisation of some lectures within a system design module in college, with a trivial exercise to prove the points. Put simply, there’s really not much in the book to grab the experienced developers attention.

It’s not you, it’s me – Check the bugs log before going crazy


How many times have you been working on implementing, unsuccessfully, a feature in your application which relies on a framework, container, or some other indirection layer? You’ve studied the specifications, memorised the API and you’re following the developers guide which are all telling you that what you are trying to implement is taken care of, but it still does not work!

While recently working on a really simple application feature using ADF data model validation I had just this experience. The feature just did not work and there was nothing in the logs to indicate what the problem was or that there was even a problem. Admittedly, I was using an internal development build, so it would not have been a fully tested version. I checked, and double checked everything, the documentation, searched through forums and blogs, trying to find out what I was doing wrong.

By the way, while searching I did come across an interesting blog about ADF bugs and workarounds. Steve Muench‘s Dive into ADF blog is probably the most comprehensive on ADF features though.

It turned out I wasn’t doing anything wrong but I only found this out when a colleague suggested I check the bugs database. And there it was! The exact scenario I was trying to implement had a bug against it. What a relief, because I thought I was missing or skipping over something really obvious and fundamental and that’s why it wasn’t working for me. Better still, the defect was marked as closed so it will be available in the next internal developers build.

This got me thinking about all the documentation sources I had been to and how useful it would be to have a cross reference between the structured and unstructured text of developer guides, API, forums, blogs and bug databases. Isn’t that what search engines are for?