Myles Skinner’s Development Portfolio
“The best praise I can give Myles is that I can give him a task with minimal direction and know it will be done correctly
the first time with a solution that is both effective and creative. Myles never hesitates to roll up his sleeves and get
to work. No task is too small or too large for him to take on. I never have to worry about his productivity—he is
self-motivated and takes pride in his finished work.”
—Christopher P. Smith, VP of Engineering, PartnerPath
I've been programming for 42 years now; I got my start as a kid writing BASIC programs on a Commodore PET 2001 and quickly graduated to 6502 machine language. Hand-assembling machine code from a very early age has given me a level of comfort with low-level work—I'm as much at home with a hex editor as I am with a modern IDE. I enjoy working behind the scenes and under the hood to help talented designers bring their visions to life. The languages and technologies with which I am most familiar include: Ruby on Rails, Vue.js, PHP, Laravel, C, C++, Java, Perl, HTML, CSS, jQuery, PostgreSQL, and MySQL. I am experienced with numerous version control systems including Git, Mercurial, and CVS (I strongly prefer Git). In addition, I have fun learning new languages and technologies and will happily tackle the unknown.
Info-Tech Research Group
In 2017, I said goodbye to the world of freelancing and accepted a senior development position with Info-Tech Research Group. I've had the good fortune to be able to apply my years of Ruby on Rails experience to projects such as myPolicies and SoftwareReviews. The best thing about Info-Tech is that the company strongly values continued training and skill upgrades. I've been using part of my personal training budget to learn my way around the Vue.js framework. In order to gain a better understanding of Vue, I wrote 650Vue, a single-page application that simulates a 6502-based computer and is capable of running non-trivial machine-language programs. If you'd like to read more about 650Vue, I am documenting the development process.
I contracted with PartnerPath for ten years from early 2008 to late 2017. The technology team at PartnerPath developed and maintained the eponymous PartnerPath Partner Relationship Manager, which was a load-balanced, multi-tenant, multi-language, fully configurable Software-as-a-Service (SaaS) solution with some incredible features. Because PartnerPath supported multiple vendors (called 'tenants') using the same app simultaneously, it was very important to maintain the data integrity of each tenant and to ensure that one tenant's implementation would never leak into any other's. I wrote the majority of the systems that allowed these tenants to coexist peacefully with their varied and often conflicting configuration requirements.
Our team at PartnerPath were strict about following Best Practices using some of the best tools available: Jira for Agile project management, GitHub for version control and managing branches, CircleCI for continuous integration and running our test suite, Heroku for review apps and deployment, ScreenHero for remote pair programming, and Confluence for sharing knowledge.
The life of a freelancer can be fast-paced. Sometimes you have to move from requirements gathering to delivery in just a couple of sprints. The graph tracks my contributions to PartnerPath's GitHub repository over a period of three years—nearly 200,000 lines of Ruby! (Although these days, I prefer to plan ahead carefully and write fewer lines of code.) I believe in rapid development, using Agile methodologies where possible. In my time with PartnerPath, I worked on over 3,000 tickets—tickets could range in scope from minor copy edits to substantial revisions to our application workflow to the complete design and implementation of new modules. I have also taken the lead on several development projects, ensuring that our code is built to specification and delivered on time.
Through PartnerPath, I have had the privilege of implementing Partner Relationship Management (PRM) solutions for some of the most significant players in the tech industry, including Apple, PayPal, and Liebert-Emerson (now Vertiv). I've included the logos of the companies I've worked with below; each one has brought something new to the table, requiring me to develop new and interesting features for the PartnerPath portal.
Apple Consultant Locator
In 2008, Apple engaged PartnerPath to create an interim Consultant Locator to be used in Apple Stores while they developed their own in-house solution. The Consultant Locator is a searchable directory of Apple's authorized third-party vendors and service partners. You started your search by entering a zip code (or postal code in Canada); the system would then calculate the distance to the nearest consultants and display this information in a table alongside a map generated with Google's map API. You could further refine your search by looking at Customer Focus or Skill Category. Our system tracked which certifications each consultant had earned as well as a client rating system from 1 to 5 stars.
Apple kept the directory up-to-date by supplying an overnight data feed which was processed daily by our system. We also created an administrative interface so that Apple admins and trusted consultants could update their information in real time. As a long-time Mac user, I have to admit it was a real thrill to be able to walk into the Apple Store at the Walden Galleria in Buffalo, New York to ask the Geniuses on duty how well the Consultant Locator that I helped design was working for them. Their response was that they used it often and found it reliable—after our conversation, the Apple Store offered me the 5% employee discount on the MacBook Pro I was purchasing that day! Our Consultant Locator was in use in Apple Stores until 2012. You can see Apple's current proprietary Consultant Locator on the web today; if you play around with their current search tools, you can get a good sense of how our system worked back in the day.
PayPal Error Monitoring Dashboard
The team at PartnerPath was lean and used Agile practices—therefore we were able to deploy new implementations quickly. As a result, it was not unusual for enterprise-level companies to engage us to create interim solutions while they worked to complete their own projects internally. When PayPal approached us in 2014, they required two additional reporting modules for their PRM portal: Revenue Share reporting and Error Monitoring.
While the details of PayPal's revenue sharing program are naturally confidential, I can show a mockup of the Error Monitoring Dashboard. This dashboard represents a diagnostic tool to track PayPal transactions that experienced errors; the data was populated by a nightly feed and processed for presentation as depicted in the mockup. You could refine the report by date range, error code, or product. The summary table on the bottom of the screenshot to the left shows the most common types of errors and where in the world those transactions occurred.
App-In-A-Day Mobile Challenge
One of the great things about contracting with PartnerPath is that I was able to work with intelligent, highly-skilled people. In the summer of 2011, we decided to challenge ourselves to write a mobile application in a single workday. I should stress that none of us had more than minimal mobile experience before the day of the event. We set some ground rules: the app had to do something useful ("Hello, world!" doesn't count), we had to follow best practices as much as possible, and no code could be written before the day of the challenge. The six of us worked from 9:00 in the morning until about 4:30 that afternoon, and we finished with a completed app that allowed you to log into the PartnerPath portal from an iPhone and pull up real-time graphical reports from live data. We did more than the bare minimum, too: in addition to the application code, we wrote a partial harness of unit and feature tests.
The most important lesson I learned from this experience was the value of Pair Programming. It is too facile to romanticize the developer as a "lone wolf"; the value of working collaboratively in pairs when both developers are fully engaged can not be overstated. As my colleague Fred Willmore liked to point out, you can often solve problems more creatively when you are solving on behalf of another person.
This short video documents our heroic efforts.
Opportunity Registration Workflow
Opportunity Registration (or Deal Registration) is a process in which a partner informs a vendor about a lead and seeks approval to move forward with a sale. Some vendors have a simple approval process, requiring only one internal manager to sign off on a deal; other vendors have a more complex approval process, where deals must be approved by a number of managers in turn before a deal is considered "approved". In 2015, I created an approval process state machine for PartnerPath that was capable of handling any arbitrary degree of complexity. The list of approver users was generated dynamically from the properties of a given deal, such as geographic location (e.g. North America West or Asia-Pacific), the size of the deal (more revenue usually meant more approvers required) or what products were involved (e.g. servers or software). Deals could also be 'reassigned' to approvers not normally in the approval chain. When a partner registered a deal, an email notification went out to the first level of approver users; when one of these level-one users gave their approval, the level two approvers would be notified and the deal would move forward through the process. At any stage in the workflow, approval events could trigger a call to synchronize data with external integrated systems such as Salesforce.
Marketing Development Funds
Marketing Development Funds (MDF) are funds that a vendor makes available to their partners to support marketing activities that help build their brand. In 2016, I authored a system that supports two types of funds: (1) a global pool of funds available to all eligible partners, and (2) a set of "Co-Op" accounts where partners accrue funds monthly. If they had the money available, partners could enter requests to fund marketing activities; these requests would then be subject to an approval process similar to the Deal Registration approval process outlined above. Once a request is approved, the funds would be allocated in support of the activity. It was then up to the partner to carry out their activity and file a claim (with supporting documentation) when finished.
When designing any kind of financial system, accuracy and reliability are critical. In my MDF model, all fund transfers are wrapped in Rails transactions so that if any part of a transaction fails, the entire transaction is rolled back and all errors are logged to ensure the integrity of every account.
As a former university instructror and Adjunct Professor, I was enthusiastic about taking the lead role in developing a training system to integrate with PartnerPath. What we created is a flexible system that allows clients to create and manage all their training content. With the Training Paths administrative tools, you can track and compare student progress through each path. The Training Path overview is represented visually by a subway map metaphor where each topic is represented by one of the stations; the display to the left was designed and implemented by Scott Collins. The training system is composed of the following components:
- Training Path: an organized collection of training courses that make up a complete unit of training, usually targeted at a specific certification, and often organized by job function, solutions, technical expertise, etc.
- Topic: a collection of units organized into subject matter groupings or themes.
- Training Unit: refers to a single section of training such as a training video, an exam, a training document, an external class, or any other single unit of training that can be taken by a partner and evaluated for success.
- Skill Assessment: a quiz or questionnaire that can be used to assess the retention of a given training unit.
- Certification: after completing a Training Path successfully, the trainee could be awarded a certification. Upon awarding a certification, we would update the trainee user's profile and generate a printable PDF certificate.
Widget PDF Export
The PartnerPath and RegPoint Dashboard project was one of the most challenging things I've ever worked on, but also one of the most rewarding. The dashboards are composed of several reporting 'widgets' that provide real time, graphical reports based on live application data inside the PartnerPath and RegPoint portals. The PartnerPath Main Dashboard is configurable; users can choose which reporting widgets will appear on their dashboard. My most significant contribution was making the dashboard reports exportable as PDFs; the PDF files are built on-the-fly from up-to-date data (including graphs), with the various layout elements—pagination, headers, footers, and column breaks—derived on demand from each specific dashboard configuration.
This sample PDF demonstrates the output; I am very happy with the way it turned out. There's something very satisfying about writing code that will generate a full-colour, printable document that you can hold in your hands.
Informatica's Partner Directory
I was asked to develop an enhanced partner directory to replace the original "A-Z Partner Directory" that used to appear on Informatica's website. Each entry in the directory includes information on Informatica's network of partners worldwide; the data displayed in a partner's profile on the directory is dynamically updated from the information each partner puts into their profile on beINFORMed, Informatica's Partner Portal. This improved directory offers customers, prospects, and field personnel the benefit of being able to search Informatica's worldwide partner network by country, vertical focus, product and solution specialization and locate a contact at any partner. The partner directory formed the core of the Consultant Locator that was used in Apple stores until 2012.
RPGme Online Store
RPGme was a start-up company founded by Christopher P. Smith. Chris designed the site, wrote the site copy, populated the catalogue, filled orders, and set up and maintained the site forums. I was brought on board to develop an online store application capable of secure transactions. This was a challenging project because in the beginning, I was completely unfamiliar with the necessary tools and languages. (Bear in mind, this was 2002. Frameworks have come a long way since then.) In two weeks, I learned enough Java, JSP, and MySQL to begin development; within two months, I had written a fully-functional online store application from scratch that was modular, configurable, and scalable.
- User registration and secure login
- Shopping cart capable of persisting across separate sessions for registered users
- Search engine that allowed users to restrict searches of the store catalogue by combining multiple search criteria (keywords, product category, price)
- Product recommendations derived from shoppers' browsing history
- Administrative tools to maintain the MySQL database for users, the catalogue, and shopping cart transactions
- Credit Card handling over secure connection to VeriSign
- Secure model for the purchase and delivery of eTexts and PDFs
Plumbing Factory Brass Band
I believe it is worthwhile to become familiar with all aspects "full stack" development, and so when the opportunity arises, I like to do a bit of front-end design. The Plumbing Factory Brass Band had an anitquated site dating from the early days of the web, complete with a web counter, frames, and garish clip-art GIFs in the old 216-colour "web-safe" palette. I implemented the new Plumbing Factory site in WordPress so that the band director could manage his own content once the site was up and running. I created a custom WordPress theme using muted colours reminiscent of the instruments of the band, with softer images and a subtle hint of a brass band musical score in the background.