"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

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

"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

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

"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

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

"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

"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

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

"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

"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

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...

Follow me on Twitter...