Herbie Marais, Enterprise Architecture Developer in Cape Town, Western Cape, South Africa
Herbie Marais

Enterprise Architecture Developer in Cape Town, Western Cape, South Africa

Member since August 12, 2014
Herbie has a passion for complex business logic and finding the right patterns to encapsulate it. He can work under immense pressure and is a natural leader who leads from the front. His code is always well-structured and extendable. He will always choose proven stability and scalability over bleeding edge.
Herbie is now available for hire

Portfolio

  • MiX Telematics
    C#, .NET, .NET Core, Kafka, SQS, SQL Server, MSMQ, Redis, Web API2, Swagger
  • MiX Telematics
    C#, MSMQ, Nancy, SQL, IIS, Entity Framework, SOA, Redis
  • MiX Telematics
    C#, MSMQ, Nancy, SQL, IIS, Entity Framework, SOA

Experience

  • C#, 12 years
  • Microsoft SQL Server, 9 years
  • Design Patterns, 8 years
  • Entity 6, 8 years
  • Enterprise Architecture, 6 years
  • NUnit, 6 years
  • ASP.NET Web API, 6 years
  • Team Mentoring, 5 years

Location

Cape Town, Western Cape, South Africa

Availability

Part-time

Preferred Environment

Windows, C#, SQL Server, Java, Git, SVN

The most amazing...

...dev team I've led is my current team; they are creating a system that processes/calibrates live data coming in from thousands of vehicle tracking devices.

Employment

  • Software Development Manager

    2016 - PRESENT
    MiX Telematics
    • Led a team of eleven developers and four testers in an Agile development environment.
    • Reviewed functional specs with BA, drew technical specs, and reviewed with the development team. Oversaw development and managed project delivery, giving regular feedback to stakeholders. Facilitated sprint ceremonies like stand-ups, sprint planning, sprint review, and more.
    • Held regular meetings, under the guidance of the software architect and head of software development, with peers to ensure common technological direction within the company.
    • Contributed to the hiring process.
    Technologies: C#, .NET, .NET Core, Kafka, SQS, SQL Server, MSMQ, Redis, Web API2, Swagger
  • Team Manager

    2014 - 2016
    MiX Telematics
    • Led a team of extremely skilled senior developers and testers.
    • Groomed new technical features to be implemented by the team.
    • Managed projects, responsible for all aspects of my team's work, including work allocations/scheduling and making sure target dates are met.
    • Worked closely with our H&O department, assisting them in infrastructure design and setup and making recommendations towards server specifications and more. I have become very familiar with the capabilities of the trade tools like Active Directory, Remote desktop tools like RD-Tabs, VMWare, Hyper-V, and AWS hosting services.
    • Supervised eleven people and with the expectation that I still have to generate code; I had to very quickly learn how to effectively manage my time, so that I am never the bottleneck for any of my team members to do their work.
    Technologies: C#, MSMQ, Nancy, SQL, IIS, Entity Framework, SOA, Redis
  • Senior Software Developer

    2012 - 2014
    MiX Telematics
    • Went off-site with team members to rewrite an entire suite of client-facing applications into a single web interface, backed by a REST API.
    • Assisted in the design and most of the development of the user management module of the new web-based platform.
    • Led the introduction of Entity Framework as an ORM for selected modules within the new platform.
    • Created various Windows services that process messages received via MSMQ. Messages are then either passed on to the next component within the SOA system or persisted into the target data store.
    • Created an engine that renders a user interface based on rules in a SQL database. This was needed because this particular system is extremely dynamic and constantly evolves. Having to make code changes to support each new feature that is released is not an option. Hence, the rules for the new features are distilled into the database and all the surrounding components simply act on it.
    Technologies: C#, MSMQ, Nancy, SQL, IIS, Entity Framework, SOA
  • Senior Software Developer

    2010 - 2012
    Tiple Point Technologies
    • Led the company's move from Dephi to C#.
    • Created an n-tier framework that uses Fluent-NHibernate as an ORM to be the backbone of all future development The framework's purpose was to be easy to develop against and to make sure that any third-party tools we used, like NHibernate, are properly abstracted and that no dependency to these tools bled into the business code.
    • Led a team of developers across multiple time zones. (US, India, South Africa).
    • Familiarized myself with the DevExpress WinForms tools to build rich desktop clients.
    • Created REST services exposed via WCF for WinForms apps to connect to.
    • Designed and implemented a caching framework so that data with different lifecycles could be cached seamlessly. The framework took care of cache creating, invalidation, and clean-up when the services are stopped.
    • Approved technical specifications for business code/features drawn up by other developers before development started. Wrote technical specifications for framework code to be implemented by myself and a select group of developers.
    Technologies: C#, SQl, WCF, IIS
  • Software Developer

    2007 - 2010
    Saflec Systems
    • Rewrote a legacy application originally written in VB6 to C#.
    • Created a Windows service that controls the "Goldfinger" metal detection system.
    • Integrated various third-party biometric devices into our access control system.
    • Gained firsthand experience dealing with clients and installing both hardware and software on-site.
    • Created a data layer generator that would generate the data-access code for the existing system. This was chosen over an ORM like NHibernate because it generated code that could then be optimized by hand where needed.
    Technologies: C#, VB6, SQL, TCP

Experience

  • eCommerce Systems Integration (Development)

    I developed a complete system to integrate data flow between the storefront of a well known eCommerce platform with the warehousing and fulfillment system of my client.

    The architecture was designed to be extensible and maintainable by any future developer my client could potentially employ and included the following workflows.

    Order Import/Submission
    - The storefront would submit orders in cXML form to an API I created. The API would then validate and process the order into the format required by my client's warehousing and fulfillment system.

    Inventory updates
    - The warehousing/fulfillment system periodically, or by user instruction, updates inventory levels from my client's system into into the storefront's back-end using their SOAP web services.

    Shipment notifications
    - The warehousing/fulfillment system notifies my integration system by means of a file drop that an order has been shipped. My system the collects the required information and submits it via XML post to

    This system was written in C# using the following tools/frameworks
    - Dapper.NET
    - Entity Framework
    - WebAPI2 + Swagger
    - Quartz
    - Windows Services
    - IIS
    - SQL Server
    - SOAP
    - cXML
    - REST

  • Data Import/Transformation (Development)

    I developed a data transformation system that would take an XLSX spreadsheet uploaded by the user and do the following:

    - Validate the data
    - Look up various data, like product keys and employee numbers
    - Audit logging
    - Output a CSV file with the data transformed from the user's XLSX format into the format required by the client's shipping/fulfillment system.

  • Data Procesing Services (Development)

    This is a set of services that will eventually replace a component that was originally written in C++. The legacy component has almost no separation of concern and has grown into a single monolithic component that is the backbone of our business.

    I designed the new data processing services to be modular and scalable, so that they can be deployed in a heavily load balanced environment. Efficiency and horizontal scalability were non-negotiable during the design.

    The services use message-queuing to send messages between on another but great care was taken not to be bound to a specific queuing tech.

    The goal of these services is to be able to handle the data coming in from more than 500,000 tracking devices, at frequencies greater than 1 message every five seconds from each devices. Even though the system is designed to run in a heavily load balanced environment, we have a mandate to keep the operating cost of the system as low as possible. To achieve this, I had to come up with a design that promotes modularity without sacrificing performance.

  • Data Driven UI (Development)

    A core component at MiX Telematics that sets them apart from their competitors is what they call "unit configuration." In short, the onboard computers (OBC) execute a proprietary scripting language. For efficiency, the scripts are compiled into a binary format synonymous to machine code i.t.o. conventional programming languages.

    This allows them to make the OBC do new things without firmware changes, they simply need to upload a new binary to the OBC.

    Because of the dynamic nature of the business and the rate at which very diverse features are added, making code changes/deployments to the user interface every time a new feature is made available is out of the question.

    To overcome this the new behavior is broken up into rules in the database.These rules are then consumed by an "engine" that renders a user-friendly web interface unique to that device/feature. The customer can then customize the behavior. Once the customer has saved the changes, a compilation service is invoked offline that will generate the configuration script and compile it into the binary format for the OBC. This allows for the rapid deployment of new features because it only requires that the new rule sets be added to the database.

  • N-Tier Framework (Development)

    At Triple Point Technologies, I was the lead designer/developer for the new framework that was to carry the next generation of systems in the company. The framework was designed so that it had absolutely no dependency on the business code that the company deals with. It made sure that all third-party technologies, like logging, message queuing, and data access (NHibernate) are properly abstracted, not only to ensure that we don't get tied to a technology that might reach end-of-life, but also to make it easier for a developer that is not familiar with the tech to use it.

  • Hardware Integration (Development)

    At Saflec Systems, I wrote modules to integrate with various third-party biometric devices. The most significant of which was an extension that integrated the HandPunch (http://www.handpunch.com/) into our access control system. This involved marshaling their undamaged C binaries into our C# software. I also bypassed some of the calls in their SDK and reverse-engineered the protocol by sniffing the packets on the TCP link between the device and the software in order to get better performance.

  • Biometrics: Hand Geometry Identification/Verification (Other amazing things)

    As part of my honors degree at the University of Johannesburg, I created my own hand geometry identification/verification device/software.

    I built an enclosure that created a controlled environment where the software uses a simple webcam to take multiple pictures of the subject's hand.

    I then created my own algorithms to process these images into a template that can be matched against previously stored templates.

    Using a very accurate scoring system, the best match is then pulled from the database and the subject is identified by only the shape of his/her hand.

    What makes this solution so unique is the fact that the hand is held in free air, so there is no contact with the device. This is an existing limitation of most biometric devices, is that they require physical contact with the scanning device, and creates hygienic concerns.

    The source code of this project belongs to the university, but I can make some of the documentation available upon request.

Skills

  • Languages

    XML, C#, Visual Basic 6 (VB6), Visual Basic .NET (VB.NET), Java, C, C++, JavaScript
  • Frameworks

    ASP.NET Web API, NUnit, NHibernate, NancyFx, Entity 6
  • Libraries/APIs

    Moq, WinForms
  • Tools

    Azure DevOps Services, GitHub, Git, TortoiseSVN, Tortoise Git, Hyper-V, NuGet, TFS, Subversion (SVN), Amazon SQS, AWS CodeDeploy, AWS CloudWatch
  • Paradigms

    REST, Inversion of Control, Design Patterns, Agile Software Development, Waterfall Development, Scrum
  • Platforms

    Windows Server 2012, Windows Server 2016, AWS EC2
  • Storage

    Microsoft SQL Server, MySQL, Redis, AWS RDS, AWS S3
  • Other

    Domain-driven Design (DDD), Enterprise Architecture, RESTful APIs, Team Mentoring, System Architecture, Software Architecture, Windows Services, Multithreading, MSMQ, IIS, Data Structures, Neural Networks, SOAP, Biometrics, SMTP

Education

  • Professional degree in Leadership Development
    2015 - 2015
    Dale Carnegie - Cape Town, South Africa
  • Bachelor of Science (Hons) degree in Computer Science
    2009 - 2010
    University of Johannesburg - Johannesburg, South Africa
  • Bachelor of Science (IT) degree in Information Technology
    2003 - 2007
    University Of Pretoria - Pretoria, South Africa

To view more profiles

Join Toptal
I really like this profile
Share it with others