top of page

FMCSA

Software Architect, .NET Developer (2023)

Overview

The United States Department of Transportation (www.dot.gov/about) includes the FMCSA (Federal Motor Carrier Safety Administration), which regularly updates 2 files: the registered device list and the revoked device list.  Both lists are similar by structure, but have some differences (and, of course, list are consisted different devices). These lists can be accessed via URL through a simple GET request.

fmcsa.jpg

Goals

Retrieve device lists from FMCSA after each update, parse them considering all described nuances; reorder local lists if necessary and save them. Subsequently via web part or via web API we should showcase list of devices in correct order, with filtering capabilities and a history of changes (showing additions, reorderings, etc., in each new file). Additionally, provide the ability to locally extend information in our database.

Goal-Setting.jpg

Idiosyncrasies

As is typical for any government agency, they update it not always accurately :) They may mix up records (and typically correct them later, in the next file)

They can update files at any time

Tasks that I, as a developer and project architect, have faced:

Because they may mix up records (and typically correct them later in subsequent files), we need to identify devices that are the same as those in previous versions of the file (list)

There is no way to identify a device by a specific field alone, we have to analyze and compare a set of fields and consider the device's position in previous lists

We need to correctly identify when a device has been modified and reordered, ensuring it is recognized as the same device rather than mistakenly treated as one deleted and another added

Implementation

Technologies:

  • .NET Core

  • Azure SQL

  • Azure Functions

  • Entity Framework Core

  • ASP.NET Core & Web API

  • KendoUI, jQuery

The main efforts in implementing this project were focused on identifying devices. Since there are no concrete rules for identification, we had to analyze the entire new set, compare it with the previously downloaded data, and determine whether the device is new or possibly modified and/or reordered.

Because the two types of files are similar across the entire solution, abstract classes are employed for each responsibility, providing foundational functionality that are inherited by specific classes.

The device ordering is implemented as a singly linked list (each device stores the ID of its predecessor), allowing for easy and quick reordering when necessary (simply by changing predecessor references).

Responsibilities

Design Project Architecture: Develop a scalable and reliable architecture for retrieving, parsing, and managing FMCSA device lists, ensuring integration with both backend and frontend components

Backend Development: Lead the backend development to handle the retrieval of device lists from FMCSA, including parsing the lists, updating local data, and ensuring that the system correctly reflects changes

Frontend Development: Create and maintain the frontend interface using Kendo UI, including active use of Kendo Grid and Charts to showcase the device lists in the correct order, with filtering capabilities, and a history of changes, including additions and reorderings

Code Quality: Produce clean, efficient, and maintainable code that adheres to project specifications and best practices

Testing and Debugging: Conduct thorough testing, debugging, and troubleshooting to ensure the backend and frontend components work correctly and efficiently

Data Management: Implement solutions for local data storage, allowing for the extension of information in the database and managing updates to the device lists

Change History: Develop and maintain functionality to track and display changes to the device lists, including additions, reorderings, and other modifications

Web API: Implement a Web API for all features of the application, supporting RESTful principles

Documentation: Create and maintain documentation for backend components, including architecture, code, UML diagrams, and Swagger for Web API documentation

bottom of page