Matthew's Work Examples
Programming guides and reference resources for Fintech developers
I wrote developer friendly software documentation for an online trading platform. Thousands of commodity and currency traders rely on the interoperability and customization of this .NET/C# platform for their discretionary and automated trading needs.
NetGauge to Speedtest Custom (legacy Flash to HTML5) client migration
Ookla—the team behind Speedtest.net—offer an enterprise version of
their flagship software that I helped support.
I led a small team of technical service contractors to assist with the increased workload from the transition from their legacy Adobe Flash client to new web APIs.
To support the latest browser security protocols, it was important that vendors follow guidelines to ensure their server networking software could pass the routine security monitoring watchdog process developed by Ookla.
As Ookla release the beta version of their HTML5 client, many of their customers (networking engineers) had trouble understanding how to debug and troubleshoot unexpected results. We used this opportunity to teach these users about the built-in DevTool's Networking features that are often overlooked.
Since many of Ookla's customers were new to the concept of using a iframe hosted from another web server, we needed to build a template to assist users with building their company web pages that displayed the test content in an HTML5 friendly manner.
The client-side technology used to execute and host a test on a customer's website was completely rehauled and required a different approach to get similar results on the client's site. We worked to make this process as simple as possible for users who were used to a more complicated approach to hosting the test engine.
Many of Ookla's licensed vendors were using the legacy Flash technology that was quickly becoming discontinued and blocked by security enhancements to major browsers. Our major effort involved helping ISPs and other networking vendors understand the new technology involved and provided high-level tutorials to help ensure that their plan to update their website would go as smoothly as possible.
Ookla's Speedtest Custom was hosted on speedtestcustom.com as a service to help licensed vendors to configure and eventually reference through an HTML5 iframe on their website. This required every test instance to define a custom subdomain that worked as their licensed Test URL. As this detail was a major change for users used to the self-hosted legacy technology, it required a guide to help vendors understand the purpose of the major step in setting up their process.
Through the two-year beta release cycle of NinjaTrader 8, I was responsible for compiling and writing release notes that described the changes for each iteration up until the final release candidate.
Over 6-years of work supporting C# developers and the end-users of custom scripts, I accumulated a nice collection of tribal knowledge. Sometimes, the solutions to common scenarios were not always clear to end-users how to implement custom scripts. To ensure the best performance and maintenance for their users, one of my last assignments for NinjaTrader was compiling a list of common scenarios, gotchas, and workarounds to help optimize the code distributed through the ecosystem.
NinjaScript was event-driven and multi-threaded, which meant that 3rd party C# developers needed to be aware of how to handle programming scenarios that sometimes needed to be dispatched between parallel threads.
NinjaTrader version 8 introduced a new class of objects that could be used to communicate to 3rd party APIs like Twitter, Facebook, or custom made to meet customer use cases. This was the API Reference that enabled a developer to start using this group of methods and types.
I was promoted to Product Manager after working as a technical support lead for the NinjaTrader platform. When I was promoted, much of the early planning and specification was already completed, so I was brought on to help with the engineering implementation, user acceptance testing, and documentation up until the first major release of NinjaTrader 8 in November of 2016.
NinjaTrader provided a custom classes of programming interfaces that were given low-level access to core software objects to make it easy to develop custom add-ons, yet were wrapped in abstract layers that were sometimes not so easy to understand in common debug scenarios. To help with the learning curve, I worked with the team of product managers and engineers to help ensure that 3rd party developers understood how each instance of their custom NinjaScript types would be expected to be handled by core NinjaTrader platform.
A flagship order entry feature for day traders was enhanced to allow users to write custom add-ons using C# scripts that would interact with the WPF layouts provided by NinjaTrader. This is the API reference documentation to allow a user to start using these types.
One of the primary goals of the new NinjaTrader 8 help guide was to make it media-rich and user-friendly. Where possible, we tried to include videos to help users understand software operation concepts and tutorials. I was involved with planning and writing many of the scripts that were used in our collection of videos, and was also responsible for updating the help guide with the video content as each new video was released. This page shows an overview list of all the videos available through the help guide.
NinjaTrader 8 Charts used a .NET Library called SharpDX that worked with the native Microsoft DirectX API. This was a major overhaul from the previously used GDI namespace and in efforts to help provide better for support for custom chart rendering, I was tasked with designing a tutorial to help users understand the new information that came along with the updated requirements.
NinjaTrader used two different APIs for rending UI components, depending on the performance required. This often caused confusion between the types of .NET objects used for certain tasks, and also required a little bit of guidance to help developers understand some of the multi-threaded implications of using certain types across the life cycle of each object.
To help support multiple device layouts and resolutions, 3rd party developers needed to be aware of the discrepancies that can occur between pixels and devices, as well as how to correct and prevent these issues from arising.
Between my time as a technical support lead and product manager, it was often my job to help catch wide-spread issues before they caused issues for the ecosystem of users. We often authored In Product Advisories that were also re-hosted on the NinjaTrader blog to assist in these scenarios. This is one example of the many advisories that I helped write and edit.
One of the major enhancements to NinjaTrader 8 was the ability to attach a live market order to be updated automatically by a 3rd party script (without needing to know how to program). This was a simple operation guide to introduce users to the platform features.
One of my major assignments as a Product Manager for NinjaTrader was discovering and documenting many of the changes our community of 3rd party developers needed to use to convert their C# NinjaScript types from Version 7 to Version 8.
When looking at technical financial data, it's common to need to annotate certain data points on the chart that can be saved and shared for others - we took this approach one step further and extended access to our class of "Drawing Tools" to allow users to develop unique drawing tools, building off the concepts we designed to implement the standard set of tools that came with the platform. This was the API Reference that enabled a developer to start using this group of methods and types.