Friday, February 19, 2010

(define (free)

(define (free)

I finally have some free time to write.

It's been hard to come by; I work at an office where the Agile Mafia has taken over, and the only visible result I've observed is that there's less free time and more shitty, un-maintainable products. It's weird, because looking around at real tech companies, you'd get the impression that Agile was dead (or at least, restricted to the less ridiculous aspects). I'm here to tell you that if you're at anything other than a tech-focused company, you get to put up with all the annoyance of "weekly sprints", "daily scrum" and "tighter scheduling" without getting any of the real or imagined benefits.

Here's the result, from someone at ground zero:

  1. You're always forced to over-commit.
  2. You're held to your commitments, and missing a deadline (no matter how unreasonable) is seen as a failure on your part.
  3. Bug fixing and testing is expected to go on for 1/4 as long as development.
  4. When there are issues on live, you are expected to handle those, then work overtime to catch up with your actual work (because the plans are always made on the assumption that this time nothing will go wrong).

Number 1 means that there's never really enough time to get everything done. Number 2 means that it's actually better, from the incentive perspective, to half-ass everything you're tasked with so that you can call it "done", and tell yourself and your peers that you'll fix it later. Number 3 means that in any given release, half or more of the major issues get pushed out onto our clients (who promptly complain about those issues and cause number 4). Finally, number 4 means that there's never enough time to fix the defects introduced in numbers 1 and 2.

Ironically, number 2 also means that if performance is measured closely enough and used as a gauge enough times, anyone that tries to point out and/or work against the negative re-enforcement loop gets canned.

In other words, I have observed that the Agile process, used as it is at my company decreases the number of competent developers/designers, decreases the quality of work done, decreases the number of working features present at any given time and (if I can imagine their viewpoint for a moment) erodes client good-will. This sounds like it's bad.

I don't even want to think about a general case though. I'm thinking right now. A feature I'm working on is languishing. It doesn't get attention because it's really only been requested by a couple of clients, and because the rest of the dev team though it would be trivial. It wasn't I've watched the programmer responsible struggle the entire way through. Hell, the flash side alone was struggle enough. The back-end accounting logic for this thing must have been monstrous. We're at the last day right now. Tonight. As I write this, it's 11:45 pm on the Friday before release, and I know it's going out on Monday, come hell or high-water.

The process we're using, and the assumptions we've internalized combine to mean that I can't fix it. That if I try and succeed, I'll get a talking to. If I try and fail, it'll just re-enforce the perception that the process should not be deviated from.

Superstition is infuriating in others, though I realize that it must affect me at some point as well.

I didn't want to talk about that though. I wanted to talk about how I'm taking the edge off enough that I haven't decked anyone yet. This is the sort of ironic thing about my life and job. I love drawing, and I love programming. And even when those are the things that principally make up my job, they're what I do as stress release, and as entertainment. So lately, I've been programming. What, you ask? Why, this:

(defmacro defregion (tag-name tag-text)
  `(defun ,(make-symbol (concat "region-to-" (symbol-name tag-name))) ()
     (interactive)
     (wrap-region ,tag-text (region-beginning) (region-end))))

(defmacro deftag (tag-name start-tag end-tag)
  `(defun ,(make-symbol (concat "insert-" (symbol-name tag-name))) ()
     (interactive)
     (insert-tag ,start-tag ,end-tag)))

(define-minor-mode blog-mode
  "This is a collection of useful keyboard macros for editing Langnostic"
  nil
  " Blog"
  (setq blog-mode-map (make-sparse-keymap))
  (define-key blog-mode-map "\C-cl" 'insert-link)
  (define-key blog-mode-map "\C-cb" 'insert-code-block)
  (define-key blog-mode-map "\C-c\C-l" 'region-to-link)
  (define-key blog-mode-map "\C-c\C-b" 'region-to-code-block))

(deftag link (concat "<a href=\"" (x-get-clipboard) "\">") "</a>")
(deftag code-block "<pre>" "</pre>")

(defregion link (concat "<a href=\"" (x-get-clipboard) "\"></a>"))
(defregion code-block "<pre></pre>")

(defun insert-tag (start-tag &optional end-tag)
  (interactive)
  (insert start-tag)
  (save-excursion
    (insert (or end-tag ""))))

(defun wrap-region (a-tag start end)
  (let ((tag-pair (split-tag a-tag)))
    (goto-char end)
    (insert (cadr tag-pair))
    (goto-char start)
    (insert (car tag-pair))))

(defun split-tag (a-tag)
  (let ((tag-pair (split-string a-tag "><")))
    (cons (concat (car tag-pair) ">") (list (concat "<" (cadr tag-pair))))))

(provide 'blog-mode)

It's still taking me some time to get used to the keybindings (given that I use the CUA mode shortcuts, so C-c is also my "copy" shortcut which makes it slightly more challenging), and I still haven't put together an automatic indenting/coloring feature on the code-block functions, but this is a half-way decent first stab at a helper mode for Emacs.

So yeah.

I've also gotten to the point where my average WPM is up at 52-58, which means that I'm about 20% faster than my previous peak. Combined with the helper mode above, it means that this is the least amount of time I've spent writing a blog entry by a pretty wide margin. I plan to keep it up, so the savings will increase as I practice and write further convenience functions for myself. The guys who keep saying how it's important to build your own tools are on to something. It's made me more productive.

I think.

The sad fact is that I don't have a reliable way of measuring, so I might be just as deluded as my product manager and CEO. I'm still going to keep it going. If nothing else, this kind of skills development will keep my blood-pressure down and potentially make me a more attractive hire for a company that gives a rat's ass about shipping AND having great product, rather than just unqualified shipping.

No comments:

Post a Comment