A Manifesto for Post-Agile Software Development

In nearly 15 years since the Agile manifesto was penned, an entire generation of the software industry has grown up having known only allegedly 'Agile' methodologies. Their experience has not always been positive.

The 'new' criticisms made against agile – by those who have grown up with it, not those who opposed it in the first place – are rarely criticisms of the agile manifesto. They are, often, reactions against the (abusive) experience of being pushed into processes, behaviours & relationships which are unsatisfactory; whilst at the same being stripped of any power to improve them.

We should always react against people being pushed about, and made powerless.

A manifesto is a small thing. It can fall on deaf ears. It can be interpreted to mean the opposite of what was intended, it can be misused to manipulate people. But if we make the effort to keep in touch with each other, and to keep trying to re-state what was meant, it can continue to be a valuable guide. And so I propose a 15th anniversary postscript.

Manifesto for Post-Agile Software Development: A Postscript

  • The agile manifesto was not and is not a prescription for people to impose conformity, nor a tool for controlling people.
  • There is a deeper theme to agile. At the core it is based on trust and respect, promoting workplace relationships which value people. We oppose methods, structures and behaviours which reduce respect and trust, and which reduce people to assets with no power.
  • Agile will always demand shared learning and shared improvement. Without critical reflection and learning – both from their own experiences and from the wider community – teams cannot remain agile. Without improvement based on that learning, 'agile' becomes fossilization.
Manifesto for Agile Software Development: A Reminder of the Original

The Agile Manifesto:

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

That is, while there is value in the items on the right, we value the items on the left more.

Comment

  • The phrase and much of the bullet point ‘There is a deeper theme...’ comes from About the Manifesto.
  • The emphasis on continuous learning is for some so obvious as to need no explanation. But some are stuck in a so-called “agile” process which they are powerless to change or improve. The irony of naming such an structure “Agile” would be funny if it weren't so painful.
  • Ron Jeffries' response to some criticisms of Scrum was: “The essence of what makes Scrum work isn’t the three roles, the five meetings, the one artifact. It’s Inspect and Adapt. When things are not going as you like, you’re supposed to fix it.”
  • To cry out that without continuous learning and change there is no agile, can be a powerful tool for the disempowered.
  • Calling for change in a broken process can become a step towards changing broken relationships.
  • Beyond “Deliver working software. In a team.”, I see two essentials to agile:
    • Treat people well
    • Never stop learning
    Each of these two is only truly possible when the other is also practised.

Go Further, Do Better

  • Alastair Cockburn was ahead of the game and has been teaching  Heart of Agile for a while. He has four essentials: Collaborate, Improve, Deliver, Reflect.
  • Ron Jeffries and Chet Hendrickson's post on turning the dials up to 12  starts from, ‘Al Smith once said “The cure for the ills of democracy is more democracy”. We say The cure for the ills of “Agile” is more Agile.”’ and sketches what turning the dials to 12 might mean.
  • Gabrielle Benefield's “Mobius Loop” uses a different language and stipulates a process. At first glance it is much more achievement focussed. The four “corners” of their figure 8 loop are Why & Who; Outcomes; Deliver; Measure & Learn; and the centre crossover of the loop is Options.

An older bibliography

Draft – Comment & Contribution Welcome. Updated September 2019.

WordPress – Unable to create directory – Is its parent directory writable by the server?

One of the annoyances of teh interwebs (mostly stackexchange, actually, but not in this case) is when the wrong answer comes top of the google rankings for a common question.

So here's my contribution to making WordPress Forums for Unable to create directory - Is its parent directory writable by the server? the top google hit for this problem.

The problem, for me and many others, is not directory permissions but the path-to-uploads setting. Fix it by logging in with your admin account, and correct the path in:

Settings -> Media -> Uploading Files : Store uploads in this folder

WordPress Settings Media Upload Path

Why was it incorrect in the first place? Because I had changed hosting provider.

Use a Windows NTFS, or Linux, or Network, or other–formatted disk for Apple Time Machine Backups

It used to be well known that you have to use an Apple formatted disk (HFS+) for Time Machine Backups and you can't use an NTFS formatted disk, or any of the popular *nix disk formats with Time Machine.

Except, you always could.

Gotchas And Caveats

It's not always a first choice option:

  • If your Windows drive is connected over USB2, it will be much slower than a Mac disk connected over Thunderbolt or USB 3 or 4. My first backup of 120GB took about 10 hours, aka all night. But further backups after that first one are much quicker.
  • On an external drive plugged in to your computer, the backup volume may not auto-mount when you plug the drive in. You must manually double-click the <YourMachineName>.sparsebundle in the Finder each time you plug the drive in. After that, Time Machine backups will run as normal.
  • Backups, especially to a network share, are best done with some extra setup to improve reliably unless your network, server, router, disks and desktop all stay reliably connected and switched on.

Backing up to a plugged-in NTFS drive

  1. Plug in your foreign-formatted disk and get a read/write driver for it.

  2. Save the the script from tmMakeImage script in, for instance, your Downloads directory.

  3. Open a terminal window.

  4. If you saved to Downloads, then something like this should make the script executable and show you command line usage:

    cd ~/Downloads
    chmod a+x tmMakeImage
    mv tmMakeImage /usr/local/bin
    tmMakeImage
  5. So if your external drive has a Volume called WinDrive, and your Mac drive is about 250GB then this command should initialise it for Time Machine backups:

    tmMakeImage 500GB /Volumes/WinDrive GO
  6. Optionally, follow up with an immediate tmutil startbackup

Opening the Time Machine preferences should now show that you have "Time Machine Backups" selected as your backup drive. Don't forget to double-click the sparsebundle each time you attach the drive, to mount your Backup Volume and allow Time Machine to do its stuff.

Network Drives

Backup to a network drive in a similar way. First mount your smb network fileshare in the Finder, then use the tmMakeImage script to put the sparsebundle image on the mounted drive.

Reliability

Reliability is a concern for backing up across a network, or to a removeable in disk. In otherwise, it's always a concern. Especially if you have a laptop which gets plugged in and out. See notes on using time machine backup to a windows share more reliably.

Background: Using Sparsebundles to create HFS+ formatted drive on a 'foreign' disk format

Apple created, it seems, sparse images and sparse bundles to solve the problem of saving backups on a network drive. Time Machine uses and recognises them. It might even auto-mount the sparsebundle disk image when you re-attach the drive in order to start running a backup.

Other Things Under the Hood of Time Machine Disks

  • You can't create a sparsebundle directly on a network or 'foreign' drive. So the tmMakeImage script first creates the sparsebundle image then copies it to its destination.
  • Sparsebundles don't use up empty space. An sparsebundle declared as 500GB but still empty will only take up a few megabytes of real disk space.
  • A sparsebundle used by Time Machine has a com.apple.TimeMachine.MachineID.plist file in the package, which contains the UUID of the physical machine it belongs to. This stops you accidentally using backups on the 'wrong' machine. (Time Machine does let you browse and use 'wrong' backups though).
  • An external disk plugged in to your Mac must have "Ignore ownership permissions" Off, whereas by default the Mac mounts external drives with "Ignore ownership permissions" set to On. This setting is not stored on the drive itself; it's stored on your machine and can be specified each time the drive is mounted (man hdiutil) or specified permanently (man vsdbutil)
  • You can set the Time Machine destination to a sparsebundle on an attached drive by first mounting it then doing tmutil setdestination /Volumes/Volumenameonceitsbeenmounted. You can mount the image either by double-clicking it in Finder, or with hdiutil attach /path/to/image.
  • Learn More:

    ```
    man tmutil
    man hdiutil
    man vsdbutil
    ```

  • You can still use your backup disks for other files alongside your Time Machine backups. Just don't touch the Backups.backupdb folder! The Finder will protect it to some extent; it doesn't let you modify things in there, but it will let you delete and add things.
  • The Script

    Most of the things in the tmMakeImage script can be found on the net going back to 2007, but you'll still find answers on the internet saying it can't be done.