Managing development flow to go faster

Three from Jon Moore (he doesn’t post that often, but when he does, they are must reads, so subscribe!):

Jon Moore: “Managing Software Development Flow”

Jon Moore: Intuitions about Software Development Flow

Jon Moore: How to Go Faster

And one from Aaron Held that is related on the “Measurement of Awesome”: “This is kind of like gravity. Science can only measure the effects of gravity but you can’t run without it. And running beats floating back and forth aimlessly any day”

Readings on DSLs (Domain Specific Languages)

Martin Fowler: DomainSpecificLanguage

Martin Fowler: FluentInterfaces

InfoQ: Martin Fowler: Introduction to Domain Specific Languages

The Structure of Structures: Are DSLs simply XML Hell?

Ward Cunningham Wiki: Domain Specific Language

defmacro.org: The Nature of Lisp

Wikipedia: Domain-specific languages

Ever see the “Mother of all Demos”?

In 1968 Douglas C. Engelbart, along with a team of 17 researchers at Stanford, in a 90 minute taped demonstration, showed us what was then the future – which is now the present (and soon to be the past?) – hypertext, gui based interaction, online collaboration including email, and more.

Stanford has a terrific page on the demo, including video clips of it broken down by time and topic, and a single clip of the whole thing. If you’ve never seen this before, take the time, scroll to the bottom of this, and watch beginning to end. It’s not called “The Mother of all Demos” for nothing.

I’ve watched this a few times over the years and I keep coming back to it and being blown away. How far have we gone? How far have we not? There has been much added to the mix these past ten years, but it was a long way from there to here.

Related:

PhillyCHI

Joshua Bloch on “How To Design A Good API and Why it Matters”

This is a great Google Tech Talk and while it may be Java-centric, I think much applies to any language you work with.

YouTube: GoogleTechTalks: “How To Design A Good API and Why it Matters”:

This is what I believe is the PDF slideshow from the above presentation.

There is a version of this presentation at InfoQ if you prefer that over YouTube and PDF.

InfoQ: Joshua Bloch: “Bumper-Sticker API Design”

Artima: Joshua Bloch: “Josh Bloch on Design”

Recent programming career recent reads

Tony Lukasavage: “Programmers: Why do we do it?”:

…those who truly love programming see it as an art form. Its not just a technical pursuit, but one that allows the leveraging of one’s unique talent and views. You bring a form of personal expression into your work. You invest yourself physically and mentally in what you do. You suffer and toil, using code as your medium, just as other artists craft with paint or stone. You have a personal association and pride with its creation. The code and its results represent you.

Chad Fowler: “Dead-End Jobs: Are You Suffering From Stockholm Syndrome?” (reddit conversation):

According to the Bureau of Labor statistics, American adults spend by far more time working than any other activity. That’s a lot of your waking time being trapped in a routine. In a Stockholm Syndrome situation, the captor chips away at the self-esteem of the captive. So for most of our waking hours, those of us trapped in dead end jobs like these are exposed to environments which systematically destroy our self-confidence. Not only that, a persistent fear and feeling of failure makes it harder to actually explore the options for leaving the bad situation. The instinctive self-preservation reaction in this kind of situation is to work harder to try to avoid the perceived threat coming to fruition.

David Veksler: “Some lesser-known truths about programming” (lots here, but I want to quote the following in particular since when I use the words ‘conceptual integrity’ I get blank stares too often!):

Software obeys the laws of entropy, like everything else. Continuous change leads to software rot, which erodes the conceptual integrity of the original design. Software rot is unavoidable, but programmers who fail to take conceptual integrity into consideration create software that rots so so fast that it becomes worthless before it is even completed. Entropic failure of conceptual integrity is probably the most common reason for software project failure. (The second most common reason is delivering something other than what the customer wanted.) Software rot slows down progress exponentially, so many projects face exploding timelines and budgets before they are killed.

Martin Fowler: “Is Design Dead?”:

…I think there is a role for a broad starting point architecture. Such things as stating early on how to layer the application, how you’ll interact with the database (if you need one), what approach to use to handle the web server.

Essentially I think many of these areas are patterns that we’ve learned over the years. As your knowledge of patterns grows, you should have a reasonable first take at how to use them. However the key difference is that these early architectural decisions aren’t expected to be set in stone, or rather the team knows that they may err in their early decisions, and should have the courage to fix them. Others have told the story of one project that, close to deployment, decided it didn’t need EJB anymore and removed it from their system. It was a sizeable refactoring, it was done late, but the enabling practices made it not just possible, but worthwhile.

How would this have worked the other way round. If you decided not to use EJB, would it be harder to add it later? Should you thus never start with EJB until you have tried things without and found it lacking? That’s a question that involves many factors. Certainly working without a complex component increases simplicity and makes things go faster. However sometimes it’s easier to rip out something like that than it is to put it in.

So my advice is to begin by assessing what the likely architecture is. If you see a large amount of data with multiple users, go ahead and use a database from day 1. If you see complex business logic, put in a domain model. However in deference to the gods of YAGNI, when in doubt err on the side of simplicity. Also be ready to simplify your architecture as soon as you see that part of the architecture isn’t adding anything.

…In order to work, evolutionary design needs a force that drives it to converge. This force can only come from people – somebody on the team has to have the determination to ensure that the design quality stays high.

This will does not have to come from everyone (although it’s nice if it does), usually just one or two people on the team take on the responsibility of keeping the design whole. This is one of the tasks that usually falls under the term ‘architect’.

This responsibility means keeping a constant eye on the code base, looking to see if any areas of it are getting messy, and then taking rapid action to correct the problem before it gets out of control. The keeper of the design doesn’t have to be the one who fixes it – but they do have to ensure that it gets fixed by somebody.

A lack of will to design seems to be a major reason why evolutionary design can fail. Even if people are familiar with the things I’ve talked about in this article, without that will design won’t take place.

…So is Design Dead? Not by any means, but the nature of design has changed.

Joel Spolsky: “The Guerrilla Guide to Interviewing (version 3.0)”

Joel Spolsky: “The Joel Test: 12 Steps to Better Code”

Joshua Thijssen: “The software managers “joel test””

Lucas Ward: “Maven and Continuous Delivery”

Uncle Bob: “Incremental Architecture”

Steve Yegge: Good Agile, Bad Agile

InfoQ Presentation: Martin Fowler and Rebecca Parsons: “Agilists and Architects: Allies not Adversaries Presentation”

Martin Fowler: Domain Specific Language

InfoQ Presentation: Martin Fowler: “Introduction to Domain Specific Languages”

Dave Thomas: “The ‘Language’ in Domain-Specific Language Doesn’t Mean English (or French, or Japanese, or …)”

defmacro.org: “The Nature of Lisp”

Jun Auza: “Top 50 Programming Quotes of All Time”

Antipatter: “How to Manage A Tech Career”

‘Scalable system patterns’ links for October 30th, 2010

The BIG Software Blog: “Scalability patterns and an interesting story…”

Lori Mac Vittie, of F5 Networks, comments on the above piece on High Scalability and the need for ‘Devops’ to really pull it off: “Applying Scalability Patterns To Infrastructure Architecture”

Pragmatic Programming Techniques: Ricky Ho: “Scalable System Design Patterns”

Pragmatic Programming Techniques: Ricky Ho: “Scalable System Design”

Programming practice links for October 18, 2010

mockyblog: “Programmers: how to make the systems guy love you” – common sense advice that you’d be surprised how many don’t follow.

InfoQ: Abel-Avram: “10 Suggestions for the Architect of an Agile Team” – if you are practicing an agile-lite process, are a senior developer on a team, and have helped usher systems to launch, you will have probably practiced these 10 pieces of advice. I’m not sure if these are applicable practices for architects and am not sure they are applicable for a team that is practicing pure agile.

Artima: Bill Venners: “Tracer Bullets and Prototypes: A Conversation with Andy Hunt and Dave Thomas, Part VIII” – a long rumination on the ‘Start with a vertical slice’ tip from the previous link.

Recent reads on API Design

ACM Queue: Ken Arnold: “Programmers are People, Too”

Communications of the ACM: “API Design Matters”

JavaWorld: “Joshua Bloch: A conversation about design”

InfoQ: Joshua Bloch: “Joshua Bloch: Bumper-Sticker API Design”

InfoQ: Video: Joshua Bloch: “How to Design a Good API & Why it Matters” (and a good thread on Hacker News).

Possible Resource: APIDesign Wiki