I’ve been working with computer technology for a long time. A few years ago, a recruiter for a consulting firm asked me to prepare a brief description of every project I’ve ever worked on.
I was surprised by how long it was. It turns out I’ve worked on many different things, using many different technologies – sometimes as a solo developer, sometimes as a team member, and sometimes as team leader.
I’ve now updated that list, and what follows is pretty much every project I’ve worked on in my software career.
Overview
I have designed and implemented object-oriented software systems in a variety of environments, including C#, VB.NET, Visual Basic, C++, and Java under Microsoft Windows, Unix, and VAX/VMS operating systems.
I have developed web sites, graphical user interfaces, and distributed applications. I also have a wide variety of other skills, which include systems analysis, network management, systems engineering, project technical leadership, software project management, and technical writing. I have designed and developed object-oriented systems, distributed applications, embedded database applications, state machines, and simulation software.
My formal education includes Bachelor of Science and Master of Science degrees in Computer Science. I spent a few years working toward a Ph.D. in Computer Science, but ultimately decided research software development was not for me. It was too focused on writing scraps of code to test ideas. Having spent a decade in industry, I prefer to build solid tools that other people can use to get stuff done in the real world.
I worked at Thomson Reuters for eight years as a Senior Software Engineer/Team Lead on the Legal Tracker corporate matter management and billing system, running a team that builds back-end facilities such as file storage, full-text search, and identity management.
Technologies
(Note: This lists practically every relevant technology I’ve ever touched. In each section, the lead items tend to be the ones where I have significant or recent experience.)
Database: MS SQL Server, MS Access, MySQL, Postgress, DEC RDB, Oracle, Inprise Interbase, JDBC, ADO.NET, ADO, dynamic and embedded SQL, Elastic Search,
Languages: C#, C/C++, Python, PowerShell, VB.NET, Visual Basic, Java, PHP, DCL scripts, Unix scripts, R, Perl, Fortran, Pascal, Modula-2, Icon, Lisp/Scheme, BLISS, Assembly (PDP-11, VAX, NS32032, Intel 8086), Sun Java 2, JYACC JAM.
Web Technologies: ADO.NET, ADO.NET MVC, Owin/Katana HTML, CSS, WordPress, JavaScript, JQuery, script.aculo.us, YUI, X, Java Servlets, FrontPage.
Networking Technology: Setup and programming for TCP/IP and DECnet.
Other Libraries and Packages: NServiceBus, RabbitMQ, Json.NET, Elastic Search, Unity, pandas, COM/ActiveX, Saphira, MäK VR-Link, EDIdEv.
Development Tools: Visual Studio 2010-2022, git, TFS, PyCharm, Rider, MS Visual Basic, MS Visual C++, Borland JBuilder Enterprise, Sun Java 2, Visual Source Safe, Digital Visual Fortran, R Studio.
Operating Systems: Microsoft Windows, LAMP Stack (Linux, Apache, MySql, PHP), DEC OpenVMS operating system, various Unix (BSD 4.2/4.3, AT&T, Umax, Solaris).
Software: MS Access, Excel, MS Outlook, Lightroom, Photoshop, PowerPoint, MS Project.
Hardware: I build my own PCs. I’ve installed and run a Sun Ultra Enterprise 450 Server, DEC VAX 3000 and 750 series systems. I’ve worked with network cables and hubs, video disk recorders, video editing consoles, WiFi systems and routers, home automation, and an ActivMedia Pioneer 2 AT robot.
Other Skills: I’ve helped prepare project proposals, including budgets, and I’ve worked with lawyers in the contracting department to address technical/legal issues. I’m an amateur photographer, and a pretty decent non-professional writer.
Education
- Master of Science, Computer Science, Illinois Institute of Technology.
- Bachelor of Science, Computer Science, Management Minor, Illinois Institute of Technology, Graduated with Honors.
- Class work towards a Ph.D. in Computer Science, Illinois Institute of Technology.
- Seminars: Supporting, Troubleshooting, and Optimizing Windows NT (1999), Oracle 8i Database Administration (1999), Operations Management (1990).
Experience and Projects
Ivanti (formerly Cherwell)
ISM/CSM Convergence
Role – Senior Software Engineer
Key Deliverables – Converge features of Cherwell and Ivanti Service Management projects
Worked on one of several teams converging features of both Service Management projects.
Technologies Used: C#/.NET, JavaScript, Azure DevOps.
ISM/CSM Convergence
Role – Senior Software Engineer
Key Deliverables – Misc. Stories and Bug Fixes
Worked on a variety of stories and bug fixes for Cherwell’s flagship IT Service Management product.
Technologies Used: C#/.NET, JavaScript, RabbitMQ, Jira.
Thomson Reuters
Corporate Legal Tracker Product (formerly Serengeti Tracker)
Handoff
Role – Senior Software Engineer
Key Deliverables – Hand Off the Corporate Legal Tracker Product to Offshore Team
In 2019 Thomson Reuters reorganized into two different companies and laid off 3000 people including the entire onshore team for the Corporate Legal Tracker Product. I was part of the team that was involved in documenting the product design and training the offshore team that would replace us. We also finished off some minor tasks on several software projects.
Technologies Used: Jive Intranet, PowerPoint, LucidChart, C#/.NET, SQL Server, TFS/git.
Identity Project
Role – Project Lead.
Key Deliverables – SAML2 and OpenID Connect identity functionality.
Led a team of developers that integrated SAML2 and OpenID Connect into the Corporate Legal Tracker Product, meeting a critical customer deadline. The system is fronted by an Azure Active Directory B2C tenant, which is responsible for authenticating passwords and SAML2 assertions. It then sends a secure JWT claims token to the Legal Tracker website, where it is authenticated by Owin/Katana middleware and then matched to entries in the SQL-Server user store. Existing users are migrated into the new system using email addresses to find and convert their records to the new system, updating the user store as necessary.
Technologies Used: C#/.NET, Azure Active Directory B2C, Owin/Katana, SQL Server, SmartSheet, LucidChart, TFS/git.
Azure Storage Migration Project
Role – Project Lead.
Key Deliverables – Customer file storage and search migrated to Azure.
Led a team of developers who built a system to migrate customer file storage and search from a colocation data center to the Azure cloud. The system can migrate a customer document database into the cloud by running NServiceBus sagas to build the Azure document store and search indexes while simultaneously continuing to maintain the colo document store and search index. When the two document stores are in sync, it cuts over to the cloud store, and the colo store can be shut down. The system is highly robust and can run for weeks if necessary, surviving server crashes, network outages, and software deployments. Using our system, the operations team was able to migrate all customer files to the cloud, without customers noticing any disruption to service.
Technologies Used: C#/.NET, Azure Storage, Azure Search, SQL Server, NServiceBus, TFS/git.
PowerShell Cmdlets Project
Role – Senior Software Engineer.
Key Deliverables – A framework for using PowerShell to configure and control a Legal Tracker product instance.
Implemented a framework project and PowerShell module to make it easier for the team to add PowerShell cmdlets to perform system configuration tasks. The framework establishes appropriate database connections, sets up the security framework, and supports command-line completion.
Technologies Used: C#/.NET, PowerShell SDK, TFS.
Shared ID Project
Role – Senior Software Engineer.
Key Deliverables – A distributed shared ID system that would scale to many data centers.
Engineered a fundamental change in how the Legal Tracker product allocated internal database object IDs to ensure the efficient generation of IDs across multiple data centers. Historically, IDs are issued from a fixed-size pool of 31-bit integers. This extends that mechanism to allow automated distribution of batches of IDs in a hierarchical system spanning from distributed data centers to local caches. Backed by hundreds of unit tests, the system deployed live without interruption to customers and has run for years without incident.
Technologies Used: C#/.NET, SQL Server, TFS.
Redis POC
Role – Senior Software Engineer.
Key Deliverables – A proof-of-concept of Redis caching in the product ORM.
Incorporated Redis cache and message broker functions into the ORM layer. Development included a wrapper that securely separates data between customer companies and between users within those companies, as needed. Caching could be specified on a per-business-object-class basis, in one of two modes: data for the objects could be directly cached by primary key in the Redis store, or data could be cached locally in server memory, with invalidation messages transmitted through the Redis publish-subscribe capability.
Technologies Used: C#/.NET, Redis, StackExchange.Redis client library
Performance Team
Role – Senior Software Engineer.
Key Deliverables – Various performance enhancements.
Worked with a team of six to improve product performance in key pain points by simplifying user workflow, improving parallelism, optimizing SQL queries, and uncovering code hotspots. Discovered that a mechanism used by the ORM layer to validate columns was running in quadratic time and could, under rare conditions, require cubic time. This was fixed by memoizing search outcomes.
Technologies Used: C#/.NET, SQL Server, NServiceBus, TFS.
Framework POC
Role – Senior Software Engineer.
Key Deliverables – Proof of concept implementation of a new product.
Helped people from another product build a proof-of-concept re-implementation of their product using the framework from ours. This involved far more discussion than actual coding.
Technologies Used: C#/.NET, SQL Server, TFS.
Billing Report
Role – Senior Software Engineer.
Key Deliverables – Report on billing efficiency.
Worked with a product manager to build a sophisticated report showing how much money customers were saving by using our product.
Technologies Used: C#/.NET, SQL Server, TFS.
UK Data Center Project
Role – Senior Software Engineer.
Key Deliverables – Stood up the product in a second data center.
Worked on a team making our product support instances in multiple data centers, including database partitioning, timezone issues, and sending synchronization messages between data centers.
Technologies Used: C#/.NET, NServiceBus, SQL Server, TFS, Version One.
Task Code Alerts Project
Role – Senior Software Engineer.
Key Deliverables – Modify the billing management system to allow users to specify upper limits to spending based on task codes.
Worked on a team implementing task code alerts setup, computation, and reporting.
Technologies Used: C#/.NET, SQL Server, TFS, Version One.
Custom Task Codes
Role – Senior Software Engineer.
Key Deliverables – User-define task codes.
Worked on a team modifying the billing management system to allow users to specify custom hierarchical task codes for invoice line items and generating reports.
Technologies Used: C#/.NET, SQL Server, TFS, Version One.
Matter Uploader
Role – Senior Software Engineer.
Key Deliverables – Ability to bulk-load legal matters from a user file.
Worked on a team to add the ability for users to bulk load legal matters from a CSV file, with full enforcement of all business rules and detailed error reporting.
Technologies Used: C#/.NET, SQL Server, TFS, Version One.
Freelance Consulting
Benefits Enrollment Client
Employee Benefits Enrollment Exporter
Role – Consulting Software Developer.
Key Deliverables – A complete user-configurable vendor export system.
A client had built an employee benefits enrollment website available as a service to their client employers. The site would accept data from HR staff and employees at each company about benefits elections, and store the data in tables in an SQL server database.
My involvement began with writing SQL queries to extract that data, then feeding the data into MS Access or Excel so the data could be formatted as CSV files which could be sent to the benefits vendors to let them know which employees were enrolled with which benefits. Each vendor had its own custom formatting requirements, and the process of mapping the website answers to the vendor’s benefits account structure varied from one client company to the next.
I implemented a few dozen exports over the years, and during that time I evolved the system into a general-purpose export utility that could generate output files in three formats: Fixed-field, CSV, and a HIPPA-compliant 834 EDI enrollment transaction. It could handle output cardinality as record per employee, record per participant (i.e. including benefits), and record per benefit election, and could generate synthetic null records to affirmatively indicate the absence of a benefit.
By the time I was finished, most exports no longer required software engineering effort. Members of the implementation team could be trained to use the website to design export files using web forms. Many special cases could be handled with simple scripting code in VBscript, and a separate scripting facility was available for complex benefit account structures.
The system was eventually used to develop hundreds of defined exports, which were used to generate close to 100,000 export files.
Technologies Used: ASP, Visual Basic, SQL Server, VB Unit, EDIdEv, TFS
IDI Healthcare Systems
Role – Consulting Software Developer.
Key Deliverables – MS Access Plugin.
Developed a heuristic search to generate randomized groups for lab experiments. Implemented in Visual Basic for use within MS Access, it queried a database of lab specimens and generated random subsets, which were gated according to a statistical test. When sufficient subsets were selected, a different statistical test was used to select the final specimen pool.
Technologies Used: MS Access, VB, ADO, and SQL Server, SourceSafe.
Miscellaneous WordPress Sites
Role – Website Developer.
Key Deliverables – WordPress websites and blogs.
Build an assortment of WordPress sites and blogs for myself and other people. I host some of these on a Virtual Private Server that I run.
Technologies used: WordPress, theme frameworks (Hybrid, Headway, Genesis), plugins (W2 Total Cache, Genesis Extender, Cloudflare, Google Analytics, Super Socializer, Woopra, Jetpack, Yoast SEO), and management tools (ManageWP, cpanel/WHM), LAMP Stack (Linux, Apache, MySql, PHP).
Chi-Town Daily News
October 2007 – February 2008
Role – Volunteer Community Reporter.
Key Deliverables – Reported stories.
Reported on local police meetings, took pictures at events.
Alion Science and Technology
(Alion Science and Technology was spun off from the IIT Research Institute in 2002.)
Train Simulator Port to Windows
Role – Senior Software Engineer, Transport Technology Division.
Key Deliverables – Train simulator ported to Windows from legacy technology.
Provided technical leadership to the train simulator project to complete their port of 250,000 lines of working train simulator code from VAX/VMS to Windows. This technology was deployed to customers, including the Federal Railway Administration.
Wrote in C++, a communications layer to allow replacement of serial port communications with TCP/IP connections, while preserving the original communications semantics. Developed a data acquisition system which included an embedded web server to allow remote queries of simulation activity.
Designed and helped implement a new user interface. Designed and implemented adaptations to the new operating system, including simulation of VAX/VMS services under Windows.
Recommended off-the-shelf hardware and software components.
Technologies used: Visual Basic, C++, ActiveX, Fortran, and TCP/IP Sockets, SourceSafe.
IIT Research Institute
ELF Project
June 2001 to August 2001,
Role – Research Programmer/Analyst, Electromagnetics Division.
Key Deliverables – Document Management.
Evaluated commercial document management software and recommended a system for internal deployment.
Post-Run Analyzer
Role – Research Programmer/Analyst, Transport Technology Division.
Key Deliverables – Graphical Review Tool.
Created a graphical review tool, adapted from a graphical data display used in a technology demonstration, for use in analyzing the performance of students on a train simulator.”
Technologies Used: Visual Basic, ADO
Medbot Project
Role – Research Programmer/Analyst, Technical Lead, Telemedicine Division.
Key Deliverables – Software System, Multi-Threaded Robot Control Program.
Acted as technical lead, working with electrical and mechanical engineers, to design and implement the software system for a concept demonstration of a mobile robotic sensor. Developed a multi-threaded robot control program in Visual C++ using MFC and Windows Sockets, including code to control an ActivMedia Pioneer 2 AT robot using the Saphira library. Designed and implemented a datagram protocol over UDP to communicate with the control console. Also implemented the control console software in Visual Basic, including graphical and digital displays of robot status, using a VB Winsock control for communications.
Technologies Used: Visual C++, Visual Basic, MFC, Windows Sockets, VB Winsock Control, COM Server, Saphira Library, ActivMedia Pioneer 2 AT robot
IMED Tools Project
July 1999 to January 2001
Role – Research Programmer/Analyst, Telemedicine Division.
Key Deliverables – Search Engine.
Designed and implemented an experimental search engine for medical documents using a relational database to maintain the index. Prototyped in Java using Oracle 8 under Solaris 7 and ported to MS Windows using the JBuilder 4.0 IDE. Developed a Visual Basic program using VB Scripting objects to scan a document collection, then using COM Automation to invoke Microsoft Word to load each document, parse it, and construct a format-neutral intermediate XML document using Microsoft’s XML DOM parser (MSXML). These documents were queued to a Java-based server, which used the Apache Xerces XML DOM parser to extract text and use SQL commands via JDBC to build an index in an Inprise Interbase relational database.
The server included a Java Servlet that accepts an HTTP POST request using XML-formatted query strings and generates dynamic SQL queries to retrieve and sort the document descriptions to build an XML-formatted response. Other query methods included a Java class library for direct JDBC queries, and a simple CORBA interface through a VisiBroker ORB.
Also included a web site implemented using JSP that would accept user queries and generate a direct Java query, an XML query, or a CORBA query and format the response in HTML for display to the user. Both the server and web site were hosted under Inprise’s AppServer or Allaire’s JRun 3.0.
Technologies Used: Solaris 7, MS Windows, Oracle 8, Inprise Interbase, SQL, JDBC, Java, Servlets, JSP, JBuilder 4.0 IDE, Visual Basic, VB Scripting Objects, COM Automation, HTML, XML, MSXML, Apache Xerces XML DOM Parser, CORBA, VisiBroker ORB, MS Word, Inprise’s AppServer, Allaire’s JRun 3.0
English-Welsh-Scottish Railway Proposal
Role – Research Programmer/Analyst, Transport Technology Division.
Key Deliverables – RFP Response.
For a proposal, worked with contract lawyers to create a requirements document and statement of work for a graphical review tool to analyze the performance of students on a train simulator.
Train Simulator Port to Windows
Role – Research Programmer/Analyst, Transport Technology Division.
Key Deliverables – Simulator Transition.
Supervised the requirements and planning effort for a port of the train simulator from VAX/VMS to Windows NT. Included requirements analysis, design, and development.
Technologies used: C++, MFC, ATL, Visual Basic, and Digital Visual Fortran 90.
Windows-Based GUI Project
Role – Research Programmer/Analyst, Transport Technology Division.
Key Deliverables – Unified GUI interface to control the train simulator.
Developed a Windows front-end graphical user interface that allowed for easy configuration and control of IITRI’s VAX/VMS-based train simulators from a unified student workstation. Implemented in Visual Basic, the program used the VB Winsock control to communicate via TCP/IP with a server implemented in C and DCL, running on a VAX/VMS system. It was an integral component of IITRI’s FlexSim line of small-footprint, low-TCO simulators.
Technologies used: Visual Basic, VB Winsock, C, DCL, VAX/VMS, Windows.
CGI Connectivity Project
Role – Research Programmer/Analyst, Transport Technology Division.
Key Deliverables – Windows NT Computer-Generated-Imagery system.
Prototyped a multi-threaded Windows NT Computer-Generated-Imagery system for IITRI’s train simulator, including a C++ program using Windows Sockets to receive TCP/IP UDP messages from the simulator and send motion commands to the embedded Primary Image 3D graphics coprocessors.
Integrated Forward View
Role – Research Programmer/Analyst, Transport Technology Division.
Key Deliverables – Windows NT Computer-Generated-Imagery system.
Prototyped technologies for embedding the simulator forward view in a Windows desktop. Identified, adapted and tested off-the-shelf software technology, including video capture boards, Hummingbird and DEC X-Windows servers, and Wonderware InTouch MMI tools.
Technologies Used: VAX/VMS, Windows NT, C, C++, DCL, MFC, ATL, Visual Basic, VB Winsock Control, Digital Visual Fortran 90, TCP/IP, video capture boards, Hummingbird, DEC X-Windows servers, Wonderware InTouch MMI Tools
Battlefield Acoustic Sensor Project
Role – Research Programmer/Analyst, GACIAC.
Key Deliverables – Small C++ simulation program.
Participated in the development of a simulator for studying the deployment of acoustic sensors in a battlefield environment. Implemented in C++ as a Windows console application, the system simulated the communication topography of an array of air-dropped sensors.
Technologies Used: C++
Smart Mortar Simulation
Role = Research Programmer/Analyst, GACIAC.
Key Deliverables – Endgame performance simulation of a smart mortar.
Developed as a C++ application for Solaris, and capable of integrating into the military Distributed Interactive Simulation (DIS) real-time simulation environment using MäK VR-Link, the simulator could simultaneously simulate the flyout and terminal stages of multiple independent munitions.
Technologies used: C++, Unix, MäK VR-Link, DIS.
Track Builder Project
Role – Associate Programmer/Analyst, Transport Technology Division.
Key Deliverables – Track database editor, Operating Procedures.
Developed an automated system to augment construction of a railroad track database. Implemented using Jyacc’s JAM 4 user interface tools to issue SQL commands to a DEC RDB database. Additional Fortran 77 code was used to extend the capabilities of the system. Import and export tools were written in VAX C using embedded SQL.
Implemented a laser disc controller in Visual C++ 1.5 using MFC and the serial port driver interface. The resulting system increased the speed and accuracy of data entry, and reduced operator training requirements. I set up and developed operating procedures for a laserdisc editing system used to create simulation video of 400 miles of urban commuter and transit rail.
This system was deployed for production use in simulators for the Long Island Railroad and the Chicago Transit Authority.
Technologies Used: DEC RDB, Visual C++ 1.5, Fortran 77, VAX C, SQL, Jyacc’s JAM 4 User Interface Tools, Panasonic laserdisc players.
GUI Project
Role – Research Programmer/Analyst, Transport Technology Division.
Key Deliverables – GUI for Train Simulator.
Briefly led the design and development of a graphical interface for IITRI’s train simulator, supervising two programmers. Implemented in DEC C++ using Neuron Data’s GUI and database toolkits. (Cancelled when the end customer cancelled the parent railcar contract.)
Technologies Used: DEC C++, DEC RDB, Neuron Data’s GUI and Database Toolkits.
Proposal Writing
Role – Proposal Editor, Transport Technology Division.
Key Deliverables – Proposals for train simulator projects.
Contributed to, and edited, multiple project proposals with a combined value of approximately $40 million in potential simulator contracts to customers in New York, Europe, Thailand, and India.
Miscellaneous
Periodically consulted by the internal corporate group bringing the Chicago location onto the Internet.
Illinois Institute of Technology
Academic Computing Center
October 1988 to November 1994
Role – VAX and Unix System Manager.
Key Deliverables – Systems management, Utility Software.
Supervised the management and operation of a cluster of VAX/VMS systems and an Encore Multimax with 8 processors running BSD 4.3, supporting 2,300 active accounts belonging to students, faculty, and researchers. Developed utility software in C, Pascal, Icon, Unix shell script, and DCL. Supervised two systems programmers. Responsible for day-to-day account management and troubleshooting, performance tuning, capacity planning, and specification of hardware and software to be acquired or developed. Supervised the development of operator shells, startup procedures, and utility programs.
Designed and implemented a program to monitor Ethernet traffic and record TCP/IP traffic. Implemented in C on the VAX/VMS operating system, including an event-driven scheduler and low-level I/O to the ethernet controller.
Wrote a 140-page user manual.
Co-managed IIT’s Internet presence, including configuration of Proteon routers, DNS servers, mail servers (SMTP, POP3), and Usenet news servers (NNTP). Participated in the development of security policies.
Technologies Used: VAX/VMS, BSD 4.3, C, Pascal, Icon, Unix shell script, DCL, Encore Multimax, Ethernet, TCP/IP, Proteon Routers, DNS Servers, Mail Servers, SMTP, POP3, Usenet News Servers NNTP.
Computer Science Department
October 1988 to November 1994
Role – Software Lab Manager.
Key Deliverables – Managed department computing resources.
Managed a VAX 11/750 running Unix (BSD 4.3) supporting faculty research, several AT&T 3b2 computers, a lab of AT&T 7300 Unix PCs (3b1), and provided support for all faculty PCs running MS DOS.
Technologies Used: Unix BSD 4.2, DOS, VAX 11/750, AT&T 3b2/3b1 computers
Metropolitan Sanitary District of Greater Chicago
Various Times
Role – Oral Board Examiner.
Key Deliverables – Examining for Various IT Positions.
Publications
“Exploring Files-11.” VAX Professional. August 1990, Vol. 12, No. 5.
“VMS Diskquota Synchronization.” The Crime. May 1988, Vol. 2, No.5.
“Printing Across the Network.” with Petersen, Ray. and Stefanek, George. Proceedings of the Digital Equipment Uses Society, Fall 1986, pp. 165-166.