12 November 07 - 14:13Breaking Acts at Agile 2008
Preparations are starting for
Agile 2008. And you can help. The short story is that we're
looking for speakers; we'd also like to solicit reviewers. Read on for the details.
In the run-up to
Agile 2007 I shared with
Elisabeth Hendrickson the post of Tutorials Chair. This means we were responsible for one specific type of session, irrespective of topic: tutorials, which are meant to convey "mainstream agile" content and attract the more polished speakers. We struggled with the scale of the conference - 1200 attendees in 2007 and 1600 expected next year. The number of submissions was quite large - about 600 all told, about 200 in tutorials alone. In reviews we found it hard to give all tutorial submissions, covering as broad a range of topics as they did, the attention each deserved.
Rachel Davies is chairing the 2008 conference. She came up with a metaphor to guide the design of the conference - one that has the advantage of framing this big conference as a cluster of smaller conferences, with the team in charge of each smaller conference free to focus on a topic of interest to them. So, Agile 2008 is organized along the lines of a "music festival", with various Stages; each Stage has a theme and a Producer who tries to put together a great agile conference around that theme. I think it's pretty nifty. Since it's new, there will inevitably be some few hiccups as we get used to it, but I am optimistic it can help reduce the "big conference blues" we experienced in the past two years. There's a stage dedicated to Agile
curmudgeons, for instance - I'm thrilled that we're having that. There's one on examples, one on the user experience, one on customers and business value, and so on.
I'm happy to announce that I will be producer for the "
Breaking Acts" stage. Quoting from the CFP: "Agile as it stands today is still a work in progress. For Agile software development to remain relevant, it must incorporate new ideas continuously. This stage is for speakers who bring a fresh and surprising look to aspects of Agile we thought familiar, and speakers interested in ideas that are relevant to Agile but not accepted yet as 'mainstream'. First-time speakers are particularly welcome."
If this kind of thing rocks your boat, I would appreciate your helping in one of two ways. Right now, if you'd like to be a reviewer for session proposals, please get in touch with me; I'll give you a quick overview of what to expect and what's expected of you. In a few weeks, if you're interested in speaking at the conference, we'll be opening up our (new) submission system to session submissions. I'll post the details here (if I remember; otherwise, they'll also be on the conference site).
Morendil - default -
-
§ ¶
06 October 07 - 15:13Principles and patterns of codebase structure ?
Let's say you just had a nifty idea for a software product. Could be a Web site, an IM client, a new Ruby gem, anything. And let's say you've done enough up-front work to suit your purposes and your process preferences. So it's time for you to sit down and prepare a directory tree for the initial import into Subversion or CVS.
What are the rules for doing that ? And what are the rules that govern ongoing elaboration of this directory tree ? I'm not aware that these are written up anywhere (if you know of such a write-up, I'd appreciate a pointer).
Most competent programmers I see sketching a directory tree seem to be doing "the same thing". They'll start at the top level with, say, "src", "test", "doc", "lib" directories. But why ? If their intent is something more complex than a simple app they'll create additional divisions at the top level, or below, which make sense for that intent. These programmers don't seem to be following explicit guidelines or principles or known patterns, and sometimes I find codebases whose authors tried to imitate this "standard" structure in ways that just don't make sense. So, making the principles and patterns explicit could be valuable. I'm thinking that one good way to make those principles explicit would be to look at "ugly" codebases, identify the violations we see that make them "ugly", and reason backwards from that to the "proper" principles.
Based on experience with violations, I'm postulating some "principles of transparency", which suggest things that codebase structure should
not reflect:
- A principle of transparency with respect to team organization - the codebase should not reflect the structure of the team. I was quite shocked when one colleague reported to me that he had seen a team using Subversion where the top level of the code base was a set of directories, one for each member of the team. This suggests that the team members "integrate" by manually copying code from their "private" directories to one that is authoritative.
- A principle of transparency with respect to change over time - the codebase should not reflect version evolution. It's always unpleasant (but not quite in the "shocking" category) to come across a directory labeled "old" or "version_before_ajax" or some such. It's the job of version control to track those things.
Primarily I think of the contents of the repository as a "blueprint" for creating a running system. The repository doesn't have to be organized along the same lines as the running system will be organized. (I even debated adding that to the list of "transparency" principles above, but I believe it can actually make sense e.g. to have a top-level division into "client" and "server".) However, the repository
does have to contain everything you need to know in order to produce a running system. The repository also has to contain everything you need to know in order to advance to a new version of the system - to fix a bug or add a feature. A memorable formulation could be "For maintenance you need the repository, all the repository and nothing but the repository".
The decomposition of a system into "products" (in the sense of
that post by Reg Braithwaite) plays an important role, I suspect, in structuring the code base. Independent "products" should live in separate repositories; however some systems might depend on very closely related "products" (again the example of client and server comes to mind) sharing some common code.
For a single-product repository, the "description of how to produce the end result" theory makes good sense of why many projects have "src", "doc", "lib", "test" and a makefile at the top level. Directly at the top level is what we'll be concerned with - "building" or "deploying" or "installing" a running system from the repository. (Or sometimes a "shippable" rather than a "running" system; a level of indirection is introduced by having the repository be a recipe for building an installation CD and the running system only results from the end user running the installer.) The top-level groupings are according to the
function that the various elements play. The "doc" directory is where you go to understand the code, which you then find in "src", after which you can verify your changes by running the tests in "test". In the "lib" directory there are components which are needed to build the system but which you don't need to know, as they are unlikely to require any changes. For multi-product repositories, we can expect that the top level will have a directory for each product, under which the same structure will be found as for a single-product repository.
Do these observations make sense ? Did you come across codebases whose structure you found perfectly clear, or perfectly bewildering, and for what reasons ?
Morendil - default -
-
§ ¶
02 July 07 - 15:22Candidate for the Agile Alliance Board
The
Agile Alliance will be
electing six new board members this year.
I have decided to be a candidate to one of these board positions. The "motivation" part of my
position statement reads as follows: "The Agile community is finding ways for software development efforts to deliver more value. Our guiding stars are feedback, transparency, small increments, high collaboration… Yet our efforts to structure the Alliance itself around those values have been limited: for instance our main conference is organized with phases and deadlines, and is still One Big Conference. My intent in joining the Board is to help the Agile Alliance become still more agile itself, while preserving a sense of community that I value very much."
In plainer terms, the Agile Alliance, to serve the Agile community, must be seen to "eat its own dog food". So I have been arguing since the beginning of this year, partly as a result of becoming closely involved in the organization of the Agile 2007 conference. Becoming a candidate is a way for me to do something about it, other than just complain. ;)
There are two concrete objectives that I intend to pursue as a priority. The processes used to develop software that support AA activities should be Agile processes, and the resulting systems bug-free, maintainable, and pleasant to use for all involved. The selection of conference tutorials should be such that tutorial presenters are given several occasions for feedback and improvement, rather than just one known as "The Submission Deadline". Those are the "stories" I want to sign up for, enough to start with. When they are completed, I'll look for more to do, or step down.
I would appreciate your support. If you approve of my intentions, whether you are a member of the Agile Alliance or not, you can help by linking to this entry in your blog, or otherwise saying you support me. If you are a member, you can vote for me at the Agile2007 conference; if you are not attending the conference, you can vote by email. If you are not a member, you can
sign up.
Morendil - default -