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.
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.
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.
Saint Paul of Tarsus
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
in color' technique and Jeff De
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' :-)