Are You This Agile? Paul Graham Changes Hacker News While You Wait
pchristensen.com
pchristensen.com
Right now I'm working for a very large European web site that's entirely written in Java. We make changes all the time (e.g. we probably make at least 3 code changes to the web site per day). Doesn't need any magic PG pixie dust sprinkled on the engineers to make this happen. What we do is run all our web server/app server combinations inside Solaris zones. When we make a change we tell the production system to shutdown each zone when it's ready (finished with current requests) and load the new one.
If the article author works at one of those "average" shops, I think he has every reason to consider his experience on news.yc as a breath of fresh air and tell other people about it as an example.
Additionally, I think part of what impressed the author so much was that pg took the time to handle the request immediately. This isn't a site anyone pays to use, there's no revenue incentive, and the request was not the early stage of a riot, but they took care of it as though it was as important as a paying customer relationship, and that's not a response you expect from most web services. In fact, I think that may be what impressed the author more than just the speed of the fix.
I am at one of those "average" shops, as are most people (by definition, although maybe not in the HN community). I know this stuff is possible but we can't do it here, and neither can most sites.
To put it in perspective, if you found a bug in your bank's website and told them about it, how long would it take for them to fix it? Even worse, what if you suggested a way to make the site work better? Would anyone with decision making power ever even see the suggestion? Just try telling someone WHO'S NOT A GEEK this story and see what they say. I wrote the article because when I told my wife what happened, her jaw hit the floor.
To put it in perspective, this is a very simple, small application with a relative handful of users that ... publishes links.
1) "capital A" Agile (even though it wasn't really about that) 2) reference Paul Graham (always a lightning rod :) 3) Ask a challenge question "Are you this [positive adjective]?"
The awesome thing is that this could have worked with an installed desktop software, without downloading new binaries and installing them, simply having the application download a tiny text file with the source code change to input into the REPL.
No recompiling, no pushing huge binaries, no hassle.
I had to implement a big cumbersome system to enable automatic incremental live updates on our client software, so users will always use the latest version. Using Lisp just makes it a breeze.
The Agile way would slow down particular changes, with practices like testing. The theory is that you take a little more time for every change in order to maintain optimum speed over the long term.
1. quick and well-coordinated in movement; lithe: an agile leap.
2. active; lively: an agile person.
3. marked by an ability to think quickly; mentally acute or aware: She's 95 and still very agile.
Yes, it's possible he's referring to Agile Programming but that's a stretch given all the other facts here.
The equation of "we iterated faster == we're more Agile" is what I thought was retarded.
I do apologize if you clicked on it looking for something about Agile and then found it uninteresting and unengaging.
But can a production-lisper tell me what is best practice regarding versioning and saving to files?
I'm assuming that modifications via the REPL are affecting the running image only. Can the running image save back out as source? (I'm assuming not, surely comments etc aren't preserved?)
Is it down to the admin to replay all changes they make to the REPL to the app source?
/goes off to think about how best to provide an inspection-based REPL to his web app
The normal routine was to change the source, test it, then from server REPL I just reload it. If the problem was more serious that I had to fix it ASAP, I sent the definitions directly from the editing source to the REPL (in Emacs it's just a couple of keystrokes).
It was only when the situation was extremely serious (e.g some bug stopped large part of the production pipeline) that I typed expressions directly into REPL and afterwards I put the fix into the source. It was pretty rare, though.
Often, it's NOT the capabilities of the app that are the most important thing, it's the ABILITY TO CHANGE those capabilities quickly that matters most.
I've seen this over and over and over again in businesses. When the app (often packaged) is missing a certain feature or capability, the organization will always find a way around it: a satellite app, an excel spreadsheet, pencil and paper, even hiring a few extra clerks. But what really drives them nuts is when the business has a new critical requirement and the software can't be changed in time to meet it.
The examples are endless: we're running a special sale, we have a new temporary warehouse, the accountants insist on special security for certain classes of workers, Joe just found out that <abc> has happened in Duluth - if we knew <def> by 3:00, we could do <ghi>.
I know many business people that will only buy packaged software with source code. They will not pay maintenance, and use the money instead to hire their own programmers. It's THAT IMPORTANT that the software can "turn on a dime" to satisfy rapidly changing business requirements.
Bravo, pg, for doing something (however apparently minor) to bring this issue front and center where it belongs.
After a while I figured out that capitalization counts. But still, it was a bit confusing.