Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Follow these two links to see why I'm going to rant about some of the questions that I have recently had thrown at me

My Bio

Architecture and Design from TDD, yes/no?

Info
titleWhy this page?

I've spent 31 years working in the software industry, I've seen so many approaches and methods and with each one we have frantically ran after each as though it were the silver bullet. There isn't one and don't let anyone fool you into thinking there is!!! But I recently ran some Unit testing and TDD training and was stunned by he questions that were being asked. It lead me to question the direction in which the software industry is heading.

Before I rant like a crazy man let me qualify my journey to where I am today.

  • Mid 80s developing medical systems in assembly on CP/M machines, no real structured approach, but definitely incremental development
  • Mid towards 80s developing medical systems in dBase II+ and Clipper, no real structured approach, but definitely incremental development
  • Late 80s developing medical systems in dBase II+ and C++, a waterfall approach, but definitely incremental development - a forward thinking company
  • Just heading into 90s developing medical systems in C/C++, a formal waterfall approach was being applied and it was not incremental, get it right once and no looking back (not a good experience). It was also during this time that I came across Object Modelling Technique by James Rumbaugh et al, this is the point where my whole approach to software development changed. I realised that you create good software by doing some upfront design. Now I know a few of you out there are thinking "yeah I do that but I just don't write it down." And that's where the problem is, you don't write/capture what's going on in that crazy mind of yours. I suddenly realised that if I could capture what I was thinking in a consistent, agreed and proven way, then the next time I need to come back to the same problem I wouldn't have to spend hours or days trying to figure out what my code was doing and what the heck the problem was that I was trying to solve in the first place (sorry ranting....). Remember - we didn't have the version control systems that we have today and neither did have the test techniques that we apply today.
  • Early 90s developing communications software in C++/VB, used several languages for designing - OMT, Booch, Shlear Mellor, Syntropy
  • Just prior to the mid 90s developing distributed object systems using CORBA in C++ with some Java starting to stream through, OMT the dominant design language, iterative life-cycles became the norm (the fountain approach)
  • Mid 90s, UML and Java beginning to replace OMT and C++ as the dominant design and programming language respectively. So for about 4 years worked primarily on projects suing these Java and UML.
  • Just after mid 90s world goes crazy and we're in the throngs of analysis paralysis. Basically it's a waterfall approach being applied to OO techniques. It ain't working. We have teams of analysts creating mountains of documents that have no correlation to the software being developed. Software developers think analysts are idiots and analysts think software developers should stay in their caves. It was an interesting time to be a software developer and designer.
  • Late 90s the emergence of XP and whole family of other OO styled techniques trying to solve the problem of analysis paralysis. But most of the techniques come into view for a while then we fall right back into that waterfall cycle. I worked as technical architect in the rail and tube industry, architecting and designing many of the systems for London's TFL Oyster Card.
  • Early 2000s, technical architect for a major upgrade of London's TFL Victoria Line. A none OO project but clearly defining the architecture and design of the components upfront was crucial to it's success.
  • 2005 for about two years, an advisor to the UK NATS on the architecture and suitability of technology and architecture for a proposed solution to a very important infrastucture project.
  • Since 2007 I have been an architect, consultant, advisor and software developer (C++, Java and C#) on numerous projects.
  • So what I'm about to write I do so from a reference point of immense experience.
  • Since the early 2000s there has been a steady march of the agile brigade, the philosophy is great, the people behind it are all awesome, they're great OO designers and thinkers and have written many awesome books on OO and UML that I still have on my bookshelf. An important point about the manifesto is that it doesn't say there should be no documentation. It's about striking the right balance.
  • Now whether you doing waterfall or Agile, architecture and design are activities that still need to be done. The question I keep hearing is "if we're adapting an agile approach can we develop the architecture and design of our systems in an agile way?" Well why not? It makes more sense to draft out an architecture, take it the client, seek early approval, make changes as needed and repeat this until you have an agreed architecture. Notice something about the question and answer, when we are talking about the architecture, at what level are we speaking, software architecture, systems architecture, information architecture, or an enterprise architecture? All of these things can developed in an incremental and iterative manner.
  • Since the early 2000s there has been a rise in the desire the build software using TDD. Now TDD is a practice that we can used within your Agile lifecycle. But it is cleary about the development of software, not the design of the infrastructure (software or hardware), the QoS attributes of a system as a whole, the security requirements, the evaluation of technologies required for the entire solution and their costs, it doesn't reveal data transformation issues and I could go on, the list is big. These are architectural and design issues that must be tackled early and refined on an ongoing basis. Once you have your architecture, TDD can be applied at the component level.

Guys you would never build a house or anything of significance without talking to an architect or asking the question - what's the foundation?  Whether it's a brown field or green field environment.

Architecture is birthed out of experience.

An Architecture is a collection of collaborating patterns.

Architecture sets the direction for everything else.

Architecture captures the vision.  It is influenced by time, organization culture, money, skills and environment.

In an IT environment the architecture can evolve incrementally and iteratively but (and it's a BIG BUT), you will always find that there is a core architectural footprint from which everything else gravitates.  In other words there are a core set of functional components that represent the architecture, and even though the architecture evolves those components remain consistently present throughout the evolution of the architecture.  You will see such examples as 3-tier architectures, master-slave architectures, dual-redundancy systems, server farms, clustering etc.  In the same way that software patterns can be categorised as either structural, behavioural, creational etc, as defined by GOF, these same patterns and more exist at an architecture level.  Also, architecture is more than just patterns, it has to consider security, costs, hardware, people, usage, scaleability, maintainability, testability, how do you protect the investment of legacy systems, means of distribution, middleware, vendor selection, development approach and the list goes on...

...

Info
titleWhere to go

My Bio

Architecture and Design from TDD, yes/no?

Let's get a grip