Senior Full Stack Software Architect and Developer
- Senior full stack software architect and developer with over 27 years experience, specializing in databases, web services/applications, e-commerce / electronic payments, technical writing, type systems and programming language design.
- Expert in relational databases and SQL (several versions); experienced in Aurora, PostgreSQL, MySQL, MS SQL Server, Oracle, SQLite, and stored procedures.
- Active in open source and DBMS communities, prolific module developer.
Benevity - Senior Software Developer (2018.04-2023.01)
Benevity is a Canadian software developer that is the global leader in corporate purpose software as a service, used by 650+ client companies, including many iconic brands, empowering their people to take social action on causes they care about, and has processed over 7 billion dollars in donations, as of 2022.
- My work focused on core applications including "Platform" (4 years), which is an API service written in Java 8+ using Spring frameworks plus Aurora MySQL back-end, and "Spark" (1 year), which is a client-facing web app written in PHP 7+ using alternately Drupal and Laravel frameworks plus Aurora MySQL back-end; I also worked on "Versaic Grants", which is a client-facing web app written in C# with a MS SQL Server back-end.
- Satisfied very demanding standards of big name clients such as Apple/Microsoft/Google/Amazon, helping Benevity's 98% client retention rate.
- Part of team that launched new headline Platform+Spark feature empowering "peer matching", so a client employee could automatically match donations to their favoured cause made by their coworkers.
- Took ownership for paying tech debt in Platform, greatly improving its security, making it easier to maintain. Featured updating to latest versions of third-party deps, refactoring usage of first-party libs to reduce coupling, reworking Maven/Gradle build systems.
- Took ownership of Java coding standards enforcement using on Checkstyle tool, by customizing Benevity Checkstyle config with updated rule sets, including hand-crafted custom rules, integrating with Maven/Gradle build systems and IntelliJ IDE, customizing reusable IntelliJ code formatter config to complement it, updating Platform code for conformity, writing docs and giving support for their use. This led to Platform being much easier to develop for, made regular manual code reviews easier as they could focus on logic and not style issues.
- Explored process to upgrade Versaic Grants from .NET Framework to modern .NET 5+.
- Documented how to setup Versaic Grants dev environments so new hires could onboard quickly.
- Overhauled Spark's Drupal-based volunteering reporting system to scale orders of magnitude better, giving results in seconds for larger data sets that before had either taken minutes or failed entirely.
- Part of 3 person "tiger team" which evaluated targets for migration of Spark from legacy PHP Drupal framework, picking Laravel.
- Upgraded automated tests of Spark and other apps to newer PHPUnit, making them earlier to develop and improving their security.
- Performed code reviews and provided other assistence to my peers.
- Joined multiple Architectural Decision Record (ADR) processes, including taking part in a focus group on favoured app languages, and including taking leadership/ownership for ADR on favoured relational DBMS.
- Consulted for analytics team to help with PostgreSQL upgrades and performance improvements.
- Technologies used: Amazon Aurora MySQL, PostgreSQL, SQL Server, Amazon Linux, Docker, Jenkins, Git, Java 8/17, Spring Boot / Framework, JUnit, Tomcat, other Java libs, PHP 5/7, Drupal, Laravel, Symfony, PHPUnit, other PHP libs, C#, Node.js, Maven, Jenkins, Checkstyle, IntelliJ IDEA, MS Visual Studio, JIRA, Stash, Confluence, Asana, more.
HarmonIQ Health Systems Corporation - Independent Contractor (2015.02-2018.03)
HarmonIQ Health Systems Corporation (nee https://harmoniqhealth.com) was an American software developer that delivered comprehensive solutions for health care quality, access, and outcomes through clinical workflow and analytics tools. Previously Database Consulting Group (nee https://databaseconsultinggroup.com).
- I was the second main developer for the National Pollen Database (NPDB; nee http://www.nationalpollen.com) written in C#, where collectors host accurate pollen and mold data so physicians and others can better care for people suffering asthma etc. I added major features, such as tracking provenance of allergen data, generic support for importing multiple formats (MS Excel, HTML, PDFs, etc) with various methods (email, web servers, file system, etc) and extracting their data (species, count, date, location, etc). NPDB had 2 main parts, first being an automated task for importing data, and second being a REST API for other apps to query the database.
- Added a feature to Asthma Ally (nee http://www.asthmaally.com).
- Made several enhancements and bug fixes to Dataphor (https://github.com/dataphor) written in C#, an open source database-centric application development platform.
- Contributed to a large medical data migration project, featuring the documentation and implementation of HL7 Message output.
- Regular contributions to HL7 Clinical Quality Language (CQL) standard (https://github.com/cqframework) and ELM, open source reference implementation (https://github.com/DBCG) written in Java, example CQL libraries/measures, testing, and user documentation, FHIR and QDM.
- Gained considerable knowledge and experience about medical industry standards and proper handling of Protected Health Information (PHI).
- Worked using formal Scrum processes.
- Technologies used: .NET/C#/VB, Java, MS Visual Studio, MS SQL Server 2014-2016, IntelliJ IDEA, Postman, Microsoft Azure, Oracle Database 11g, PostgreSQL, HL7 Messages, CQL and ELM, UCUM, Entity Framework 6, S22.Imap, Excel Data Reader, HTML Agility Pack, Visual Basic for Applications, Gradle, Maven, TestNG, Git, Subversion, JIRA, Confluence, Dataphor/D4, CQL Ruler/Runner, Windows 8, Windows Server on AWS, VMWare Fusion.
- Certifications obtained: HIPAA Awareness, HIPAA Security.
ChargeSmart / VeriFone / TIO Networks - Senior Software Design Engineer (2011.02-2014.10)
ChargeSmart (nee http://www.chargesmart.com) is a web-based e-commerce business allowing credit card funded bill payments to be made easily over the internet to utilities or other billers that otherwise don't support them. ChargeSmart was a startup, then was owned by VeriFone, and then by TIO Networks (then by PayPal).
- I was the third core member of a software developer team of 8+ responsible for chargesmart.com, written in Perl, a bill payment website with thousands of daily transactions and a million-plus users. Became primary maintainer after 6 months when prior developers moved to new projects.
- Made regular engineering contributions to chargesmart.com, in design, coding, documentation, reviews, testing, and reporting.
- Created new features and enhancements, including payment processor migration, AMEX support, admin reports, backup procedures, related partner sites, and more.
- Gained considerable knowledge and experience about the payments industry and card processing including risk management.
- Primary release manager of chargesmart.com for over a year, performing production releases, including QA and review of code commits, code releases, schema changes, and release announcements.
- Designed and implemented the PostgreSQL database for a payment site built over VeriFone's SAIL micro-merchant service.
- Mentored co-workers in various aspects of chargesmart.com and related projects, providing initial training, and writing process and procedure documentation.
Traveller's Inn (TI) - Web Developer (2006.03-2009.07)
Traveller's Inn was a chain of about 10 hotels around Victoria, BC.
- I was primary technical architect and developer for multiple complex web applications, reporting directly to TI's webmaster and later, directly to the TI's owner. Collaborated in development with the webmaster and other staff, who mainly handled the visual design work while I handled mainly architectural design and implementation. All applications were MVC, were Unicode-savvy, used CSS, and were widely browser-compatible; they all ran on a Linux environment using Apache 2 and Plesk.
- The largest project is HotelsMotels.com (HM), a worldwide directory of businesses that would be of interest to travellers, with coverage for at least 30,000 distinct locations. For listed hotels, visitors can check room availability directly from the HM site using an affiliate network, and then book available rooms. Rewrote HotelsMotels.com from a mostly static site with some PHP to a dynamic Perl plus MySQL database-backed site with a lot of additional features. Added full searching capabilities. Added facility for staff to manage the new website. Added facility for visitors to submit businesses to the directory, or to leave business reviews, and for a staff member to approve those additions. Project involved both up-front ETL from legacy directory (MS Access), and recurring ETL from affiliate network.
- Another feature project is BidOnStay.com (BoS), which let visitors book hotel rooms at the Traveller's Inn, for any available hotel or time period, by "bidding" with a desired price per night; if over a hidden threshold, they can then book the room for that price. Created BidOnStay.com as a new project, in Perl. BoS talked to the affiliate network directly behind the scenes, being a front for it, and used no local database of its own.
- Created new project VictoriaAttractions.com, in Perl.
- Worked on various other projects, some of which involved data mining or ETL.
Anthony Macauley Associates (AMA) - Application Developer (2000.09-2003.05)
Anthony Macauley Associates (http://gx.ca) is a Canadian software developer that creates and implements product solutions designed for the needs of departments and agencies at all levels of government.
- I was one of the team members programming AMA's flagship product GX (a government-level financial management system) using Oracle 8, FoxPro 5, Crystal Reports. Involvement had some focus on the portions dealing with Crystal Reports.
- I was one of the main developers that maintained AMA's QA/ticket-management system, which was a FoxPro 6 application.
- I wrote programmer and user documentation. Performed system testing and QA procedures. Became learned in various government financial processes.
British Columbia Buildings Corporation (BCBC) - Intranet Developer (1999.08-1999.12)
British Columbia Buildings Corporation (nee http://www.bcbc.bc.ca) was a government agency that managed public lands and properties. Note that BCBC was later renamed to Accommodation and Real Estate Services (ARES), part of Shared Services BC.
- Deployed and maintained the corporate Intranet using IIS, SQL Server ASP (VBScript), Perl, CSS.
- Rewrote a small message-board web application, in Perl.
- Some troubleshooting and user assistance.
- 2015.09-2016.08 : A contract project using Perl, NGINX, nginx-rtmp-module, MySQL 5, Redis, Ubuntu, Starman, Dancer, Moose, DBI, DBIx::Class, and Perl modules for talking to various network service APIs such as email, social networks, and image processing. This work mainly concerned adding features and fixes to a Perl application created by a previous developer. This had 2 main parts; the first part provided a REST API for user accounts, contacts, and shared events, consumed by Android/iOS applications to facilitate media sharing; the second part provided background workers for asynchronous tasks, assigned via Redis queue. This work also concerned setting up and helping test the NGINX-based Media Streaming Server.
- 2010 : A contract project using PostgreSQL 9.0, Apache 2.2 with FastCGI, Perl 5.12, and Perl modules such as Catalyst 5.8, Template::Toolkit 2, DBI, Moose, and LWP. This involved building from source and administering said tools, in a mirrored development (Mac OS X) and production (CentOS) environment, as well as creating multiple OS and DBMS users and designing for security. The project code had 2 main components which are data processing / ETL daemons (that gathered data from remote sources) and a web application to control and monitor them, all centered around the database. This work incorporated and updated older work by other developers.
- 2003-2006 : Various smaller contracts for multiple clients: mostly PHP and MySQL.
- 1998-2001 : Camosun College (https://camosun.ca): tutored groups (of 10-20) and individuals of first year students in programming Perl and assisting them in understanding various lab assignments.
- 1999.05 : Victoria Immigrant and Refugee Centre Society (https://www.vircs.bc.ca): converted print (PageMaker) publication "Voices" into HTML format using text, image editors, Perl.
- 1998.08 : Pacific Forestry Centre (https://nrcan.gc.ca/science-and-data/research-centres-and-labs/forestry-research-centres/pacific-forestry-centre/13489): wrote Perl scripts to convert data about forest pests from a Windows 3.1 CD to the format used by a new web-based program.
- 1996-1997 : Columbia Bible College (Abbotsford, BC; https://columbiabc.edu): member of 3-person Computer Committee: managed student computer lab having 4-6 Windows 3.1 PCs plus a laser printer; assisted students with their own computers; tasks included setup, maintenance, troubleshooting, training; transcribed student documents.
- 1996 Summer : Institute of Ocean Sciences (https://science.gc.ca/site/science/en/educational-resources/marine-and-freshwater-sciences/institute-ocean-sciences): wrote a Pascal program to convert river temperature sensor data between formats; created a web image map and another web page.
- 1995-Present : Fruit Trees and More (https://FruitTreesAndMore.com): designed and built relational databases for inventory and orders using FileMaker Pro; setup web site; managed office computers and network; other support and training.
- 1992-Present : Various technical support activities for multiple users, both in person and by telephone or email, including installation and maintenance of computers, networks, and software; provided training to individuals and groups; performed data entry and office assistance; both MS Windows and Macintosh.
Muldis Database Projects (2002-Present)
Created a set of new database projects that are intended to bring significant advances to the database software industry in general, in a manner expressing both idealism and pragmatism; they are continuing to be developed under the name of Muldis Data Systems (https://muldis.com); see GitHub (https://github.com/muldis) for the latest versions.
- Muldis Object Notation (MUON) - Source code and data interchange format.
- Muldis Data Language (MDL) - Relational database application programming language.
- Muldis Reference Data Tools: Java - Reference implementations of Muldis Data Language, Muldis Object Notation, and related tools.
- Muldis Reference Data Tools: .NET - Reference implementations of Muldis Data Language, Muldis Object Notation, and related tools.
- Set::Relation - A relation data type for Perl - usable now.
Other Perl Modules (1999-2006)
Created a number of other Perl modules that are not concerned with databases, but mostly with web applications, and are all released on CPAN (https://metacpan.org/author/DUNCAND); they are all functional now but there are currently no plans to develop them further.
- CGI::Portable - Data-driven web application development framework.
- HTML::FormTemplate - Data-driven HTML form and report generator.
- Locale::KeyedText - Refer to user messages in programs by keys.
- File::VirtualPath - Portable abstraction of a file/dir/url path.
- HTML::EasyTags - Make well-formed XHTML or HTML 4 tags, lists.
- Data::MultiValuedHash - Hash whose keys have multiple ordered values.
- CGI::MultiValuedHash - Store and manipulate url-encoded data.
- Class::ParamParser - Provides complex parameter list parsing.
Perl and Database Communities (2000-Present)
Active and vocal in the worldwide Perl community for years, with 100+ individuals, and in some database communities to a lesser extent, in many ways besides having created modules on CPAN.
- 2005-Present : Regular contributions to the central Raku (https://raku.org) programming language design and implementation efforts, including discussions on the perl6-language email forum, making edits to the official Raku language specification, writing Raku code for the common test suite, testing Pugs and Rakudo.
- 2000-Present : Regular contributions to Perl (https://perl.org), testing and reporting bugs, making suggestions, for the Perl implementation, and various CPAN modules/frameworks such as DBI, Moose, and Catalyst.
- 2009-Present : Co-maintainer of the DBD::SQLite (https://metacpan.org/dist/DBD-SQLite) Perl module on CPAN.
- 2003-Present : Regular involvement in the SQLite (https://sqlite.org) Users email forum, both assisting users with SQL questions and contributing design suggestions (some were implemented) or bug reports to SQLite itself.
- 2008-Present : Participated in the Google Summer of Code 2008, 2009, 2010 (https://summerofcode.withgoogle.com) as a mentor under The Perl Foundation (https://perlfoundation.org), so far mainly by submitting feedback on student project proposals.
Presentations, Papers, and Recognitions
- 2010.07 : Recognized by name in the book "Database Explorations: Essays on The Third Manifesto and Related Topics" (Trafford; ISBN: 9781426937231), by prominent authors C.J. Date and Hugh Darwen; see https://www.dcs.warwick.ac.uk/~hugh/TTM/Database-Explorations-revision-2.pdf, especially chapter 26.
- 2008.07.23 : O'Reilly Open Source Convention 2008 (OSCON; Portland, OR; nee http://en.oreilly.com/oscon2008): "Muldis D: Portable Databases at Full Power" (nee http://en.oreilly.com/oscon2008/public/schedule/detail/2700).
- 2008.07.20 : PDXPUG/PostgreSQL Day (Portland, OR; was https://pugs.postgresql.org/node/374): earlier version of same talk as for OSCON 2008.
- 2006-2009 : Recreational Computer Science Society (Victoria, BC; https://groups.google.com/g/reccompsci); giving a few presentations or discussions (to 6-10 people) concerning databases or Perl.
- 2002-2013 : Victoria Perl Mongers (Victoria, BC; https://www.pm.org/groups/357.html): managing the group web site, giving a couple of presentations or discussions (to 6-10 people) on Perl-related topics like using databases or XML, and improving reusable modules with good practices suitable for CPAN release.
- 2000-2002 : Victoria Macintosh Users Group (Victoria, BC; https://vmug.bc.ca): giving a live tutorial/presentation on designing and implementing a genealogy relational database at the June 2002 monthly meeting (to 150 people), wrote several feature tutorials for the monthly MACtalk publication, including: creating relational databases with FileMaker Pro (3 parts), designing a genealogy database, getting an internet domain name, setting up Eudora filters, and several smaller articles.
- Camosun College (Victoria, BC; https://camosun.ca), 1997-2001: Computer Systems Technology (Co-op designation), Software Engineering, Computer Programming.
- The Reger Group (Victoria, BC; http://regergroup.com), 2003.07: "Independent Employment: An Introduction to Entrepreneurship".
- Certifications obtained: HIPAA Awareness, HIPAA Security (2017).
- Attended multiple technical conferences.
Significant or Expert Task Skills or Experience
- Requirements gathering / system analysis
- User interface design / ease of use
- Data definition / data modeling
- Technical architecture
- Technical Writing
- Testing / QA, both unit and integration
- Scalability, Distributed Systems
- Optimization for speed, memory use, etc
- Portability across platforms and browsers
- Agile Methodologies and Scrum
- Supporting / Training
- MVC design pattern
- Multi-tier architecture
- Client-server architecture
- Service-oriented architecture (SOA)
- Relational databases
- Extract, transform, and load (ETL)
- Online transaction processing (OLTP)
- Electronic Payments
- Financial Databases
- Medical Databases
- Protected Health Information (PHI) and HIPPA
- Web applications
- Web services
- IaaS, PaaS, SaaS
- Desktop GUI applications
- Command-line applications
- 2D and 3D graphics
- Search-engine optimization
- Affiliate networks
- Programming language design and implementation
Programming Languages and Markup
- SQL - ANSI/ISO and vendor flavors, TSQL, PL/SQL, PL/PgSQL
- C#, VB, .NET, .NET Core, .NET Framework
- Perl, Perl POD
- regular expressions
- XML, XSLT
- Unix command line, shell scripts
- C, C++
- FoxPro 5, 6
- VBScript/ASP, Visual Basic
- Turbo Pascal (Mac OS)
- HL7 Clinical Quality Language (CQL) and ELM
- HL7 Messages
- D4 (Dataphor)
- MASM (assembly)
- OpenGL, Lisp (Scheme), Haskell, POV-Ray, Logo (turtle graphics)
- Python, Ruby, Objective C, Tutorial D, not-SQL relational algebra
Database Management Systems, Related Tools
- MS SQL Server
- FoxPro built-in DBMS
- FileMaker Pro
- MS Access
- ODBC / JDBC
- MS SQL Server Management Studio, Oracle SQLDeveloper, MySQL Workbench, pgAdmin4, pgAdmin3, SQL Plus, Golden, Oracle Developer and Designer, ERwin, phpPgAdmin, phpMyAdmin
- Knowledgeable of various other DBMSs
Developer Tools / Automation / Version Control Systems
- IntelliJ IDEA
- MS Visual Studio
- JIRA, Asana, Confluence, Trac, RT
- Stash, GitHub
- Stackato / Cloud Foundry
Other Software / Networks / Protocols
- Apache Httpd, NGINX, IIS, Starman, Perl-based server
- REST APIs, FastCGI (external), mod_perl, PSGI, CGI, HTTP proxy
- telnet, ssh, VNC, http, smtp, s/ftp, rsync, irc
- Linux, UNIX, Windows NT, Macintosh web hosting
- WINE, VMWare, Parallels, Virtual PC