How long did it take to get initial version up and running?
I don't remember exactly. It took some experimentation.
I started out trying to avoid partitioning the world into areas, and used a global lock on the whole object tree. Events fired out of a thread pool. This was of course only marginally better than using a single thread.
Then I tried putting a lock on each object and doing some spin-release-wait locking to acquire locks on objects before the guts of the events ran. This worked ok-ish, as long as you knew what objects you needed to access beforehand. If you found that you needed to access another object half-way through processing, you had to add it to the lock list, roll everything back, unlock, spin through all the locks again, and reprocess (rather like backing out of a database transaction). But it was hideously complicated to write properties for.
That led to the investigation of software transactional memories, but it turned out that none of them that I examined at the time were really of production quality. The fast ones were really buggy, and the robust ones were really slow.
Somewhere in there I tried to write it on JPA/tomcat, and then GAE, but both of those were too slow. GAE would have been good enough it they supported persistent TCP connections or http streaming or something at the time, but they didn't (the slowness there was due to HTTP polling; their memcache backed by bigtable makes for lightning fast persistence as long as you're not too write-heavy). JPA was /horridly/ slow with many-many relationships being mapped to POJOs. It works pretty good if you avoid many-many relations, but otherwise it brings even the fastest DB to an ignoble grinding halt.
After that, I settled on having to partition the world into areas with the realm model, which I didn't want to do, because it doesn't scale as well, but.... Oh well. I think it took 3 or 4 days to get that model relatively bug-free with the compositional object model and some basic dungeon geography properties and a stat-less @ wandering through halls of #s, but there was a lot of bits of code to be reused from before so it wasn't /all/ from scratch. It helped that I was using all the maps from Daniel Lawrence's DND for test areas, so that made for a quick relatively large dataset to test with without having to mess with writing random generation stuff.
I think it also helped that I was unemployed and very very bored at the time.