
$$$$
{{ $t($store.state.user.experience_value_in_dollars) }}
Expert
{{ $t($store.state.user.experience_search_name) }}
0
jobs
Highly experienced C++ / Python Software Engineer
Dominic Large
,
Swanmore, United Kingdom
Experience
Other titles
Skills
I'm offering
Highly proficient SENIOR SOFTWARE ENGINEER with over 20 years experience developing high performance systems for the finance and network industries using C++, Python, Middleware, SQL, UNIX. Experience with the full software development lifecycle. I have worked with agile, iterative and waterfall methods of project management. Ability to work effectively with project stakeholders at all levels and from both technical and non-technical backgrounds. I successfully integrate with all teams and management styles by fully understanding the need of my clients.
Markets
United Kingdom
Links for more
Once you have created a company account and a job, you can access the profiles links.
Language
English
Fluently
French
Good
Ready for
Larger project
Ongoing relation / part-time
Full time contractor
Available
My experience
2018 - 2019
freelance
Senior C++/Python Software Engineer
BNP Paribas.
Distributed Risk Management Team – Development of the aggregator of risk knowledge in the bank. This involves pulling data from a large number of systems using varying protocols and unifying the gathered information into a single uniform format to enable downstream systems to effectively visualise the data. The system deals with large numbers of trades both for overnight batch processing of End of Trading Day data as well as essential Intraday Risk Measurement updates. This requires significant processing power and so is distributed over a large grid of processing units (essentially a large server farm where each server is capable of processing any job on an ad-hoc basis). The primary goal of the system is to ensure that risk results are delivered accurately in a timely manner.
Working in the SCRUM agile framework I worked on all aspects of the system as well as providing mentoring for new software developers. Some examples of areas where I have made a significant contribution:
- Enabling intraday processing of risk for multiple risk measures in a single request for multiple trades. This helped to reduce load on the grid (by eliminating duplicate processing) and increased overall throughput.
- Refactoring large sections of code where I had identified very similar patterns of behaviour, but where individual processors had been written to perform the processing. Whilst each processor had evolved slightly differently, I was able to ascertain though requirements analysis and talking to people on the business side, that the core of these processors should indeed to exactly the same thing. Ultimately I was able to compress 26 processors into 3, so removing the need to maintain several thousands of lines of code and reducing the risk that changes needed for one product type would not be carried over to other product types with the same requirements.
Working in the SCRUM agile framework I worked on all aspects of the system as well as providing mentoring for new software developers. Some examples of areas where I have made a significant contribution:
- Enabling intraday processing of risk for multiple risk measures in a single request for multiple trades. This helped to reduce load on the grid (by eliminating duplicate processing) and increased overall throughput.
- Refactoring large sections of code where I had identified very similar patterns of behaviour, but where individual processors had been written to perform the processing. Whilst each processor had evolved slightly differently, I was able to ascertain though requirements analysis and talking to people on the business side, that the core of these processors should indeed to exactly the same thing. Ultimately I was able to compress 26 processors into 3, so removing the need to maintain several thousands of lines of code and reducing the risk that changes needed for one product type would not be carried over to other product types with the same requirements.
C++, Python, Boost, Object oriented, Multithreading
2013 - 2018
freelance
Senior C++ Software Engineer
Morgan Stanley.
Client Gateways – Working on the development of the client gateway and client order manager. This provides the primary entry point for client orders to the bank. The key tasks undertaken are initial validation of the order (sender, limits-checking, price/symbol validation) and distribution of valid orders to the appropriate order processing systems within the bank
Exchange Connectivity - Development of order routers connecting directly to FX markets including: Reuters, Hotspot, EBS, Bloomberg Tradebook, Fastmatch, LMAX, Gain GTX, BGC eSpeed and Currenex. The routers are then used by every system within the bank which need to make FX trades. Covered the development of entirely new routers as well as the regular mandatory upgrades which are made necessary by changes to the operating practices of the exchanges and/or changes to the regulatory framework which the exchanges and their clients must abide by. Provide aid and mentor developers working on systems connecting to the equity and cash markets
Exchange Connectivity - Development of order routers connecting directly to FX markets including: Reuters, Hotspot, EBS, Bloomberg Tradebook, Fastmatch, LMAX, Gain GTX, BGC eSpeed and Currenex. The routers are then used by every system within the bank which need to make FX trades. Covered the development of entirely new routers as well as the regular mandatory upgrades which are made necessary by changes to the operating practices of the exchanges and/or changes to the regulatory framework which the exchanges and their clients must abide by. Provide aid and mentor developers working on systems connecting to the equity and cash markets
C++, Python, Multithreading, Bash, Object oriented, TCP/IP
2011 - 2013
freelance
Senior C++ Software Engineer
Bank of America Merrill Lynch.
Enhancements to the server-side pricing systems used primarily by the bank’s Mercury FX product but also serving other systems within the bank.
• Development of Smart Order Management System.
• Implemented Sales and Trader Markup functionality.
• Enhanced Trading Limit Controls to provide greater flexibility in setting limits, particularly when applied to groups of users and/or currency pairs.
• Integration of Quant spot pricing algorithms and enhancements to their code (best practice/efficiency enhancements).
• Development of a connector to a KDB ticker plant provided by the quant team to provide an alternate pricing stream.
• Handling of inverted currency pairs.
• Successfully ensured that the system could move from handling a few thousand trades a week to tens of thousands of trades per day.
• Migration of system from 32-bit to 64-bit addressing
• Development of Smart Order Management System.
• Implemented Sales and Trader Markup functionality.
• Enhanced Trading Limit Controls to provide greater flexibility in setting limits, particularly when applied to groups of users and/or currency pairs.
• Integration of Quant spot pricing algorithms and enhancements to their code (best practice/efficiency enhancements).
• Development of a connector to a KDB ticker plant provided by the quant team to provide an alternate pricing stream.
• Handling of inverted currency pairs.
• Successfully ensured that the system could move from handling a few thousand trades a week to tens of thousands of trades per day.
• Migration of system from 32-bit to 64-bit addressing
C++, Boost, Object oriented, Multithreaded, Sybase, Kdb
2009 - 2011
job
Senior Software Engineer
Barclays Capital.
Development of the FX Spot Aggregator system which is used by the FX spot desk traders and other FX traders in the bank. This has helped the traders successfully access more liquidity at a better price by giving access to multiple exchanges simultaneously (where previously they had to use multiple exchange specific terminals).
The areas I worked on for this project were:
• Library Development for Market Data, Configuration and Order Management using a proprietary binary protocol developed by the FX Algorithmic trading team to interface with the Algorithmic Trading Team’s servers.
o Analysed existing Java code and wrote detailed specification of the messaging formats.
o Wrote corresponding libraries in C++. Added Observer interface (using Boost::signals2) to the library enabling clients to receive updates to interesting data asynchronously.
o Added Pipelines to distribute data to appropriate consumers.
o Used the Builder pattern to separate the creation of objects from their representation, which proved extremely useful when external data-sources had to be changed fundamentally.
• Developed unit tests using Google Test to ensure that any encoding errors were caught early in development and less time was spent debugging. This lead to quicker overall delivery of the final product.
• Wrote library code over Kx systems C APIs to interface with a KDB+ ticker plant and for KDB+ queries to:
o Observe live exchange paid/given data ticks
o Query historical paid/given data.
o Recover order status in the event of network or server failure.
• Development of Market Data Servers using Market Data, Configuration and KDB+ Libraries :
o Accept subscriptions from client GUI with specific criteria per currency pair.
o Aggregation of market orders from a number of external exchanges (incoming rate of approximately 3000 - 8000 events per second), using live data translated to a binary protocol by the algorithmic trading team.
o Provide full market data stacks for each subscription to client at a configurable throttled rate.
o Use of boost::multi_index for fast lookups of recorded data when handling incoming subscriptions and updates to market data.
o Use of Solace/Talarian SmartSockets for service discovery
o TCP Sockets for dedicated communication with data sources and consumers (post discovery).
o Use of KDB+ ticker plant and console as a source for paid/given data.
• Order Management Servers using Market Data, Configuration, Order and KDB+ libraries.
o Accept orders and order amendment/cancellation from the client for a specific markets or best execution given a set of acceptable markets. Transmission via SmartSockets and Solace.
o Interface with the algorithmic trading system for order execution.
o Monitor algorithmic trading system for fills.
o Use of MQ for persistence while aggregating individual fills into overall order.
o Use of KDB+ for order recovery in the event of network or server failure.
The areas I worked on for this project were:
• Library Development for Market Data, Configuration and Order Management using a proprietary binary protocol developed by the FX Algorithmic trading team to interface with the Algorithmic Trading Team’s servers.
o Analysed existing Java code and wrote detailed specification of the messaging formats.
o Wrote corresponding libraries in C++. Added Observer interface (using Boost::signals2) to the library enabling clients to receive updates to interesting data asynchronously.
o Added Pipelines to distribute data to appropriate consumers.
o Used the Builder pattern to separate the creation of objects from their representation, which proved extremely useful when external data-sources had to be changed fundamentally.
• Developed unit tests using Google Test to ensure that any encoding errors were caught early in development and less time was spent debugging. This lead to quicker overall delivery of the final product.
• Wrote library code over Kx systems C APIs to interface with a KDB+ ticker plant and for KDB+ queries to:
o Observe live exchange paid/given data ticks
o Query historical paid/given data.
o Recover order status in the event of network or server failure.
• Development of Market Data Servers using Market Data, Configuration and KDB+ Libraries :
o Accept subscriptions from client GUI with specific criteria per currency pair.
o Aggregation of market orders from a number of external exchanges (incoming rate of approximately 3000 - 8000 events per second), using live data translated to a binary protocol by the algorithmic trading team.
o Provide full market data stacks for each subscription to client at a configurable throttled rate.
o Use of boost::multi_index for fast lookups of recorded data when handling incoming subscriptions and updates to market data.
o Use of Solace/Talarian SmartSockets for service discovery
o TCP Sockets for dedicated communication with data sources and consumers (post discovery).
o Use of KDB+ ticker plant and console as a source for paid/given data.
• Order Management Servers using Market Data, Configuration, Order and KDB+ libraries.
o Accept orders and order amendment/cancellation from the client for a specific markets or best execution given a set of acceptable markets. Transmission via SmartSockets and Solace.
o Interface with the algorithmic trading system for order execution.
o Monitor algorithmic trading system for fills.
o Use of MQ for persistence while aggregating individual fills into overall order.
o Use of KDB+ for order recovery in the event of network or server failure.
C++, Clearcase, Object oriented, Multithreading, TCP/IP, Solace, IBM MQ, Java, Kdb, Sybase, Sql, Software development
2006 - 2009
job
Senior Software Engineer
Bloomberg LP.
Working within the message team. Developing using an iterative development model with elements of the Unified Process leading to individual projects of short duration between one and six weeks, often forming part of a larger overall deliverable.
The message system is used by the majority of Bloomberg's subscribers (over 200,000 users) supporting real-time delivery of messages between users on the system. Messages can consist of simple e-mail like communications to more complex trade ideas which are parsed and fed into pricing engines.
Worked on a number of parts of the message system including:
• Rewriting the contact management system (back-end).
o Peak loads are several thousand events per-second.
o Designed the system to use a priority-based thread pool to deal with the load effectively
Requests that can be run as batch jobs with no hard time-limit have the lowest priority re queued into and processed by a small low priority pool.
High priority requests such as colouring or name resolution must happen in real-time and are processed by a large high-priority pool.
• Rewriting the delayed Message subsystem, allowing a user to compose a message for delivery at some specified point of time in the future.
o Wrote a new C++ service to replace the old system which had grown organically over many years and consisted of a mixture of C and FORTRAN. The new service reduced maintenance requirements versus the old system and made it easier to add enhancements.
• Wrote the draft message subsystem (automatic saving of draft messages).
o Re-used the majority of the infrastructure developed for the delayed message system.
o As a result of the re-use, this feature which was in great demand by clients could be delivered in a very short timescale.
• Support of the wider Message system, including:
o Bug-fixes
o Crisis management (both during office hours and on-call outside office hours/weekends)
The message system is used by the majority of Bloomberg's subscribers (over 200,000 users) supporting real-time delivery of messages between users on the system. Messages can consist of simple e-mail like communications to more complex trade ideas which are parsed and fed into pricing engines.
Worked on a number of parts of the message system including:
• Rewriting the contact management system (back-end).
o Peak loads are several thousand events per-second.
o Designed the system to use a priority-based thread pool to deal with the load effectively
Requests that can be run as batch jobs with no hard time-limit have the lowest priority re queued into and processed by a small low priority pool.
High priority requests such as colouring or name resolution must happen in real-time and are processed by a large high-priority pool.
• Rewriting the delayed Message subsystem, allowing a user to compose a message for delivery at some specified point of time in the future.
o Wrote a new C++ service to replace the old system which had grown organically over many years and consisted of a mixture of C and FORTRAN. The new service reduced maintenance requirements versus the old system and made it easier to add enhancements.
• Wrote the draft message subsystem (automatic saving of draft messages).
o Re-used the majority of the infrastructure developed for the delayed message system.
o As a result of the re-use, this feature which was in great demand by clients could be delivered in a very short timescale.
• Support of the wider Message system, including:
o Bug-fixes
o Crisis management (both during office hours and on-call outside office hours/weekends)
C++, C, Python, Berkely DB, Mysql, Sqlite, FORTRAN, Solaris, Aix, Linux, Unix
2000 - 2006
job
Senior Software Engineer
Micromuse/IBM.
Technical Lead for the Netcool/Precision Fault Manager Version 3. The primary purpose of the fault manager was to identify the root-cause of network problems through use of topological knowledge of network connectivity and the use of both active and passive monitoring of devices within the network.
• Updated the code to make better use of C++ capabilities and take account of C++ 98 standard. The final product consisted of approximately 300,000 lines of C++ code (some of which was shared with the other systems in the Netcool/Precision suite).
• Implemented a graph and analysis engine capable of identifying multiple simultaneous faults in a network with the potential to cause wider problems. This replaced the existing graph which was only able to identify if there was a single point of failure.
o The change was vital because our customer’s networks were increasingly making use of redundant links to avoid single points of failure.
• Updated the code to make better use of C++ capabilities and take account of C++ 98 standard. The final product consisted of approximately 300,000 lines of C++ code (some of which was shared with the other systems in the Netcool/Precision suite).
• Implemented a graph and analysis engine capable of identifying multiple simultaneous faults in a network with the potential to cause wider problems. This replaced the existing graph which was only able to identify if there was a single point of failure.
o The change was vital because our customer’s networks were increasingly making use of redundant links to avoid single points of failure.
C++, Sql, Oracle, DB2, Multithreading, Snmp, TCP/IP, Software development, Linux, Hp-ux, Aix, Solaris
My education
University of Hertfordshire
BSc, Computer Science
BSc, Computer Science
Dominic's reviews
Dominic has not received any reviews on Worksome.
Contact Dominic Large
Worksome removes the expensive intermediaries and gives you direct contact with relevant talent.
Create a login and get the opportunity to write to Dominic directly in Worksome.
are ready to help you
and get specific bids from skilled talent in Denmark