I have been programming computers for over three decades and have proven experience working with and leading highly technical and specialized engineering teams in delivering mission-critical, scalable, fault tolerant parallel and distributed systems. Over the years, I’ve learned that culture is as critical a variable as technology is in building high-performing teams.
My consulting career spans successful engagements for many Fortune 500 clients. Prior to consulting, I spent six years at Microsoft Corporation first as a member of their consulting practice and then as a principal member of the Distributed Systems group, where I shipped Microsoft Windows Server 2000 and designed, developed core replication and topology generation algorithms in the Microsoft Active Directory Service, and represented Microsoft in the Internet Engineering Task Force (IETF) for the Kerberos Network Authentication Protocol and Public Key Infrastructure.
After Microsoft, I spent nearly 9 years leading and as a contributing member of very specialized technical teams through strategic and mission-critical engagements for the Fortune 500 globally with particular attention to performance and scalability remediation efforts and in the migratoin of workloads from more traditional settings to ‘the cloud’.
I joined ipvive as their Chief Technology Officer (CTO) and a principle software engineer to design and implement core engineering discipline for our ei-OS technology in collaboration with the core research team. ei-OS combines deep machine learning with behavoior and social sciences with Internet of Things (IoT) sensors to to uniquely understand people (emotional + rationale) and deepen relationships, instantly.
Following ipvive, I accepted a position with Vix Technology as the Global Head of Engineering and Architecture where my focus was to form and lead a high-performing software engineering and technical architecture teams in the modernization, design, construction, and delivery of Vix Pulse—Vix’s strategic and fourth-generation automated fare collection (AFC) and open payments product. As a contributing member of the core engineering team, Vix Pulse successfully shipped to customers globally in 2018.
In early 2019, I joined Cubic as the CTO for one of their multi-tenant SaaS platforms. With the formation of the Cubic Transporation Systems (CTS) Platforms division, my role expanded to Chief Architect and included responsibility for all multi-tenant SaaS platforms. I am humbled to have the opportunity to grow and learn with Jim Colson, Kevin Eagan, and many other Cubes from around the world as we passionately focus to improve quality of life by optimizing mobility.
I am an AWS Certified Solutions Architect and constantly strive for increased efficiency in all I do.
I have over 24,000 hours of experience with C# over 17,000 hours experience with Java, and nearly 12,000 combined hours experience with Objective-C and Swift.
My focus over the past 5 years has been almost exclusively with algorithms and architectural patterns for the BASE consistency model witin the domain of cloud-native streaming platforms.
I have extensive applied architectural and engineering experience with parallel and distributed systems using ACID and BASE consitency models. My extreme interest in the convergence of cloud-native architecture, event streaming platform design, IoT telemetry, security, and data science have focused my attention to durable and non-durable storage technologies:
- Apache Kafka for streaming
- Apache Cassandra for non-relational, columnar orientation
- Hazelcast for In-Memory Data Grid (IMDG)
- PostgreSQL for relational
- GlusterFS for network
- Rook for object
In addition to these storage technologies, other technologies and languages in focus for me are Kubernetes, Docker, Helm, Apache Spark, Java (OpenJDK), Go, Rust, Scala, Python, Swift, Fluentd, Prometheus, Grafana, and OpenTelemetry.
SaaS at internet-scale and at a quality level commensurate with that of commercial software is very different as compared to shipping software assets to one or few ‘large’ customers. Production Engineering is a critical discipline in the equation of SaaS. The Production Engineer discipline combines DevSecOps with Site Reliability Engineering (SR) and are ‘in-sprint’ with the platform engineering team. Production Engineers are incentivized for site uptime and reliability and in full control of their destiny. They very specialized software engineers.
Regardless of programming language, I am extremely focused on Test-Driven Development and am a firm believer in its benefits. Though I strive for code coverage of 100%, I end up somewhere between 80% and 92%. The importance of measuring code coverage can’t be understated.
My classical areas of interest include cryptography and cryptanalysis, recreational mathematics, and geometry.
- System and Methods for Linking Unique Identifiers to Business-To-Business Payments United States. 15559-40
- System and Method for Layered, Vector Cluster Pattern with Trim (LVCPT). Provisional Application No.: 62/189,655
Successfully formed and led the software engineering and architecture teams to design and build Vix Pulse—a new and innovative fourth-generation automated fare collection (AFC) and payments system.
Successfully designed, engineered, and shipped Vix Pulse (2018).
Successfully shipped Microsoft Windows 2000 Server and the Microsoft Active Directory Service.
Successful shipped AccelaStudy line of iOS mobile applications.
Represented Microsoft Corporation in the Internet Engineering Task Force (IETF) for the Kerberos Network Authentication Protocol and Public Key Infrastructure (PKI).
As an iOS Developer
I prefer Swift over Objective-C. I’ll give a shout out to Charles Sieg for my interest in iOS as he and I started that journey in 2007 with Apple’s first iOS SDK while we were consulting to Deloitte Touche Tohmatsu. His diligence in many areas has heavily influenced my mobile focus.
I prefer SQLite databases for persistent storage in iOS apps. I never use CoreData but have some affection for Realm. I use GRDB for SQLite access. I mostly use socket.io client and Starscream for socket programming but also use Alamofire for networking support. I use CleanroomLogger for logging.
I use SwiftLint to clean up my Swift source code. I like source code files to all adhere to the same coding conventions.
As a Production Engineer
The discipline of Production Engineering combines DevSecOps with Site Reliability Engineering (SRE), Software Engineering, and parallel and distributed systems forensic and diagnostic analysys and are ‘in-sprint’ with the ngineering teams. Production Engineers are incentivized for site uptime and reliability and in full control of their destiny. They very specialized software engineers.
The benefits of operational environment and application automation are critical to any organization. Full automation for building all technical operations environments is of critical importance in reducing overall operational costs, reducing the risk of human error, increasing operational efficiency, and in ensuring consistent quality and enabling measurable compliance with security practices and governance.
I prefer Prometheus + Grafana + Loki + OpenTelemetry for observability in Kubernetes.
Establishing a source branching strategy for source code is critical for Continuous Deployment (CD), Continuous Delivery (CDe), and Continuous Integration (CI) activities.
Here is an interview I had with BUSRide Magazine on the benefits of automation.
As a Parallel and Distributed Systems Engineer
There’s so much to discuss about building parallel and distributed systems. My focus for the past several decades has been the convergence of embedded devices, data science, event streaming, distributed storage and processing, adaptive autonomous agents for parallel and distributed systems, and behavioral and social sciences. The technology shifts in this space even as recent as 2013 are fascinating URI.
The notion of eventually consistency is a fundamentally critical pattern to embrace when designing parallel and distributed systems as we had to do when designing the Microsoft Active Directory Service in the late 1990s for Microsoft Windows Server 2000. I recognize the importance of this pattern.
For analytics, I much prefer Apache Spark and Apache Cassandra though it’s usual to spread data across Amazon S3 buckets given Spark’s intrinsic support for Hadoop Distributed File System (HDFS). I seldom use Apache Hadoop. For production settings, I recommend DataStax as they provide superior support for system operations through DataStax OpsCenter and their distribution provides support for Apache Solr and DataStax DSE ObjectGraph, which is based on Apache TinkerPop.
I use Apache Kafka for distributed streaming of real-time events and data.
As both an architect and software engineer, I think it’s important to have depth and breadth across both Microsoft and Linux technology stacks as it allows one to expand their solution domain.
I actively invest personal time to study, research, and code to ensure proficiency in both strategic trends and systems architecture while maintaining an expert level of ability in various programming languages with Java, Go, Swift, Python, and Scala being my preferred choices. I use C/C++ for embedded systems and use C# for software that requires use of the Microsoft .NET Framework but strongly favor non-Microsoft technolgy stacks.
The importance of using the Google Protocol Buffer technology also can’t be understated as this framework provides a critical programming language and transport neutral abstraction for any system.
Much of my professional career has involved security-sensitive systems. Security can never be an afterthought when designing any system. In addition to representing Microsoft in the IETF for the Kerberos Network Authentication Protocol, I have considerable experience in building payment systems and am proficient with ISO/IEC 27001 and the Payment Card Industry (PCI) standards. Security very much influences technical architecture and design.
As an Enterprise Architect
Enterprise architecture, the holistic view of an enterprise’s processes, security, information and information technology assets as a vehicle for aligning business and Information Technology (IT) in a structured, more efficient and sustainable manner is of paramount importance to the long-term success of any organization.
Naturally, governance is an essential function of Enterprise Architecture. An architecture governance process institutionalizes the set of activities an organization executes to ensure decisions are made and accountability is enforced during the execution of its architecture strategy. Governance is about guidance and effective and equitable usage of resources to ensure sustainability of an organization’s strategic objectives and less about strict adherence to rules and overt control. It’s of paramount importance to align product and technology roadmaps so an organization has a shared and common vision and are able to confidently navigate technical decisions based upon strategic business objectives.
As an enterprise architect, I strive to balance strategy, process, people, and technology to meet a company’s strategic objectives. Understanding and working toward a desired culture is critically important when defining any enterprise architecture program.