- Senior .NET DeveloperLegality Software2014 - PRESENT
Technologies: C#, SQL, WebAPI, WinForms
- Created a daily backup system for NetDocuments, a remote cloud that doesn't allow deletion (mandated by law for this particular customer).
- Created an extensible system notification application that interacts with the Lexis Nexis TimeMatters application and provides additional information.
- Wrote an application synchronizing the TimeMatters database with legal cases in a few US jurisdictions; the synchronization can be done on a schedule and it allows the lawyers to be automatically notified of new cases, court appointments, and other information. The Windows service part of the application and the front-end systray apps communicate through a combination of UDP (for automatic discovery of the server) and WinAPI.
- Added an application for connecting the phone system with the TimeMatters database, so that the lawyers can automatically get case details when on a call with customers.
- Data Importing and Processing ServerQuadrant.io (Investormill, Inc.) (via Toptal)2016 - 2016
Technologies: C#, TDD, Multi-threading, LINQ, web, zip
- Built high-speed processing of large data files (up to 10 GB).
- Wrote code to split a file in chunks with the additional requirement that the split happens on a line end (since they were line-oriented text files).
- Facilitated multi-threaded processing of large files without running out of memory.
- Processed the data while downloading it so that processing was over in 1m 33s for a file where the download alone took around 1m 27s.
- Made extensive use of unit tests.
- Python and Java DeveloperBank of America Merrill Lynch2015 - 2015
Technologies: Python 2.6, Java 1.6
- Transitioned two internal projects from using SIC codes to NAICS, one written in Python and one in Java. The projects had an original estimate of six months; we managed to finish them in three (I was the only developer on the Java project and also participated in the changes to the Python project).
- Generated new aggregation reports based on risk industry groups and sectors (based on the newly added NAICS codes).
- Added new permissions to enable finer control on who is allowed to make specific changes in the Java project UI.
- Optimized a query that was taking a couple of minutes on the DEV server down to 10 seconds by using a combination of temporary tables and JOINs (we were not allowed to change the existing tables, not even to add indexes).
- Advised the rest of the team on design and testing issues.
- ProgrammerDeCare Systems Ireland2013 - 2014
Technologies: C#, MVC
- Automated the replication of data from staging to production, changing a three-day, error prone manual process to a two-minute automated one using SQL Server Data tools.
- Worked on the Avon shop for the Australia/New Zealand region. This implied a number of changes to the existing workflow, because the AU/NZ market was the first one to support direct delivery of packages in addition to delivery by representative; as a result of that, it was also the first one that supported direct payment on the website (previously, the orders were paid on delivery to the representative bringing the package). The front-end is a C# MVC 5 application and the back-end is mostly WCF services.
- Integrated a new payment system (PayPal Express) for the Avon Australia and New Zealand web sites. Even though I had never integrated with PayPal before, I managed to finish the task in two weeks, a week ahead of the estimate I had been given. This involved changes on both the client and the server sides to the logic to redirect to PayPal and accept the callback from their site to ours and integrating with our existing services to record the payment attempts.
- Uploaded media files to a CDN (content distribution network) service in order to improve response times and reduce pressure on our servers. I used both the C# Rx libraries and Async/Await calls for this project. I also solved an issue where some of the paths were over 260 characters long; the .NET implementations of the file APIs in System.IO do not natively support that, so I had to replace some of them with direct calls to the Win32 APIs that allow for a path up to 32K characters long.
- Rewrote an application to reflect the Avon UK branch’s change of shipping company, which was hard-coded into their previous VB6-based application. The new application was written in C# using TDD and trying to respect SOLID principles where possible. The process was complicated by not having a scanner, a printer, or access to the new shipping company’s web service for the first two weeks, so I had to fudge it in a process that actually worked to the application’s benefit because it forced abstraction of the endpoints.
- Added a health monitoring system to a complex network of WCF services as a side project. The services were distributed on multiple servers and had dependencies on databases and possibly other services (including other servers). The application had to be as future-proof as we could make it, which led me to add a new interface to all services, plus a common DLL implementing the interface with a single method taking and returning a JSON string. The input string contained a hierarchical description of the services that we wanted to check so that each service would first confirm hat it was working before calling its dependencies; the result would either confirm that everything was working or help to quickly pinpoint problems. Since a lot of the web services were written in C# 3.0, this project didn't use any technologies besides WCF and a JSON parser.
- Branch Manager and Lead DeveloperMicroBilt1999 - 2013
Technologies: C#, WCF, Delphi
- Switched the company's back-end applications in Delphi 5 to C# as.
- Reduced writing WCF services to about a week through practical experience, assisted by my CodeSmith template written to get the common parts out of the way and allow everyone on the team to focus on what was new in each application.
- Wrote the back-end application to create an in-house credit service for people who didn’t have a good standard credit report (https://www.prbc.com/home/how-does-a-prbc-credit-score-work) in a 6-month project.
- Wrote the Enhanced People Search (http://www.microbilt.com/microbilts-enhanced-people-search.aspx) which uses a combination of data sources to create a comprehensive history of a person. This was quite a complex report because it included partial and often contradictory data from dozens of sources, such as different spellings of names, different addresses, and even different SSNs since some people would use their spouse’s SSN on their credit applications. We had to do a lot of optimizations on this service due to the large amount of computation involved.
- Developed the ID authenticaation service (http://www.microbilt.com/identity-authentication.aspx) as a fraud-prevention measure using historical information databases to determine whether a person actually was who they claimed to be.