"Our primary tool for design is abstraction. It allows us to effectively use encapsulation, inheritance, collaboration, and other object-oriented techniques."
Rebecca Wirfs-Brock, Alan McKean, Object Design: Roles, Responsibilities, and Collaborations, 2002


"The computing world has undergone a revolution since the publication of The C Programming Language in 1978. Big computers are much bigger, and personal computers have capabilities that rival the mainframes of a decade ago."
Kernighan and Ritchie, The C Programming Language 2nd Edition, 1988


"If you can't explain it simply, you don't understand it well enough."
Albert Einstein


"When people are factored in, nothing is simple."
Ken Schwaber, Mike Beedle, Agile Software Development with Scrum, 2002


"Excuse me, but I am in the middle of fifteen things, all of them annoying"
Susan Ivanova, Babylon 5


"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
Martin Fowler, Refactoring, 1999


"The best software designs look simple, but ... it takes a lot of hard work to design a simple architecture."
Grady Booch, Object-Oriented Analysis and Design, 2007


"What we don't like is needless complexity."
Richardson, Ruby, RESTful Web Services, 2000


"Adventurous walking tastes are as varied as Devon's many landscapes and therin lies the appeal of this marvellous country."
Alan Hobbs, Kate Hobbs, David Hitt, Carol Hitt, Walk Devon


"Never attribute to malice what can be explained adequately by incompetence"
anon


"Let love and faithfulness never leave you; bind them around your neck, write them on the tablet of your heart. Then you will win favour and a good name in the sight of God and man. Trust in the Lord with all your heart and lean not on your own understanding; in all your ways acknowledge him and he will make your paths straight..."
Solomon, Proverbs chapter 3 verse 4, a long time ago


"One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them In the Land of Mordor where the Shadows lie."
Tolkien, The Lord of the Rings


My notes on software development covering topics such as analysis, design, process, and tools, plus some other bits and pieces.

Analysis and Design

Analysis and Design
The fundamental task of the software development team is to engineer the illusion of simplicity
Grady Booch, Object-Oriented Analysis and Design, 2007

Designing good software is a constant battle with complexity. Great software designers mercilessly strip away all unnecessary complexity. Unavoidable complexity they hide behind simpler interfaces. The best software designs are ingeniously simple or at least present a perception of simplicity to their users. The elegance of such solutions can be truly delightful.

Designing elegant solutions requires a deep understanding of the problem being solved. In the past, specialist analysts and designers built a complete, detailed understanding of the whole problem during long analysis and design phases at the beginning of a project, communicating the results to the rest of the project team through large, formal documents or formal models described in the Unified Modeling Language (UML). These days, it is more likely that the whole team will sketch out an initial, overall, high-level understanding of the problem together as part of a short discovery or exploration exercise, using UML informally if at all, adding detail and increasing understanding iteratively as development proceeds guided by a modern, agile approach.

Read more about software analysis and design...

Process and Management

Process and Management
No amount of process over-specification will make up for bad people.
Coad, LeFebvre, De Luca, Java Modeling in Color with UML, 1999

Software development process is all about the way a team works together and interacts with all the other interested parties and teams in developing a piece of software.

The software industry has invented, proposed, and debated, refined, celebrated, and criticised many different processes, methods and approaches to team-based software development over the last forty years. After the waterfall processes and structured methods reigned supreme in the 1970's and 1980's, formal use-case and object-oriented analysis and design approaches dominated the 1990's. Then, at the turn of the century, eXtreme Programming was the first of a wave of more informal, self-styled agile approaches to become widely popular. This was closely followed by Scrum and Feature-Driven Development (FDD) and then later by Lean and Kanban.

Despite all this innovation, hard work, and debate over different software development processes, methods, and approaches, none of them has been able to replace the importance of building a great team of good people.

Read more about software development process...

Tools and Infrastructure

Tools and Infrastructure
A dog might be a man's best friend, but a few good tools are a programmer's best friends.
Seve McConnell, Code CompleteL, 2002

What makes for good tooling for modern, software development teams? Most agree it includes tools for performing automated builds and testing, includes version control of source code and related resources, and a modern integrated development environment(IDE) for individual developers such as IntelliJ IDEA, Eclipse, Visual Studio, or Xcode.

However, when it comes to project management, requirements management, and design, general consensus is much harder to find. Most tools in this space present poor user interfaces, suffer from feature-bloat, and provide discipline-specific solutions that do not reflect the cross-functional nature of many modern development teams.

Good software development teams excel at selecting the right tool for the right job at the right time. And sometimes the right tools are sticky notes, index cards, flip chart paper, or white boards. Other times the right tool is a traditional, single-user, PC application, or a collaborative, web-based product.

Read more about software development tools...


About Stephen R. Palmer

Steve
But the fruit of the Spirit is love, joy, peace, patience, kindness,goodness, faithfulness, gentleness and self-control. Against such things there is no law.
Saint Paul of Tarsus

I'm Stephen R. Palmer, a software development consultant at hybris, and www.step-10.com is my personal web site.

The majority of stuff on this site relates to my two main professional interests, that of analysis and design of complex enterprise software systems and related software development methods - in particular Peter Coad's 'modeling in color' technique and Jeff De Luca's Feature-Driven Development (FDD) process. Other topics covered include software development tools I love and loathe, the pragmatic use of UML, and, for something completely different, places I have lived in, worked at, or lived near.

As this is my personal website and developed more as a hobby than anything else, the views expressed here are my own and do not necessarily coincide with those of my current or previous employers. I'll also apologise in advance for the occasional misspelling, poor use of grammar, and broken link - it's all 'fixed in the next release' :-)

Read more about Stephen R. Palmer...

Places

Places
The longer one stays here the more does the spirit of the moor sink into one's soul, its vastness, and also its grim charm.
Arthur Conan Doyle, The Hound of the Baskervilles

Growing up, I lived in a number of towns and villages within the Area of Outstanding Natural Beauty (ANOB) of East Devon in the UK. Since then I have been fortunate to live and work in a number of different and varied places, from the old, industrial towns of Stoke-on-Trent in Staffordshire, UK, to the gleaming skyline of Singapore, in South East Asia, from the snow-capped mountains outside Calgary, Canada, to the old colonial architecture of Providence in Rhode Island, USA.

These days home is back in East Devon, the seaside town of Exmouth to be precise, while work continues to to take me all over the world.

About once a year I type some of the names of these places into yahoo, etc., and see what pops up. If I am not feeling too lazy, I'll combine some of the things I learn with personal observations and memories into a web page or two with a few photos. This stuff is always a 'work in progress' and never as complete or polished as I'd like to make it but I enjoy tinkering with it when I have the time.

Read more about these places...

Follow me on Twitter...