during: 2006

tags

API design · academia · agile · agile adoption · agile history · analysis patterns · application architecture · application integration · bad things · big data · build scripting · certification · clean code · collaboration · conference panels · conferences · continuous integration · data analytics · database · delivery · design · dictionary · distributed computing magazine · diversions · diversity · documentation · domain driven design · domain specific language · domestic · encapsulation · enterprise architecture · estimation · evolutionary design · expositional architectures · extreme programming · gadgets · ieeeSoftware · infodecks · internet culture · interviews · language feature · languageWorkbench · lean · legacy rehab · legal · metrics · microsoft · mobile · model-view-controller · noSQL · object collaboration design · parser generators · photography · podcast · popular · presentations · process theory · productivity · programming platforms · project planning · projects · recruiting · refactoring · refactoring boundary · requirements analysis · retrospective · ruby · scrum · software craftsmanship · talk videos · team environment · team organization · technical debt · technical leadership · testing · thoughtworks · tools · travel · uml · version control · web development · web services · website · writing

2014 · 2013 · 2012 · 2011 · 2010 · 2009 · 2008 · 2007 · 2006 · 2005 · 2004 · 2003 · 2002 · 2001 · 2000 · 1999 · 1998 · 1997 · 1996

All Content

RoleInterface

A role interface is defined by looking at a specific interaction between suppliers and consumers. A supplier component will usually implement several role interfaces, one for each of these patterns of interaction. This contrasts to a HeaderInterface, where the supplier will only have a single interface.

22 December 2006

bliki


BigScreen

An answer I've given regularly for many years now, and one that applies to almost anyone who uses a computer, is give them a bigger screen.

16 December 2006

bliki


Web2.0

In the last few years there's been a lot of discussion about Web 2.0, both about the concept and it's value as a Neologism. My involvement in this is limited, I've read and heard Tim O'Reilly on the topic, and took part in a workshop he organized. There's a lot of confusion out there, however, so I guess it's time for me to make a futile attempt to reduce that confusion. (Since I'm interpreting Tim for much of this, if we disagree on anything you should believe him.)

14 December 2006

bliki


Neologism

Neologism:

1: a new word, usage, or expression.
2: a meaningless word coined by a psychotic.

-- Merriam-Webster

If you read much of my writing you'll quickly notice that I am a compulsive neologiser. I'm always looking to come up with new words and phrases, indeed this bliki is designed around this habit.

2 November 2006

bliki


PairProgrammingMisconceptions

A bunch of common misconceptions about pair-programming.

31 October 2006

bliki


InternalDslStyle

An internal DSL (often called an Embedded DSL) is a DomainSpecificLanguage that is written inside an existing host language. It's a common way of thinking in a number of programming language communities - particularly the Lisp community. It's now gaining a lot of attention as DSLs are a common way of thinking in the rapidly growing Ruby community.

24 October 2006

bliki


ImprovementRavine

If you care about what you do, you care about getting better at it. This involves reflecting about how you do things, and trying out new techniques to see if they make you better. Even if other people recommend new techniques, the only way you know if they work for you is by trying them out yourself and seeing if they improve your performance.

18 October 2006

bliki


AgileImposition

According to the current board of the Agile Alliance, agile methods have "crossed the chasm" , which I think means they are becoming more widespread. While this has its advantages, it also brings problems. As a methodology or design approach becomes fashionable, then we see a lot people using it, or teaching it, who are focusing on the fashion rather than the real details. This can lead to reports of things done in agile's name which are a polar opposite to the principles of movement's founders.

2 October 2006

bliki


VotingMachines

I've said before (in an earlier version of this page) that I cannot understand how a voting machine without a clear, auditable paper trail could be considered acceptable for voting. Some further support for this view is a recent study at Princeton showing how easy it is to subvert common voting machines. (via Glenn Vanderburg)

19 September 2006

bliki


ExtemporarySpeaking

A while ago Jon Udell characterized two modes of public speaking:

Most of my public talks these days use a third mode - extemporary speaking. In this style I begin with little more than a rough outline of my talk, and compose everything else as I go.

18 August 2006

bliki


DslBoundary

When the topic of DomainSpecificLanguage comes up, one of the common puzzles is exactly what is or isn't a DSL. The trouble is that there is no precise definition for a DSL and there is a large gray area between DSLs and other things.

1 August 2006

bliki


GUI Architectures

A historical overview of how GUI archiectures have evolved, with a particular attention to how Model-View-Controller has been seen by different groups over the years. Ties into my presentation patterns from a historical perspective.

18 July 2006


Organizing Presentation Logic

Narrative overview of patterns in user interfaces. Discusses how and why to separate domain logic from the presentation and how layers of data are separated and synchronized.

11 July 2006


Writing The Agile Manifesto

In February 2001 a group of seventeen software pundits got together in Snowbird UT to discuss the growing field of what used to be called lightweight methods. We decide to use the term agile to describe this new breed of agile methods. We also wrote the Manifesto for Agile Software Development , setting out the values and principles of these agile processes. I was one of these self-elected visionaries and have since come across many questions about this group's origins and the subsequent founding of the agile alliance. This is my recollection of those events.

9 July 2006

article


Keynote for RailsConf 2006

As with most of my keynotes, this is an extemporary talk. Given the conference, this one has a theme of how rails impacts software development.

July 2006

video


RubyPloticus

In my recent post on EvaluatingRuby I mentioned that a colleague had put together a web app with some fancy numerical graphs. Someone emailed to ask how he did that. I added my short answer, ploticus, to the original bliki entry, but that led to the question of how he interfaced ruby with ploticus?

19 June 2006

bliki


HotRod

Early this year I did a lot of travel, so my writing ground a complete halt. I got back home a few weeks ago, hoping to get a lot of writing done. Well I've done some, but things keep coming up to keep me away: surgery to remove the pins from the accident, being Flooded. But the big productivity killer has been self inflicted - buying a new computer.

22 May 2006

bliki


Flooded

Those of you with an eye on the news may have noticed that New England has been hit with a major spring storm with a lot of flooding. I live in Melrose, which is right in the middle of the rain, we've had nearly ten inches of rain over the weekend. People are saying there's been nothing like it since a hurricane in 1938, although it's a minor affair compared to what some other places in the world have suffered in the last few years.

15 May 2006

bliki


CodeOwnership

There are various schemes of Code Ownership that I've come across. I put them into three broad categories:

12 May 2006

bliki


Continuous Integration

Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. This article is a quick overview of Continuous Integration summarizing the technique and its current usage.

1 May 2006

article


GetterEradicator

You can tell them by the twitch in the left hand side of the mouth when they see a getter method, there's swift pull on their battleaxe and a satisfied cry as another getter is hewn unmercifully from a class which immediately swoons in an ecstasy of gratefulness at the manly Getter Eradicator's feet.

22 February 2006

bliki


ConstructorInitialization

Constructor initialization is an approach where you pass in all the collaborators that the object needs in the creation method of the object. It is an alternative to SetterInitialization.

7 February 2006

bliki


Focusing on Events

A pattern narrative that looks at how events can be used as the focus for how a system operates and collaborates with peers. Summarizes how you represent events, how to use events to integrate between systems and using event sourcing in the architecture of a system.

25 January 2006


TestDouble

Gerard Meszaros is working on a book to capture patterns for using the various Xunit frameworks. One of the awkward things he's run into is the various names for stubs, mocks, fakes, dummies, and other things that people use to stub out parts of a system for testing. To deal with this he's come up with his own vocabulary which I think is worth spreading further.

17 January 2006

bliki


ObservableState

It's very useful to separate methods into those that change state and those that don't. Non-state changing methods (which I call queries), can be used in any context without worrying about how they sequence with other methods.

5 January 2006

bliki

JRake

Now that JRuby is getting more and more mature, several people are thinking of finally doing something to improve the world of build scripts by replacing ant with rake.

18 December 2006

bliki


SemanticDiffusion

I have the habit of creating Neologisms to describe the things I see in software development. It's a common habit amongst writers in this field, for software development still lacks much useful jargon. One of the problems with building a jargon is that terms are vulnerable to losing their meaning, in a process of semantic diffusion - to use yet another potential addition to our jargon.

14 December 2006

bliki


FeatureDevotion

A common, perhaps dominant, practice of agile methods is to develop a list of features (often called stories) for the software that's being built. These features are tracked with index cards, work queues, burndown charts, backlogs, or whatever your tool of choice is.

2 November 2006

bliki


UbiquitousLanguage

Ubiquitous Language is the term Eric Evans uses in Domain Driven Design for the practice of building up a common, rigorous language between developers and users. This language should be based on the Domain Model used in the software - hence the need for it to be rigorous, since software doesn't cope well with ambiguity.

31 October 2006

bliki


RubyAnnotations

One of Ruby's most popular features is its support for metaprogramming, that is features that act like they change the language itself - introducing things like new keywords.

26 October 2006

bliki


ObjectMother

An object mother is a kind of class used in testing to help create example objects that you use for testing.

24 October 2006

bliki


DesignedInheritance

One of the longest running arguments on object-oriented circles is the debate between OpenInheritance and Designed Inheritance. The principle of Designed Inheritance is probably best summed up by Josh Bloch: "Design and document for inheritance or else prohibit it". With this approach you take care to decide which methods can be inherited and Seal the others to stop them being overridden.

6 October 2006

bliki


ShuHaRi

Shu-Ha-Ri is a way of thinking about how you learn a technique. The name comes from Aikido, and Alistair Cockburn introduced it as a way of thinking about learning techniques and methodologies for software development.

30 September 2006

bliki


PervasiveVersioning

Recently Apple announced the Time Machine, which is the ability to go back in time and see all the alterations to your files, including finding deleted files. For some of us intense geeks, this is not a new feature. Like others, I put my entire working directory under version control, originally CVS now Subversion, and have thus had the ability to easily look at all the changes to everything I work on. It's such a useful feature that I've wondered before about what it would be like to have MoreVersionControl, and perhaps Time Machine is a step in that direction.

21 August 2006

bliki


Writing Software Patterns

I've spent a lot of my writing energy writing patterns. From time to time I get asked questions about why I do that and what makes a good pattern. This is a brief article about how I look at patterns with my suggestions for people who are interested in writing patterns themselves.

1 August 2006

article


CustomerAffinity

When someone is looking at what makes up a top-class enterprise software developer, often the conversation may turn to knowledge of frameworks and languages, or perhaps the ability to understand complicated algorithms and data structures. For me, one of the most important traits in a programmer, or indeed in a development team, is something that I'll call Customer Affinity. This is the interest and closeness that the developers have in the business problem that the software is addressing, and in the people who live in that business world.

28 July 2006

bliki


Using an Agile Software Process with Offshore Development

For the last four years ThoughtWorks has operated a lab in Bangalore India to support our software development projects in North America and Europe. Traditional approaches to offshore development are based on plan-driven methodologies, but we are very firmly in the agile camp. Here I discuss our experiences and lessons learned in doing offshore agile development. So far we've discovered that we can make it work, although the benefits are still open to debate. (Although this article was last updated in 2006, I our visited our offshore work in 2011 and found the lessons to still be relevant and thus the article did not need a further significant revision.)

18 July 2006

article


EnterpriseRails

In the newly formed Rails community, the word 'enterprise' is becoming a dirty word. For many people the Rails framework, with its aggressive simplicity, is the antithesis of over-complex 'enterprisey' frameworks.

11 July 2006

bliki


Buildix

I've talked many times about the virtues of Continuous Integration. To get such an environment working you need a continuous integration server, and a source code control system. To make a project run smoothly you could also do with an issue tracker for bug tracking and the like, and a wiki to help capture all sorts of project knowledge.

7 July 2006

bliki


WikipediaDeath

A recent blogosphere controversy was caused by Nicholas Carr's entry claiming the "death of wikipedia" (yes I know my response is slow, but I didn't have the time to write while on the road). His initial post struck me as rather odd, saying that wikipedia was dying because 0.01% of articles had a rather mild protection. It's like saying democracy is over when a town hires a policeman.

19 June 2006

bliki


Consumer-Driven Contracts: A Service Evolution Pattern

by Ian Robinson

This article discusses some of the challenges in evolving a community of service providers and consumers. It describes some of the coupling issues that arise when service providers change parts of their contract, particularly document schemas, and identifies two well-understood strategies - adding schema extension points and performing "just enough" validation of received messages - for mitigating such issues. Both strategies help protect consumers from changes to a provider contract, but neither of them gives the provider any insight into the ways it is being used and the obligations it must maintain as it evolves. Drawing on the assertion-based language of one of these mitigation strategies - the "just enough" validation strategy - the article then describes the "Consumer-Driven Contract" pattern, which imbues providers with insight into their consumer obligations, and focuses service evolution around the delivery of the key business functionality demanded by consumers.

12 June 2006

article


Squeezebox

One of our favorite toys over the last couple of years has been the Squeezebox. It's a very simple device - about the size of a router, with ports for power, Ethernet, amplifier, and aerials for wireless LAN. Its job is to take mp3 files streamed from a server and play them through the amplifier.

21 May 2006

bliki


ShiftingToCodeOwnership

In my recent CodeOwnership post, I described the way in which I think about code ownership issues. Many of my software development friends are extreme programmers, and tend to favor collective code ownership. However these kind of practices aren't absolute and should always be tempered by local considerations. One of my colleagues sent me a note with the following story which I thought was a good indication of when you have to vary your practices, even if you are a strong fan of XP. (As he's talking about his team, he prefers to be anonymous.)

15 May 2006

bliki


EvaluatingRuby

If you're reading this I assume you're aware of the fact that there's been a huge amount of fuss about the Ruby programming language, and in particular the Rails framework for developing web applications. Some see it as the future of programming, others as a dangerous diversion.

10 May 2006

bliki


ThoughtWorksUK

For the last month or so I've been hanging out in our UK office, catching up with various UK ThoughtWorkers. I was intending to visit some of our client projects, but just catching up with people in and around the office has kept me pretty busy (it's also wiped out any book writing progress, but that can wait till I get back home.)

27 February 2006

bliki


CodeSmell

A code smell is a surface indication that usually corresponds to a deeper problem in the system. The term was first coined by Kent Beck while helping me with my Refactoring book.

9 February 2006

bliki


PedestalPhobia

One of the side-effects of my success as a writer is that I've become a minor geek celebrity. It is very minor, usually only taking effect in geek conferences (although I have had people wander up to me in a restaurent a couple of times in San Francisco.) Before it happened I really didn't think much about it, other than a mild hankering after fame. Now it's happened I'm more aware of it - and all in all I hate it.

7 February 2006

bliki


Patterns for Accounting

Narrative of patterns useful for accounting. Contains basic representations of accounts, entries and transactions, together with an overview of patterns for making accounting adjustments.

24 January 2006


TestInvariant

There's been a long-running, if low-key, argument between the advocates of Design by Contract (DbC) and Test Driven Development (TDD). I'm not going to delve into that right now, but I will pass on an idea to merge the two that came up when I was talking with Daniel Jackson.

5 January 2006

bliki


ImplicitInterfaceImplementation

Both Java and C# share the same model of pure interface types. You declare a pure interface by going interface Mailable, then you can declare you implement it with class Customer implements Mailable (in Java). A class may implement any number of pure interfaces. One of the things this model ignores is that you have implicit interfaces whenever you have a class.

4 January 2006

bliki