John E. Darrow

Accomplishments | Writing Samples | Hobby Programming
See also resumé

MTS1 software engineer, eBay (2016-2017)

I helped code and test the Node.js web development (both back end and front end) of the replacement of the API Reference generator I had developed in Java in prior years as a tech writer. The new offering was demonstrated at the "eBay Connect" developers conference in June 2017.

I migrated my "legacy doc tooling" (100-200 Perl and Java files) from dependencies on ClearCase (deprecated) to GIT.

MTS1 software engineer, eBay (2015-2016)

I devised and delivered a utility which significantly shortened the tech writer task of reconciling two schemas, a task that could easily take one writer a half a day. I envisioned a process improvement and proposed to three managers that, in two weeks, I could deliver a utility which would help shorten this task for writers. With their go-ahead (granted though I emphasized this would be throw-away code, as we all knew that Engineering would someday overhaul a particular system and eliminate this issue), I delivered (a couple of days over estimate). The tech writers were ecstatic that the utility reduced their effort by several hours. (My hack also served as a sort of working model, illuminating for the Engineers some key things they would need to address in their eventual formal solution.)

I was selected as an evaluator of Industrial Logic's online modules for Java programming, to advise whether such should be rolled out as training for all eBay developers. Personal benefit was high: what I learned has transformed my coding practices--the stuff of test-driven development, refactoring techniques; composition, extracting, inlining... what a profound change in my understand and approach in coding.

Staff technical writer (in software engineering role), eBay (2015)

As a student of the beta version of a developer training course, I gave verbose feedback on how the course could and should be improved. I was granted edit permission for course materials. On seeing the increased success in subsequent course offerings, an upper manager appointed me as lead for the development and presentation of this training.

I skimmed verbose standards documentation, isolating and crafting "assertions" which would be presented to users of our governance software. I confidently stood ground on consistency of expressions when fellow engineers pressed with their ideas of English wording.

Staff technical writer and technologist (2012-2014)

I already had my software for converting WSDL schema to HTML pages. In this role, I provided proof-of-concept software that converted JSON schema into HTML pages.

Staff technical writer and technologist, X.Commerce initiative, eBay (2011-2012)

I began creation of software to convert WADL schema to HTML pages as part of a greater new initiative--which was scrapped a few months later.

Staff technical writer and technologist, eBay (2007-2011)

By far my greatest achievement at eBay was that I was the guy who created the original "schema to HTML pages" API Reference generator for eBay, developing and maintaining it from 2006 to 2017, all by myself. I gained a reputation for rapidly delivering solutions by whatever means. External developers praised eBay's API Reference documentation as the best they had encountered.

Parts of this reference that I would say best illustrate the complexity I addressed would be (a) the Field Index and (b) any call page's "payload model" or the table of field definitions appearing below the payload view.

(The Field Index organizes the schema by field name. The same field name can appear in different types. A field might appear at the top of the payload or be deeply nested. A field might be part of a request payload or part of what is returned. My Field Index page provided links to every use of a particular field. The payload view is what has set apart eBay's API Reference documentation from the competition.)

I was part of the Process Change Request board for years. Requested changes were typically to narrow parts of the code base. The value I brought to the board was my "breadth" knowledge of the APIs. Typical benefit was my ease of fetching reference facts which influenced approval or revision of developer requests. (A notable side benefit: recognition. Even years later, developers would greet me as we passed on campus.)

Senior technical writer and technologist, eBay (2005-2007)

A lead writer and product developer brainstormed on the idea of developing a schema which contained both schema facts AND writer annotations which could be programmatically parsed for HTML page generation, and I was tasked with creating the parser and doc generator. Within a few months, we were able to drop our use of RoboHelp for generation of API documentation and shift to the output from my new software.

I was regularly assigned writing tasks, whether for new features or for amendments to existing features where I had the most domain knowledge.

Writing samples:

Technical writer, contract, eBay (2004-2005)

I had been assigned a task of amending existing documentation to include a new features being rolled out. I advised that the whole chapter merited rewrite--for clarity and to have a place for the new features. I was granted permission and made my first pass at overhaul. This chapter reflected one of a handful of the most complicated eBay API concepts of that time: handling shipping of items. Starting in this role and continuing in years to come, I would refine the documentation as we learned from customer support what remained as the most challenging concepts.

I developed Perl scripts which helped reduce various documentation tasks--whether content creation or process automation. Fellow writers started leveraging some of these scripts. This was the start of peers and management thinking of new ideas of what might be automated and of seeking my coding solutions.

Technologist and tech writer (contract), Informatica (2004)

The Product Development team wanted to use doxygen to generate documentation from their C++ source code. I migrated writer descriptions from FrameMaker to their C++ code, imposing consistency where needed.

Technical writer (contract), Veritas (2003-2004)

I migrated engineer-written documentation to FrameMaker, adopting Veritas writer standards, then converted to PDFs for delivery. I proposed and delivered a web page providing a table of contents type of access to their large set of PDFs.

Presenter of my course materials, many companies (1998-2003)

I saw the opportunity for niche courses for tech writers and developed and offered these courses, first through the UCSC Extension, then as companies brought me to their site to teach their employees. Courses: Documenting Java and C++ APIs for developer audiences, Intro to Java programming for tech writers, and Using javadoc.

Project advisor and trainer (contract) at Savi (2001)

I once worked for Savi as a technical writer for their API. They brought me back to teach their tech writers how to document their growing API and to advise on building a reference documentation set. They extended this training to include my introductory training for Java programming.

Technical writer (contract), Sun Labs (in Sun Microsystems) (1997-1999)

I produced a Users Guide and Tutorial via FrameMaker, converted to PDF.

I provided or enhanced Unix scripts that aided in automating conversion of FrameMaker to PDF.

Technical writer, Oracle (1996-1997)

As team lead for producing a doc set for Oracle's new "Electronic Commerce" Java API, I wrote my share of documentation. I provided a Perl script which bulk-converted a vast amount of database data into FrameMaker-ready tables.

Course developer and presenter, internal customer support, IBM (1988-1996)

I reduced the training burden for our product design engineers. I overhauled an existing week-long course to eliminate the prerequisite of a separate week-long course and simplify the overall presentation of concepts with the same desired end results.

I volunteered to lead a corporate committee (with representatives from multiple IBM sites) whose task was to establish benchmark tests by which teams would later evaluate several CAD tools. Allotted two weeks to deliver proposals for tests, I gathered overall ideas from everyone then formed subcommittees to create proposals for their portion of the overall ideas. We delivered our proposals by the end of the first week.

HTML, viewed through a Netscape web browser--This was a very new concept in 1994. Our course materials were written in SGML. I wrote a program to convert SGML to HTML. I and a course developer at another IBM site used my program to make several of our courses available in this wonderful new corporate intranet space.

Three IBM sites had developed their own course material, and the remaining IBM sites were split regarding which version to use. Management sought to have everyone in IBM use just one of the three courses. I proposed that I could create one new documentation set to unify "the best of" the three courses. I did so, on schedule, and in both SGML and HTML (leveraging the conversion program noted above).

Process and tooling engineer, IBM (1985-1988)

I rewrote an existing manufacturing line process document for clarity.

I designed a mechanical arm which helped relieve microscope operators from (un-ergonomic) extended leaning over their work.

Writing Samples

README: my commentary on the writing samples

Hobby Programming

Photo uploader for my wife's business

I observed the pain for my wife in uploading photos to a web site, having to click this and type that and select calendar dates--repeating for all of the hundreds of photos she might need to get into the system. This could easily take an hour, requiring her constant involvement and error checking.

I wrote one program (Perl) to generate a flat file "database" from her local inventory of photos and facts, and wrote another program (Java Selenium Chrome driver) to do all the UI interaction for uploading based on that flat file. Result: She starts the latter program and walks away. The program shows a progress bar and continually updates estimated completion time based on current internet speed. Eliminating all the human pauses and mouse moves, it has cut the upload time itself down to 15-30 minutes. Over and over, my wife has expressed how much this has freed her.

For my use only: I created a multi-threaded desktop GUI. With it I can manipulate details associated with a photo (people's names, location, story) and can pick from a combo-box list of categories to assign all categories that apply to the photo. The HTML generator then takes these flat file facts and regenerates every category page to account for the altered photo facts. And it does this in each of several languages (English, Spanish, German, Swedish, Norwegian, Italian and Japanese), as I localized key phrases appearing on the page and enlisted fans from around the world to provide the translations. Oh my gosh, yes, dynamic HTML from a DB would be wonderful. Someday. In the meantime, we see this old school look derived from an old school Java approach!

(For a hint at my flat file approach, see my javadoc--where the count of "800" pages is so out of date, as there are now tens of thousands of pages: )

Available to viewers of

  • A search engine that yields a page of thumbnails linked to the full pages.
  • A photo uploader that validates user entries and aids in person identification.

    For each photo, I need to know who came up with idea for the photo (the "contributor") and who appears in the photo (a "phooner"). In the past, users would type first names when uploading photos, and then the burden was on me to figure out, for every upload, what unique identifier I used for each of those folks. And so I enhanced the uploader to present the user with one thumbnail for every past person having that name; the user could then recognize their friend, know the unique identifier, and provide that as part of upload. I no longer have to look up those facts. Saved me so much time!

  • A postcard feature so a person could effectively say "send this particular page's photo to the emails I mention here". It was very popular; I've disabled it for my own security concerns.

Online two-person (same browser) card game, with AI


  • Double-buffering graphics/painting/updating; multi-threaded animation/sprites.
  • AI. I captured how I would make decisions and enabled player 1 to decide whether to play against the AI as player 2 or enable a partner to to made this logic available for player 1 to play against the computer as player 2.
  • Event-driven. Interaction with graphics was via keystrokes. There were multiple key listeners, covering the many phases of the game.
  • Calibrated charts. The player could call up charts showing progress of player 1 against player 2.

Stock picker web page generator

I created multi-threaded stock price trend software that downloaded and parsed historical financial data from the internet for thousands of stocks, identifying "the best" per my specified criteria and created a web page of links to corresponding thumbnails of Yahoo stock charts.

Graphical demonstration of understanding of multi-threading

I created a Java applet which randomized number of dishes held my multiple "washer" roles. Each washer would rinse a dish and put it in the single drip rack--if there was room in the rack. Multiple "dryer" roles would grab a dish from the drip rack when ready for their next dish. This proved my understanding of wait() and notifyAll()--and of some simple Java double-buffering graphics/painting/updating.

Google Maps widget, in perl/javascript

Initially, I created this program to convert GPS coordinates to a map I could print out--so I could search for geocaches without a GPS device. Then I updated it so that a person can pick a spot on the map, get coordinates and enter those coordinates in another page of mine where I can associate a phoon photo with its location on Earth. Try the country links in the green box. (Last maintained in early 2000s?)