Darren Duncan
Senior Full Stack Software Architect and Developer
Contact
About
- Senior full stack software architect and developer with over 27 years experience, specializing in databases, web services/applications, e-commerce / electronic payments, and technical writing.
- Diploma from Camosun College (Victoria, BC), 1997-2001: Computer Systems Technology (Co-op designation), Software Engineering, Computer Science, Computer Programming.
- Primary languages (minimum 3-4 years FTE each) are Java, .NET/C#, Perl, PHP, JavaScript/TypeScript, SQL, regular expressions, and more; polyglot; learning Python.
- Expert in relational databases and SQL (several versions); experienced in Aurora, PostgreSQL, MySQL, MS SQL Server, Oracle, SQLite, and stored procedures; familiar with non-relational databases.
- Experienced in frameworks Spring/Boot, Hibernate, Entity Framework, Moose, DBI, Dancer, Laravel, Drupal, Node, React, jQuery; learning Vue and Angular.
- Extensive experience in performing the whole application design and development cycle, including requirements gathering, architecting, designing, prototyping, development, coding, unit and integration testing, quality assurance, deploying, production customer support, problem resolution, for both existing and new projects.
- Individual contributor and team player with strong verbal/written communication skills.
- Extensive and ongoing involvement in and contributions to multiple open source communities since 2000, and released my own open-source products.
Professional Experience
Benevity - Senior Software Developer (2018.04-2023.01) - Permanent Full-time - Victoria, BC, Canada - Hybrid
Benevity (https://benevity.com) 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 plus Aurora MySQL, and "Spark" (1 year), which is a client-facing web app written in PHP 7+ using Drupal and Laravel plus Aurora MySQL; I also worked on "Versaic Grants", which is a client-facing web app written in C# with MS SQL Server.
- Satisfied very demanding standards of big name clients such as Apple/Microsoft/Google/Amazon, helping Benevity's 98% client retention rate.
- Part of team launching new headline Platform+Spark feature "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, making it more secure and 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.
- 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, MS SQL Server, Amazon Linux, Docker, Jenkins, Git, Java, Spring Boot / Framework, JUnit, Tomcat, other Java libs, PHP, 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) - Freelance - Orem, Utah, USA - Remote
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 was an automated task for importing data, and second was 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 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 Server on AWS.
- Certifications obtained: HIPAA Awareness, HIPAA Security.
ChargeSmart / VeriFone / TIO Networks - Senior Software Design Engineer (2011.02-2014.10) - Permanent Full-time / Freelance - San Francisco, California, USA - Remote
ChargeSmart (nee http://www.chargesmart.com) was 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, new fee schedules for promotions, admin reports, conversion analytics, auditing, 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.
- Technologies used: Perl, MySQL 5, PostgreSQL 9, Apache+mod_perl, Starman, NGINX, Moose, Dancer, DBI, DBIx::Class, JavaScript, jQuery, Backbone, JSON, cron, rsync, Trac, Subversion, CentOS, Debian.
Traveller's Inn (TI) - Web Developer (2006.03-2009.07) - Freelance - Victoria, BC, Canada - Remote
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) - Permanent Full-time - Victoria, BC, Canada - On-site
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 4 initial/core members of a team of 20+ that created the new product GOL/GTools (a comprehensive fully database-defined web application development tool), which is MVC and used Oracle 8, XML, XSLT, CSS, PHP 4, server-side JavaScript, client-side JavaScript, .NET/C#. Was the initial and primary developer of the PHP portion of the project, which took several months. Wrote large portions of the XSLT and both JavaScript portions of the project, and some CSS.
- 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.
Government of BC - BC Public Service - British Columbia Buildings Corporation (BCBC) - Intranet Developer (1999.08-1999.12) - Internship - Victoria, BC, Canada - On-site
British Columbia Buildings Corporation (nee http://www.bcbc.bc.ca) was a BC government agency that managed public lands and properties. It 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.
Miscellaneous
- 2023 : A contract project using PHP, Composer, Laravel, Eloquent, Blade, MySQL.
- 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 : Government of Canada - Pacific Forestry Centre (https://nrcan.gc.ca/science-and-data/research-centres-and-labs/forestry-research-centres/pacific-forestry-centre/13489): unpaid work experience; 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 Summer : Government of Canada - Institute of Ocean Sciences (https://science.gc.ca/site/science/en/educational-resources/marine-and-freshwater-sciences/institute-ocean-sciences): unpaid work experience; wrote a Pascal program to convert river temperature sensor data between formats; created a web image map and another web page.
Open Source
Muldis Database Projects (2002-Present)
Created a set of new projects intended to bring significant advances to the database industry; 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.
Modules For Web Applications (1999-2006)
Created a set of Perl modules concerned mainly with web applications, released on CPAN (https://metacpan.org/author/DUNCAND); they're all functional but I have 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.
Skill Demonstrations (2023)
Created a set of projects intended more to publicly demonstrate that I have experience with a range of technologies, rather than being intended for actual use in industry, in contrast with my other open source projects. See GitHub (https://github.com/muldis/Muldis_Skill_Demos) for those.
Technologies used: TypeScript, Node.js, Nest.js, Express.js, React.js, Jest.js, JSON, REST APIs / Swagger, MERN stack (modified). Also learning: Python, Vue.js, Angular.
Open Source Community (2000-Present)
Extensive and ongoing involvement in and contributions to multiple open source communities.
- 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 language and implementation, including the Corinna feature set, including discussions on the perl5-porters email forum, and various CPAN modules/frameworks such as DBI, Moose, Catalyst, DBD::SQLite.
- 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.
Education
- Camosun College (Victoria, BC; https://camosun.ca), 1997-2001: Computer Systems Technology (Co-op designation), Software Engineering, Computer Science, 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.
Technical Skills
Significant or Expert Task Skills or Experience
- Requirements gathering / system analysis
- User interface design / ease of use
- Data definition / data modeling
- Technical architecture
- Coding
- Technical Writing
- Documenting
- Testing / QA, both unit and integration
- Maintainability
- Scalability, Distributed Systems
- Optimization for speed, memory use, etc
- Concurrency
- Debugging
- Portability across platforms and browsers
- Security
- Privacy
- 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)
- E-commerce
- 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
- Java, Spring Boot, Spring, Hibernate, JUnit, Tomcat, Selenium
- C#, VB, .NET, .NET Core, .NET Framework, Entity Framework
- Perl, Perl POD, Moose, DBI, DBIx::Class, Dancer, Catalyst
- PHP, Composer, Laravel, Eloquent, Blade, Drupal
- ECMAScript, JavaScript, TypeScript, Node.js, Nest.js, Express.js, React.js, jQuery, Backbone, MERN stack (modified); learning Vue.js and Angular
- regular expressions
- JavaScript/ASP
- Raku
- Markdown
- JSON
- XML, XSLT
- HTML/XHTML
- CSS
- 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
- Aurora
- PostgreSQL
- MySQL
- MS SQL Server
- Oracle
- SQLite
- H2
- Redis
- FoxPro built-in DBMS
- FileMaker Pro
- MS Access
- Dataphor
- mod_plsql
- 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
- GCC
- Gradle
- Maven
- Jenkins
- Docker
- Git
- Subversion
- 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
- WordPress
- telnet, ssh, VNC, http, smtp, s/ftp, rsync, irc
- Linux, UNIX, Windows NT, Macintosh web hosting
- WINE, VMWare, Parallels, Virtual PC