On this page.... RSS 2.0 | Atom 1.0 | CDF
# Sunday, 09 December 2007

As I read1 the works of Christopher Alexander, I grew increasingly concerned that the software industry may be missing the point of patterns.  Well, maybe that's not the right way to put it.  I think we may be missing the real value that patterns bring to the table.

For whatever reason, it seems we approach them (broadly speaking) almost as loose algorithms to be applied here and there as it seems fit.  Or maybe we just see them as convenient ways to talk about things we already know, or maybe we even use them to learn particular solutions to particular problems.  And then maybe we just use them because it is en vogue. 

It seems to me that the real value to derive from patterns (as an idea, not necessarily as they are often proposed in the software world) is in learning to see and think about creating software in the best way.  What Alexander proposes at the end of The Timeless Way is that it isn't using patterns or pattern languages, per se, that give our creations the quality without a name.  No, he proposes that the value lies in helping us to recognize the quality and teaching us to build in the timeless way.

The timeless way is more than patterns.  The thing is, patterns help us to get there.  I think in some ways, we do get it.  Those who are really into patterns do seem to recognize that patterns are not the solution to everything.  The problem is, I think, in that we are not using patterns in the most profitable way. 

I think part of the problem is in not using patterns as a language.  We have numerous catalogues of patterns.  To be sure, we do not lack for patterns, and sure, there is obviously value just in having these catalogues and in using the patterns here and there.  But I think that as long as we see patterns as individual things in a pattern catalogue, we won't use them to their full effectiveness.

Perhaps what we need to do is to figure out how to use them as a language.  Perhaps we need to weave them into our thoughts so that when we approach the problem of building software, patterns are there, guiding our thinking, helping us to best arrange a solution to fit the problem.  When we use our natural language, it does the same thing.  Our thoughts are constrained by our languages, but at the same time, our thoughts are guided by our languages.  The ideas form in our heads and rapidly coalesce into some structure that is based upon our language, and the structure works because of the language--it tells us what works and what doesn't work to articulate our ideas.

I think that a pattern language would have the same power.  If we get the patterns into our heads, then when we're faced with articulating a solution to a problem, we will think in terms of the patterns.  The patterns will give form to our solution, and because they are patterns, the solution will work.  The pattern language will both guide and shape our thinking towards things solutions that have the quality without a name.

But then, as Alexander says of "the kernel," once we master the language, we move beyond it, so to speak.  The language is not an end in itself but a means to an end, a means to learn the timeless way.  It shapes our thinking to the extent that we are able to perceive the way even without a pattern.  And this is the superlative value in patterns that I think we're missing. 

Patterns, in themselves, have value, but as many have noted, they can be abused and misapplied.  The reason for this is not that a pattern (or patterns in general) are bad but that we're using them as an end in themselves.  If we simply let patterns shape the way we think about designing software, if we let them become a language, then we will learn to use them in ways that make sense and ultimately go beyond them and build great software even where a pattern doesn't exist.

So how do we do this?  Well, I think to some extent, we already do it.  I think there are people who use the language, who know the way, without necessarily being conscious of it.  And I think that there is a lot of great guidance out there that in a roundabout way does lead to building great software, even though it may not be conscious it is using patterns as a language.  But I do tend to think that there is far more bad or failed software out there that has come about because the language is not known, it is not explicit.

I think that what we need to do is to continue identifying patterns as best we can, but we need to start thinking about how to more firmly incorporate them into how we create software.  In fact, I think doing this, attempting to incorporate patterns more into development, will drive the further identification of patterns, to fill out patterns where we are lacking.  I also think it will help us to realize how patterns relate to each other, which is a big part of using them as a language and not just a bunch of monads floating about in the ether.  As we see them relating, see how they work together to form complete solutions, we'll better understand the language as well as the value of the language, and ultimately, we'll be able to impart that language to enable more of us to speak it.

This calls for those who build great software, who theoretically already know the way, to be introspective and retrospective.  It's not just a matter of looking about in the software world for repeated, similar solutions.  It's about identifying good solutions, solutions that bring software to life, not just addressing functional requirements, and forming from those solutions a language of patterns for building such software.  What do you think?

Notes
1. See Notes on the Notes of the Synthesis of Form and The Timeless Way is Agile.

Sunday, 09 December 2007 14:46:34 (Eastern Standard Time, UTC-05:00)  #    Disclaimer  |  Comments [2]  | 
# Saturday, 08 December 2007

In my last post, a co-worker of mine commented on my saying "they may as well be Protestants."  It didn't occur to me at the time how this might be interpreted by, of course, Protestants.  The point, in that context, was directed at those who think themselves to be "true Catholics" (those traditionalists who, above all, would not want to be identified as Protestants) but who end up being, by their protestations of the last ecumenical council, the Second Vatican Council, end up becoming Protestants themselves. 

You see (I've thought about this a fair bit, being a convert from Protestantism), I think the thing that truly separates a Protestant from a Catholic is a basic mindset, the mindset that sets itself up as the final arbiter and authority on truth.  In other words, it is a manifestation of the original sin of pride based on the original temptation for us to "be like God who knows what is good and what is bad," (Gen 3:5) that is, what is true and false.  Such a mindset, even if well-intentioned, is at the heart of all Protestation of God's authority, from Lucifer to Eve to Adam to us.  Of course, it is for God alone to judge our hearts, to impute, and to forgive our guilt, and he is a just and merciful judge.1

This post is a kind of expansion on how this mindset relates to being a part of the Church.  I have no delusions that these musings will "convert" anyone.  Just take them as my own personal reflections for what they're worth.  They revolve around my meditations on one of the mysteries of the rosary.  It's written to Christians, so I am writing from those presuppositions.

Introit

The Crowning with Thorns

    Weaving a crown out of thorns, they placed it on his head, and a reed in his right hand. And
     kneeling before him, they mocked him, saying, 'Hail, King of the Jews!'  -- Matthew 27:29

The third sorrowful mystery is the crowning with thorns.  Lately while meditating on this mystery, I keep having the idea of the Church (the invisible, spiritual body of all Christians) in my mind.  The Church is a wonderful thing; it is sometimes called the body, sometimes the bride, of Christ.  It is a thing that honors and proclaims the majesty and dominion of Christ, the King of the universe.  In that way, it is a crown, which is a symbol, a proclamation of regal authority and power.

But I think it is a fractured crown, broken into many pieces, divided asunder by the arrogance and pride of many.  There is the Great Schism that has divided the eastern church from the west, and of course there is Protestantism and its many divisions.  But even before that, since the beginning (as attested to by the letters of St. Paul), there have been those who sow discord and cause division--even those who think they are doing the right thing and truly think they are following God's will.

So I see this fractured crown that we call the Church, a thing that despite itself is indeed a herald of Jesus' Kingship.  I see Jesus the King, bloodied, beaten, and scourged, being crowned, but instead of the crown being the thing of beauty and awe that it should be, it is this broken thing, disjointed, full of jagged edges and being driven down onto the head of the King of the universe, the splinters biting deep into His skin, tearing it, and scratching against His skull. 

Rather than being an occasion for joy, the crowning is an occasion for sorrow because what should be whole, smooth, unified, and undivided, is instead shattered, jagged, split, and divided.  This is the image of the Church today--the crown of thorns.  It is still a messenger of Jesus' kingship, but it is not the thing of beauty and awe it should be.

Jesus prayed four times to the Father (in St. John's Gospel, chapter 17) that we (the Church, Christians) would be one.  But through our arrogance and pride, we have utterly failed in this, from the earliest of times.  It seems clear, based on just this prayer alone, that unity in the Church is of supreme importance to God, and it is a perfect unity--the same unity that exists between the Father and the Son--that God desires for us. 

Jesus said "that they may be one as we are one" and prayed that we "may be brought to perfection as one," so we see that it is not a superficial unity or a unity only in "essentials" (a common term by ecumenists who try to glaze over real and important differences).  There is NO division in God, and this is what God wants for the Church.

Similarly, when Jesus founded the Church upon St. Peter, he promised that the gates of hell would not prevail against it.  Here, a few interesting things stick out to me.  First, Jesus specifically grounds the Church he is founding as something on earth.  He gives the keys of heaven to Peter, saying that what he binds and looses on earth will be bound and loosed in heaven.  It seems to me this is a foundation of a visible (earthly) Church that Peter would lead with real binding power both here on earth and in heaven.

The Church is indeed the mystical body of Christ, but it is also an earthly body.  Like us, you could say, it has a body and a soul, but the two are fundamentally one thing.  When Jesus founded the Church, he established an earthly (bodily) existence with Peter at its governor, giving him the power to bind and loose, as well as a heavenly (spiritual) existence, also governed by Peter.

Jesus, at this institution of our mutually earthy and heavenly Church, promised that the gates of hell would not prevail against it.  In other words, the powers of hell, the domain of Satan and the fallen angels, are going to try to prevail, but they won't.  The Church will be under assault, but it will remain forever, and being a unity of body and soul (earthly and heavenly, visible and invisible), this means that the Church will stand firm on both earth and heaven under the delegated governance of Peter and that the visible Church (as well as the invisible) is inextricably and directly linked with the headship of Peter.

Since St. Peter was not to live here on earth for eternity, yet we see from the Word of God that the Church remains forever on earth and in heaven under Peter, it follows that God intended for this headship, on earth, to pass to St. Peter's successors, whom we know as bishops of Rome, popes.  Thus the visible, earthly body of the Church is that Church which is under the headship of Peter and his successors, what we know today as the Roman Catholic Church.

Now we return to the prayer of Jesus.  If it is God's will (as it is clearly revealed in St. John's Gospel) that we believers be perfectly unified (absolutely no division in body or soul), and it is God's will (as seen in St. Matthew's Gospel) that there be a perpetual Church under Peter on both heaven and earth, it follows that this perfect unity is to come about in that Church and no other.  It follows that we are to place ourselves under that headship, subordinating our personal druthers, opinions, and reasoning to the leadership that Christ established and endeavor to eliminate anything in us that damages that perfect unity that Christ so strongly desires. 

Doing this is not only an act of obedience to the King of the universe, it is an act of love.  Seeing how strongly Jesus desires that we be truly one, we should desire, if we truly love God, to fulfill his desire.  Just as a lover infatuated with his love has no other desire but to please his beloved, so we  should desire to please God.  We should be that perfect, shining, unified crown upon the head of Christ the King.

We should also, therefore, be ashamed, truly sorry, and saddened, however, that we are instead a crown of thorns.  As long as we selfishly and proudly put our own opinions, desires, and reasonings ahead of our love for Christ, our fulfillment of his desire that we be one, we will remain this crown of thorns.  It is for this reason, in part, that I have joined myself to the Church of Christ under Peter's headship.  It is not blind faith; it is wide-eyed, ferocious love for Christ that compels me to do so.  Protesting against this Church, creating division upon division against it, is not only injurious to those souls who are driven from Christ by our divisions, it is an injury to God himself.  How long will we remain this crown of thorns?

--
Given on the Feast of the Immaculate Conception in the Year of Our Lord 2007

Notes
1. Update: In other words, I'm sure there are plenty, probably most, who do not even recognize or intend this, but it seems to me that it is at the heart of the protestant approach to the faith, even if wholly unconscious.  I tend to think that God will have mercy on those who are not aware of it (inculpably ignorant), and in any case, I don't make such judgments on individuals myself! (cf. St. Matthew's Gospel 7:1ff.) 

Saturday, 08 December 2007 01:05:19 (Eastern Standard Time, UTC-05:00)  #    Disclaimer  |  Comments [2]  | 
# Thursday, 06 December 2007

This is an open appeal to anyone interested in having the traditional Latin mass in the Princeton, NJ area.  The traditional Latin mass (TLM) is also known as the mass of Blessed John XXIII, the (now) extraordinary form of the Latin Rite, the Missale Romanum of 1962, Tridentine mass, and more.  With the publication of Summorum Pontificum (I know; I'm a bit late), I'd like to get in touch with anyone in the area who feels attached or maybe just is interested, priest, lay, religious, old, young, student, professional, whatever.  My hope is that there will be enough interest in the area to organize time at least once a week where the extraordinary form could be celebrated.

When I was living in Tulsa, OK, I had the blessing of an FSSP parish.  In fact, the pastor was Fr. George Gabet, who went on to become the North American District Superior of the FSSP.  Although my family decided to return to Holy Family Cathedral while we were still in Tulsa, I've never lost my appreciation for the TLM.  It can have a certain beauty and mystery that seems to not be as common in the ordinary form in the vernacular.  Especially the high mass with the chant, the asperges, the incense, the vestments, the silence, the celebration ad orientem, and (to a small degree) the Latin itself have a quality that is transcendent and mysterious that you just don't get normally.

Traditional Latin Mass
[Courtesy of OKC Latin Mass Community]

Now, unfortunately, there are those who use the extraordinary form as an opportunity to promote dissension and disunity, some to the point that they may as well be Protestants (in the plain sense).  Despite my appreciation for the older form of the mass, I am not one of those nor do I wish to encourage that by petitioning for the Latin mass in my area.  I am one of those "young persons too [who] have discovered this liturgical form, felt its attraction and found in it a form of encounter with the Mystery of the Most Holy Eucharist particularly suited to them."  I, with the Holy Father Benedict, hope that "the two Forms of the usage of the Roman Rite can be mutually enriching."1

If you're interested or know of one in the area, please drop me a line; you can use the contact feature on the right or comment on this entry.  Pax vobiscum!

Notes
1. Both quotes from H.H. Benedict XVI's letter to bishops with Summorum Pontificum.

Thursday, 06 December 2007 23:48:43 (Eastern Standard Time, UTC-05:00)  #    Disclaimer  |  Comments [0]  | 
# Wednesday, 05 December 2007

I'm so pumped!  I just got my SQL Toolbelt mug from Red Gate.  I proudly display it on my desk (below) and in meetings. :)

You may look at my Red Gate mug.  You may not borrow it.

The mug reads (this is awesome):  "You may look at my Red Gate mug.  You may not borrow it."  Like the mug, Red Gate's software is awesome, too.  I've used SQL Compare and SQL Data Compare for a long time, and I love the (relatively new) SQL Prompt.  They have a ton of other tools in their toolbelt targeted more at DBA types than devs/architects like me.  I highly recommend them if you do much SQL development or administration!

Wednesday, 05 December 2007 10:49:34 (Eastern Standard Time, UTC-05:00)  #    Disclaimer  |  Comments [2]  | 
# Tuesday, 13 November 2007

[Sorry 'bout the title; I couldn't help it. :)] 

The weekend of 3 November was an important weekend for me.  Apart from getting some great, seasonal family (pictured below) photos with Hussey Photography, on Saturday, the feast of St. Martin de Porres (a Dominican brother), I was received into the Dominican Order as a lay Dominican. 

Clan Little Goofing Around
[This is what we normally look like. :)]

Believe it or not, I've been trying to write this post for over a week now, agonizing over the right way to write or even if I should write it at all.  I want to avoid repeating what is written elsewhere1 about Dominicans, and particularly lay Dominicans, even though I feel like explaining just about every other term I use because it's pretty unfamiliar to us everyday folk (and because I just like explaining things).

You see, I want to explain (told ya!) why I joined the Dominican Order, but it's kind of hard to do without using religious or Catholic jargon, but then when I start explaining the jargon, I find myself reiterating what one can find by looking into these other online resources.  When it comes down to it, I did it because I think it is what I am supposed to do; I believe it is what God wants me to do.  We call it a vocation (a calling).  It's not a club or cult or simple study group.  It is a way to a more perfect life, the life of perfection and holiness to which we are all called and for which we have all been created.  It's a peculiar way of living towards that end.

It's peculiar in the Dominican love of truth and the expression of that through study, contemplation, and sharing that with others (preaching), and that's why the Dominican Order is actually called the Ordo Praedicatorum (Order of Preachers).  "Preaching" is meant in the broader sense of proclaiming, not just from a pulpit.  Perhaps what Dominicans do was best put by St. Thomas Aquinas, an early Dominican: contemplare et contemplata aliis tradere, which means to contemplate and to pass on to others what is contemplated.

I don't know why; it's certainly no doing of my own, but I have a love of truth.  I think it's been with me my whole life, but it became more pronounced in college, and it is what led me to become Catholic.  I have an inkling that its something God instilled in me, and that's partly why I feel called to the Order of Preachers, even if only as a layman (since my first vocation is to marriage and fatherhood).

Local Friars Praying for Departed Dominicans at Dominican Cemetary on Dominican All Souls Day, Nov. 8th, 2007
[Local Friars Praying for Departed Dominicans at Dominican Cemetery in D.C. on Dominican All Souls Day, Nov. 8th, 2007]

For some time now, I've considered becoming Dominican.  I first thought about it back when I lived in Tulsa, OK, not long after I became Catholic.  But at the time, it took a long time to find a local chapter (community), and when I found one, it was about hours away.  So not only would it have been troublesome, but it just didn't seem like the thing to do at the time, so I let it go.

Four Brothers Making Final/Solemn Profession on 10 Nov. 2007
[Four Brothers Making Final/Solemn Profession on 10 Nov. 20072]

I didn't really think much about it for a long while after that, until Mrs. dotNetTemplar got me a small book last Christmas called How to Be a Monastic and Not Leave Your Day Job.  That book, though intended to invite folks toward becoming Benedictine Oblates, renewed my latent interest in the Dominican Order, so I went online, found 3op.org, read up on it again, and it just seemed like it was the right time to pursue it further, so I got in touch and started attending the St. Catherine of Siena (a 14th century lay Dominican--yeah, the Dominican Order was established 800 years ago!) chapter in Philly, which meets once a month for prayer, mass, study, and sometimes, apostolate (thus bringing together the four pillars of Dominican life).

That made me what they call an "aspirant," which is basically someone who's checking it out, and it's a time for the Dominicans to get to know you, too.  At some point along the line, I became a postulant, which basically means you're intending to join but you are still in the getting-to-know-you phase.  At the end of the postulancy, if everything checks out on both sides, you can be received, and that's what happened to me on the 3rd.  I got the habit (which, for us lay folk, is the Dominican scapular), received the Rule, and professed my intention to live like a lay Dominican.3

Now I'm a novice, a n00b. :)  I'm officially Dominican, even if only a novice, but apart from not being able to vote or hold office, I'm fully a lay Dominican.  After a year, I make temporary profession, which is a three-year promise to live as a lay Dominican, and after that, I make a perpetual profession, which is a lifelong promise to do the same.  Of course, the point of the graduated promises is to make sure that it's the right thing for me (we call it discernment), so at any point up to the perpetual profession, there's still an easy exit route.  It is a real commitment, not as binding as marriage or religious vows, but a serious commitment, so that's why there's the period of discernment.

Anyhoo, I'm pretty pumped.  Being received actually had more of an effect on me than I anticipated; I expected to feel pretty much the same as before, but I don't.  I really feel a part of the Order, and I feel a renewed interest and strength to pursue the vocation.  It's just the beginning, but I feel really good about it.  I'm looking forward to continuing and doing more praying, studying, and sharing the fruits of all that.

Pax vobiscum!  [Peace be with you all!]

Notes
1. For instance, the official site of the Dominican Order, the vocations Web site here in my province, and that of the lay Dominicans in the eastern US, which I think is one of the best resources for learning about lay Dominicans.  Oh, by "lay" we just mean not ordained or consecrated, which basically means not a deacon, priest, bishop, or what most of us think of as monks and nuns (it's a bit more involved than that, though).
2. It should be noted that the brothers here and above are consecrated, not lay, brothers.
3. This basically means according to rules #8-10 of our Rule.

Tuesday, 13 November 2007 00:45:44 (Eastern Standard Time, UTC-05:00)  #    Disclaimer  |  Comments [1]  | 
# Monday, 01 October 2007

Previously, I mentioned I was working on an example of using Visual Studio to create a concrete domain model using object thinking, and here it is.  The domain I ended up modeling was that of a shared event calendar, including event registration and agenda planning.  This is something that's been kind of rolling in and out of my mind for quite a while now because it seems that we need a good system for this for all the code camps and like events that occur.  Of course, lately I've come across a few solutions that are already built1, but it seemed like a domain I knew enough about that I could take a whack at modeling it on my own.  I also figured it was small enough in scope for a sample.

So without further ado, I present you with the domain model:
Click to See Full Event Calendar Domain Model

I put this together in about an hour, maybe an hour and a half, on the train up to SD Best Practices.  When I started out modeling it, I was actually thinking more generally in the context of a calendar (like in Outlook), but I transformed the idea more towards the event planning calendar domain.  So you see some blending of an attendee being invited to a meeting with the event planning objects & behaviors (agenda, speaker, etc.).  Interestingly, they seem to meld okay, though it probably needs a bit of refactoring to, e.g., have an Attendee Register(Person) method on the Event object.

So the interesting thing to see here, contrasting it to the typical model you see in the .NET world (if you're lucky enough to see one at all!), is that there is pretty much no data, no simple properties or attributes, in the model.  The model is entirely objects and their behaviors and relationships to other objects.  You can look at this model and get a pretty darn good feel for the domain and also how the system functions as a whole to serve this domain.  I was able to identify and model the objects without once thinking about (and getting distracted with) particular data attributes.2

In the story of our Tangerine project, I describe in some depth the compromise I had to make with the .NET framework when it comes to data properties.  I think if I were to continue with this event calendar project, after I had nailed down the objects based on their behaviors (as begun in this example) and felt pretty good that it was spot on, at that point, I'd think about the data and do something like I did on Tangerine, having the open-ended property bag but also adding strongly-typed properties as needed to support framework tooling.3 

I hope you can imagine how you could sit with your clients or whoever your domain experts are and quickly map out a lightweight model of the domain using the VS Class Designer DSL.  I'll wager that if we took this diagram and showed it to a non-technical person, with a little help (maybe adding a key/legend), they'd quickly understand what's going on with the system.  And if you're building it with the domain expert, you'll have that dialog done already so that everyone will be on the same page.

Sure, there will be further refinement of both the domain model and the code; the nice thing about using the class designer DSL is that tweaking the model tweaks the code, so the two stay in sync.  We already mentioned the need to focus on the data at some point, and depending on your situation, you can do this with the domain experts or maybe you'll have an existing data model to work with.  As the developer, you're going to want to get in there and tweak the classes and methods to use best coding and framework practices, things that aren't best expressed in such a model.  You will have other concerns in the system to think about like security, performance, logging, user interface, etc., but that's all stuff you need to do regardless of how you approach analyzing and modeling your domain. 

In the end, you will have a fairly refined model of the domain (or part of the domain) that is using a language that everyone gets and agrees on (Eric Evan's "ubiquitous language"); you'll have identified the objects in the domain accurately based on their behaviors and relationships, and you'll even have a starting point in code for the implementation.  You also have objects that are responsible and that collaborate to get the job done, so in that way you avoid code complexity by reducing imperative control constructs.  All in all, it seems like a great foundation upon which to build the software.

Notes
1. Such as Microsoft Group Events, Community Megaphone, and Eventbrite.
2. Okay, so maybe I was tempted once or twice, but I fought the urge. :)
3. I suppose another option would be to create LINQ-based DTOs; I have to think more about how best to meld this kind of domain modeling with LINQ.

Monday, 01 October 2007 16:59:37 (Eastern Daylight Time, UTC-04:00)  #    Disclaimer  |  Comments [1]  | 
# Saturday, 29 September 2007

I finally got around to finishing The Timeless Way of Building, by Christopher Alexander (most well known in software for being the source of the patterns movement).  The last part of the book is called "The Way" to build things.  His focus is physical architecture, but it is interesting how closely it resembles agile software development.

There are a few similarities that I see.  First, he advocates (or at least shows in his example) working directly with the folks who are going to be using the building(s) when designing it with the pattern language.  You design it together with them.  Similarly, agile seems to advocate the same process of working as closely as possible with those who will be using the system.1

But Alexander goes on to say, using this real-world example of a health care complex he helped to build, that it almost failed (in terms of having the quality without a name) because even though it was initially designed using the pattern language, it was in the end passed off to builders who conformed the design to "drawings" (think UML) that ultimately caused it to lose a large amount of the quality

The point he goes on to make is that you can't just use the language up front and then go translate it into formal design techniques and end up with the quality.  Rather, you have to build using the language, and in particular, build each part of the structure piecemeal, to best fit its particular environment, forces, context, and needs.  This is the only way that you can get the quality.  Here I see another similarity with agile and its focus on iterations and regular feedback.  You build in pieces, adapting each piece to its whole as it is built and ensuring that it best fits the needs, context, forces,  and environment. 

He also says that invariably our initial ideas and designs for a solution don't exactly reflect the ways in which the solution will be used.  And this disparity between our design and reality gets worse as the solution grows in scope.  Again, this is true in software and why the regular feedback is important, but Alexander proposes repair as a creative process in which we better adapt the solution to its environment based on deepening understanding of needs or when the design just isn't working or breaks.  This is akin to what we call refactoring, and like we do in software, Alexander advocates a continual process of repair (refactoring).  And this process doesn't stop when the initial thing is built--we keep tweaking it ad infinitum.

This seems somewhat intuitive, yet in software we're always talking about legacy systems and many have and continue to suggest "rewrites" as the answer to software woes.  While I understand that this is one area where software differs from real-world building (in the relative ease that something can be redone), I do think that we software folks tend to err too much on the side of rewriting, thinking that if only we can start from scratch, our new system will be this glorious, shining zenith of elegance that will last forever. 

It is this thinking, too, that even causes many of these rewrites to fail because so much time is spent trying to design a system that will last forever that the system is never completed (or becomes so complex that no one can maintain it), providing the next impetus for another "rewrite of the legacy system."  On the contrary, some of the best software I've seen is that which has simply been continuously maintained and improved, piece by piece, rather than trying to design (or redesign) an entire system at once. 

What is interesting to me in all this is the similarities between the process of building physical structures and that of building software, the general applicability of Alexander's thought to the creation of software.  I continually see this in Alexander's writing.  In part, it is good to see a confirmation of what we've been realizing in the software industry--that waterfall just doesn't work, that pre-built, reusable modules don't really work well, that we need regular, repeated input from stakeholders and users, that we shouldn't try to design it all up front, that we shouldn't use formal notations and categories that create solutions that fit the notations and categories better than their contexts, environments, and needs, that we should create and use pattern languages that are intelligible by ordinary people, and more.

There is one last observation I'd make about The Timeless Way of Building, regarding the "kernel of the way."  Alexander says that when it comes down to it, the core (the kernel) of the timeless way of building is not in the pattern language itself (the language is there to facilitate learning the timeless way); he says the core is in building in a way that is "egoless." 

In some ways, I think the concern about ego is less pronounced in the software world--rarely is a piece of software admired as a piece of art--but at the same time, the underlying message is that you build something to fit just so--not imposing your own preconceptions on how the thing should be built.  For software developers, I think the challenge is more in learning to see the world for what it is, to really understand the problem domain, to look at it through the eyes of the users and design a solution to fit that rather than trying to foist the software worldview onto the users.  To put it another way, we need to build software from the outside in, not the inside out.  The timeless way is really about truly seeing and then building to fit what you see.

Notes
1. At this point, another interesting thought occurs to me about pattern languages; I see a relation to Eric Evan's "ubiquitous language" in that the language you use needs to be shared between the builders and those using the thing being built.  What stands out to me is the idea of building a pattern language that is intelligible enough by non-software experts to be incorporated into the ubiquitous language shared by both the domain experts and the software experts.  Software patterns vary on this point; some are intelligible and some are not so intelligible; we need to make them intelligible.

Saturday, 29 September 2007 21:31:12 (Eastern Daylight Time, UTC-04:00)  #    Disclaimer  |  Comments [0]  | 
# Friday, 21 September 2007

As I sit here on the train home, I've been thinking (and writing) about a lot of stuff.  But I figured I should put this post together for completeness and finality, even though I only made it to one session today before I left  early.  Last night I was shocked and somewhat dismayed to find that I had somehow managed to book the train for return on Saturday afternoon rather than today.  I looked at my reservation email, thinking surely the ticket was misprinted, but nope, the reservation says the 22nd clearly in black and white.

Now, those who spend much time with me know that I tend to be sort of the absent-minded professor type.  I often have trouble keeping track of the details of day-to-day things (but I can tie my shoes!).  I like to think good reasons for this, but whatever the reasons, that's me.  So I can totally imagine that somehow I tricked my brain into thinking that the 22nd was the day I wanted to return when I booked the train.

That said, I think this is a good opportunity to observe a way in which the UX of the reservations system could be improved.  If it had simply said somewhere that the return trip was on SATURDAY and not just used these obscure things called numeric dates, I'd immediately have seen and avoided my mistake.  But nowhere online nor in the email nor on the ticket does it say Saturday.  In fact, there is SO MUCH GARBAGE on the ticket, that the non-initiate has trouble finding anything of value.  So think about that if you're designing some sort of booking system--show the day of the week, please. :)

Lean Process Improvement
So this morning, on top of being tired because I stayed up late writing, I was late for the class I wanted to attend, one called Agile Architecture.  Unfortunately, it was in the smallest room in the conference (same one as the manager meeting yesterday), and unfortunately, the planners didn't anticipate attendance to that session correctly.  Plus, this room had this odd little old lady who felt it was her duty to prevent anyone from attending who had to stand. 

Yesterday, I watched her try to turn away (a few successfully) quite a few folks, even though there was plenty of room on the far side to stand.  She kept saying "there really is no room," but there was.  What made the whole scene kind of comical was that she refused to go sit OUTSIDE the door, so rather than simply preventing folks from coming in and causing a distraction, she let them come in, then animatedly tried to convince them to leave, causing even more distraction.

Well, when I peeked in the door this morning, saw the full room and saw her start heading toward me, I knew I was out of luck.  I just didn't have the heart to muscle by her and ignore her pleading to go stand on the other side, and besides, I don't like standing still for 1.5 hours anyway.  So I was off to find an alternative.

I knew there wasn't much else I wanted to see during that hour, but by golly I was there and this was the only slot I could make today, so I was going to make it to a session!  After two more failed entries into full sessions and studiously avoiding some that sounded extremely dull by their titles, I finally found one that sounded nominally interesting and had a lot of open space.  I really had no clue what I was getting into...

It ended up being somewhat interesting.  It was about applying the "lean process" from the manufacturing space to software development.  I'm personally not really into process and methodologies, particularly when they come from disciplines that are only marginally like our own.  But this did sound like it could be useful in some situations, particularly in software product (i.e., commercial) development. 

He talked about value stream mapping, which is basically modeling the process flow of specific activities in product development from beginning to end (so you'd do one for new feature dev, one for enhancements, one for hot fixes, etc.).  It sounds like it does have potential to be useful as long as you don't spend too much time on it.  Particularly if you think you have a problem in your process, this method can help you to both visualize and identify potential problems.  If you do product development, it's worth a look.

Final Thoughts
After that session, I made off to go to the 12:05 mass at the chapel outside the convention center.  My deacon friend had let me know about it, and I was glad of it.  And he was there, so after mass, we went back into the conference to grab lunch together.  Talked more about the usual, and then I had to run off to catch my train.

Looking back, I feel that this is definitely a conference worth attending.  Of course, your mileage will vary.  I wouldn't come here to go to a bunch of sessions on topics you're already an expert on.  But the nice thing about this conference over others I've been to is that it really is focused on best practices.  It's not really focused much on technology-specific stuff (though there was a bit of that), so you can derive value whether you do Java, C/C++, .NET, or whatever. 

Also, it is a good place to come to meetings of minds from other technology experts, so you get some more exposure than you might normally to how folks are doing software outside of your technological community.  And one interesting thing I noticed is that there is a tangible presence of software product developers, and that's a different and valuable perspective for those who are more used to, say, standard custom/consulting/corporate IT software.

Overall, if you look over the sessions and see topics that you haven't had a chance to explore in depth or maybe you want to just get exposed to other ideas in the software space, this seems like a good conference for that.  I really enjoyed it.

Friday, 21 September 2007 16:27:11 (Eastern Daylight Time, UTC-04:00)  #    Disclaimer  |  Comments [0]  | 
# Thursday, 20 September 2007

Today I stumbled into Barnes & Noble (because it had the nearest Starbucks), wandered into the notebook section, and was reminded that my current Moleskine notebook was almost full.  Silly me, I still have two back at the office, so I thought it must be fate for me to go ahead and restock while I'm here.  I highly recommend Moleskine; I like the small, book-like ones without lines because small is convenient enough to put in pocket and I don't like to conform to lines or have even the suggestion that I should, but they have all kinds.  Good, tough little notebooks, and supposedly they've been used by some famous people.  This has not been a paid advertisement for Moleskine.  Now we return you to your regular program.

Applying Perspectives to Software Views (Cont'd)
Yesterday I talked about Rebecca Wirfs-Brock's session on software views.  There's a lot more to what she said than what I communicated, but I'm just propounding what stuck with me.  Looking at my notes, I forgot to mention another key thing, which is that you should model these views and model them in a way that effectively communicates to the stakeholders that their needs are being addressed.  She threw up some UML diagrams, commenting that they're probably not good for most business folks.  (I think UML is not good for most technical folks either, but I'm a rebel like that.)  The point she made, though, was regardless of what notation you use, provide a key that let's people know how to unlock the meaning of the model.  Good point for sure.

Actually, this reminds me of Beautiful Evidence, by Edward Tufte.  I recommend Tufte for his area of expertise, though I'd suggest skipping the chapter on Powerpoint (which sadly was released as a separate booklet) because it's not his area of expertise and it shows.  Anyways, when he is sticking to the realm of visual communication, he is excellent, and Beautiful Evidence is a pretty easy read that helps you start thinking about how to communicate "outside the box" as it were.  I bring it up here because applying his ideas in the area of modeling software, particularly to non-technical audiences, is something we should explore.

Now, back to Day III.

Software Managers
The first session I made it to kind of late (and it was absolutely packed--standing room only) was a session on tips for being a good technical/software manager.  Having become one of these this year, it is definitely a subject of interest, and I'm always on the lookout for more tips, though I must say that I think management books (as a rule) are really bad about regurgitating each other.  You get to where it becomes increasingly hard to find new, good insights the more you read them.

But I thought this session would be good since it is specifically focused on managing technical teams.  Some of her points were standard managerial stuff, but it was nice to have it focused in on the IT industry.  I always end up feeling a bit guilty, though, because I know I've already made numerous faux pas (not sure how to pluralize that).  I hope my guys know I love them even though I screw up being a good manager at times. :) 

One recurring theme I keep coming across is having regular 1-1s with your peeps.  I've heard weekly and bi-weekly, but it seems like both of those would be overkill for my group since we have daily meetings, often go out to lunch, etc., so I'm going to try monthly first.  It'll be better than nothing! 

I have to say that managing well is at lot harder than I expected it to be.  For those of us who aren't natural people persons, it is definitely an effort.  I'm sure it is tough regardless, but I gotta think that it'd be easier if I was naturally more a people person.  Anyways, I keep tryin' for now at least.

Designing for User Success
Went to another Larry Constantine session around UX.  This one was really good.  He, like Patton, affirmed that "user experience is about everything."  Again, it's nice to know I'm not crazy, and it takes a burden off me knowing that I won't be a lone voice crying out about that.  It seems that maybe just those who don't know anything about UX think it is "just another term for UI."  Of course, these "UX professionals" are naturally focused in on their areas of expertise (usability, information architecture, human factors, human-computer interaction, visual design, interaction design, etc.), so maybe I'm still a bit odd in my contention that architects must be the chief experience officers on their projects.

Anyhoo, this session focused in on "user performance" as a distinct focus, meaning that you are providing the tools to get the best performance out of people.  Though none of the session was spent explicitly justifying the importance of a focus on UX, implicitly the whole session was an illustration of why it is important.  I have a ton of good notes from this session, but I won't bore you with them (you can probably get most of it from his slides or other presentations he's done).  If you get nothing else, though, it's to change the way you think about designing software--design from the outside in.  If you're a smart person, you'll realize this has huge implications.  And also, recognize that you won't make all parts of your system perfectly usable, so prioritize your usability efforts based first on frequency of use and second on severity of impact (i.e., those things that will have serious ramifications if not done correctly).

Human Factors in API Design
The next session I hit was one related to UX for developers.  Here are some salient one-liners:

  • Consistency is next to godliness.
  • API = Application Programmer Interface
  • When in doubt, leave it out. <-- More specifically, unless you have at least two, real use cases, don't stick it in your API.
  • Use the Iceberg Principle. <-- This means what people see of your code should only be the tip of the iceberg--keep it small, simple, and focused.

This session actually seemed to be a blend of general UX guidelines (yes, they apply here, too, not just on end-user interfaces) and more general framework design principles that only had varying degrees of pertinence to ease of use.  Some highlights:

  • Default all members to private; only raise visibility with justification.
  • Prefer constructors to factory/builder pattern, and setup object fully with constructor where possible.
  • Use domain-specific vocabulary.
  • Prefer classes to interfaces.  Amen!
  • Prefer finality (sealing) to inheritance--minimize potential for overriding.

There's a good deal more, and I'm not offering the justification he proposed (for brevity's sake).  I agree to varying levels of vehemence with most of what he said, but one area where I think I have to disagree is his advice to only refactor to patterns.  I can imagine where this comes from--because patterns can be abused (paternitis as he said).  But I think saying refactor to patterns shows a big misunderstanding of the point and value of patterns.  This is why it's important to pay attention to the context and rationale in a pattern--so you know when to apply it.  But patterns should be used where they apply--they're known, established, tried and true ways of solving particular problems in particular contexts!  If consistency is akin to godliness, using patterns is ambrosia.

One last interesting note from this session was the admonition to consider using or creating a domain-specific language where it helps with the usability of the API.  His example was around JMidi and JFugue, where JMidi is a terribly verbose API, requiring the construction of and coordination of a host of objects to do something simple like play a note, JFugue offers a simple string-based DSL that is based off of musical notation to let you place a whole series of notes very compactly.  Good/interesting advice.

Pair Programming
The last session I went to today was one based on practical pair programming.  I was actually on my way to a class on Business Process Modeling Notation, which would have been potentially more intellectually stimulating, but I walked by the room with the Pair Programming session on it and had a sudden feeling I should attend it.  When I thought about it, I figured that I'd put off giving the idea fair play long enough and that I should take the time to hear it in more depth.  I figured it'd have more immediate relevancy to my current work situation in any respect.

I won't belabor all the points because I suspect with good reason that they're all the standard arguments for pair programming along with a good bit of the "how" to do it in real situations.  He actually has a number of patterns and anti-patterns to further illustrate good/bad practices in pair programming.  It was an interesting extension of the pattern-based approach (to people).  Suffice it to say, I think if you can get buy in in your organization it is definitely worth a try.  There are numerous difficulties with it, chief one being it is hard to do effectively in a non-co-located environment, but I think I'd try it given the opportunity. 

Random Thoughts
One thing that I've come to the conclusion on being here is that TDD seems to be unanimously accepted by those who have actually tried it as a best practice.  The API guy went so far as to say that he won't hire devs who don't have TDD experience.  (I think that's a bit short-sighted, but I take his point.)  It's something to think about for those still hesitating to adopt TDD.

I met up again with the same fella I met last night.  We were both in the pair programming class at the end of the day; he's been doing pair programming on a few teams at his company for years and is a fan, though he definitely attests to the difficulty of dealing with prima donnas, which apparently are more tolerated in his LOB (because they have very specialized knowledge that requires PhD level education).  So he wasn't able to carry XP to his entire company.  He also said that pairing (which was echoed by the presenter) is a taxing process; 4-5 hours max is good.

We also had a good long chat about things Catholic.  It's good to know that we Catholics will be getting another good, solid deacon in him.  I imagine tonight won't be the last time we talk.

All in all, another great day.  Learned a bunch.  No sessions I regret going to thus far, which is I think a big compliment for a conference. :)

Thursday, 20 September 2007 22:48:34 (Eastern Daylight Time, UTC-04:00)  #    Disclaimer  |  Comments [1]  | 

Disclaimer
The opinions expressed herein are solely my own personal opinions, founded or unfounded, rational or not, and you can quote me on that.

Thanks to the good folks at dasBlog!

Copyright © 2017 J. Ambrose Little