Open Source Revolution
As we close out a decade, I was reflecting on what it was like to write code 10 years ago. I had just started at a startup then called Quadrian (later MetaMatrix) and working with five other developers in the frontage space of a steel mill (super cheap rent).
We were using Java and JDK 1.2 was the new hotness with the collections library, Swing, and reflection. From a tools point of view, I did all my coding back then in Programmer’s File Editor (PFE), which had the basic advantage that it wasn’t Notepad. :) There were some Java IDEs at that point but they were slow and lacked many of today’s niceties. It was probably 3 more years before IDEs got fast enough and useful enough that it was faster than just using a text editor (for me at least).
We were building the 1.0 version of an information integration application and we tried to figure out how to take advantage of the brand spanking new EJB and J2EE 1.2 spec that were just coming out. However, we were building a bunch of things that required long-running background tasks which just didn’t exist in the J2EE lexicon back then. So we actually built a hybrid of J2EE services and RMI-based external Java services. Crazy stuff. Kinda worked. We tried for a couple more years to leverage EJB but ultimately rewrote it as an independent server application which made a whole lot more sense.
We were using the still nascent Weblogic 4.5 as the deployment platform back then and trying to understand the nuances of the new-fangled XML stuff. We used XML as a storage medium for our global metadata catalog. We later experimented with putting that metadata in the Versant object database (the API was an early precursor of JDO) and even LDAP (behind JNDI)! We ultimately used the emerging metadata MOF standards from the OMG, stored in a normalized relational DB but that was years in the future still.
We were a small team, so project planning largely consisted of writing some stuff down on a whiteboard. I can’t remember doing anything more than that. Things like agile methods were still a few years from emerging into the limelight. We did code reviews. Unit testing hadn’t really been invented yet, or at least not in the xUnit form we see today. I pushed through our initial unit testing suite in probably 2001 or 2002. We did have tests but they were usually buried in main() methods in each class you had something to test and were run manually.
Builds were a nightmare. We were using source control, but all we could afford was MS Visual Sourcesafe, which we had free along with our MS licenses. It sucked hard but was certainly better than nothing. The “build system” (quotes well-deserved) was a cobbled together set of batch scripts and some Java programs. Much later these got rewritten in Perl and eventually in Ant. I’d written these scripts at a previous job and had re-adapted them. They were mostly concerned with obtaining the software from VSS, compiling it, and creating a jar as far as I recall.
The actual deployment of our software was incredibly arcane as it was a first version of an app server-based app, RMI, etc along with connectors to various data feeds for news, stock quotes, etc. We didn’t have a kit or anything – it was a hand-built process installation at first. We actually shipped the first few versions to customers by buying a computer, installing the software, and traveling to the site with the configured computer. Seems incredibly primitive now.
Learning and trouble-shooting in those days was soooo much harder. Debuggers just barely worked, if at all. Logging frameworks didn’t exist yet that I recall (println was state of the art). Books were the primary source of learning with topical knowledge coming from magazines like Java Report, Java Developer’s Journal, etc. I got them all just to stay up to date. We had web search but this was pre-blog so if you were lucky you might find something on a vendor site or a forum or something. Most often you were just SOL and had to contact the vendor. From what I recall, most stuff was buggy and just didn’t work well.
We had user groups but there were hardly any conferences or other places to share experience. I did my first user group talk on JavaSpaces and TupleSpaces (and my framework abstraction that did both) in 1999.
In general, we rolled almost everything ourselves. We probably did use a few open source libraries, but I would guess they were restricted to XML parsers and things like that. Apache only had a handful of web-oriented libraries back then.
But in some ways, life was simple. We wrote a doc and built it from nothing to 1.0 in just 3 or 4 months. If we did it today, I’m sure we would do it completely differently, but I’m not sure we would do it any faster. These days, the bulk of the software in any app you build is probably open source libraries which probably significantly outpaces your own code. We have so many more resources in libraries, blogs, forums, user groups, conferences, and more but that means we also have to spend a lot longer choosing, configuring, and integrating all the dozens (or hundreds) of components we rely on to buidl our apps.
In general, I think this is a good thing. The quality of those libraries everyone uses is generally pretty high and actively improved all the time. Testing is now a standard practice and most common libraries have large test suites covering the bulk of the code. We now build apps and spend more time focusing on business value, not utilities. But I think we’ve paid for it on the integration side some too.
Certainly the tools (mostly open source) we have today are phenomenal compared to what we had a decade ago. We have a plethora of great IDEs, profilers, style checkers, static code analyzers, memory analyzers, structural analysis tools, and more. I love having all those choices and I think that’s an unqualified win.
Looking forward to seeing where we’ll be in 2019…. :)

Hi! My name is Alex Miller and I live in St. Louis. I write code for a living and currently work for
Hey, I still use PFE! (no kidding!)
Nice story Alex.
I actually came back to notepad from eclipse when I started using grails and together with my tests, println also came back as my main debugging tool.
Back to the roots! :D
PFE? Notepad?
Real men use ‘cat > MyClass.java’ and hit Ctrl+D when the job is done!
P.S. Really real men use ‘cat > MyClass.class’ and type the bytecode directly, but I am working up to that.
Ten years ago?
8 years ago (2001) I was already using IntelliJ IDEA…
And now IntelliJ IDEA is getting open sourced : )
I think it is sad that that phenomenal open source infrastructure explosion has been turning us from “developers” to “assemblers”.
@Dimitris: I wouldn’t completely agree with you – I think in many cases having these components allows you to focus on the parts of your app that are meaningful to your business instead of the infrastructure. This allows to “develop” on top of higher abstractions and components. But at the same it makes the act of “assembly” much more front and center.
Alex, nice article. Feeling a little nostalgic. I remember in 1996, writing apps with JDK 1.0.2 on OS/2, using their standard text editor. I moved to a company in Arizona that put a Sun workstation on my desktop, and Vim 5.0 introduced me to syntax coloring. In 2003, I left the technical world to pursue another interest, and came back in late 2008. This sort of “Rip Van Winkle” experience has caused me to wish for the good old days even more.
I agree wholeheartedly with you that having so many choices is a good thing. What makes it difficult is that we have so many good alternatives that it’s hard to choose. We spend a lot of time fiddling with each and ultimately end up in a meeting weighing the strengths and weaknesses of each option.
IDEs leave me a little empty. They can do so much, but they fight me the whole way. (I’m cheap, um, frugal, so I’m only familiar with Eclipse and Netbeans. Interestingly, Eclipse was just a pre-release announcement, and Netbeans was a re-branded Forte, which stank horribly, back in 2003). I spend more time tweaking my environment than I should — trying to get it to help me write my code better. I’m probably prejudiced, but it’s really nice to slip back into Vim when I need to get some real work done.
I don’t think you should be sorry to roll your own tools and libraries. They do exactly what you need them to do, nothing else. Your organization has full knowledge of the functionality, and is fully capable of fixing it, or adding features to it. When you factor in the time it takes to learn, configure and integrate a 3rd party tool or library, I don’t know that it saves you all that much time or money, and it might even cost you more in those indirect ways.
Nice trip down memory lane.
My very first Java application was an online timesheet. This was an applet running on JDK 1.0.2 back in 1996.
I agree that early IDE’s got in the way instead of helping. I used to do all my coding with VI until I tried Eclipse 2. Eclipse was the first IDE that actually increased productivity significantly. It’s popularity also gave NetBeans a well deserved kick in the pants. I switched to NetBeans when it reached version 6 and haven’t looked back.
Fantastic stuff. I had a similar experience as well. Started out with VSS and manual building, no proper use of open source libraries, no issue tracker, no unit testing, no logging.
Life changed completely with intellij idea, netbeans, ant, apache/other libraries, hudson, log4j, junit, trac, ubuntu and so on.
Feeling proud of the great open source community.