Welcome to Tom Ulrich Consulting
Thank you for visiting my website. I am always available for consultations; however, I am currently unavailable for full time and contract work.
When I am available for full time and contract work, these are the sort of things I normally do...
I create software for mechanical systems.
I create software for controlling mechanical systems. Both my bachelor's and master's degrees are from UC Irvine in mechanical engineering. I've spent the past 33 years utilizing that education by writing software for mechanical systems.
I create documentation and data for that software.
I know how to create all of the documentation and data required to satisfy any regulatory agency (FDA, Class III and FAA, DO-178B, Level A).
I provide leadership for teams doing the previous two items.
I know how to create and lead a team to help develop the software and documentation. And if need be, I know how to fix the team. Not only have I been leading teams for over 20 years, I'm now months away from finishing a Ph.D. in Organizational Leadership. I know how to lead engineers.
And how do I do it?
I work from a blank sheet of paper.
I'm at my best when I'm creating new kinds of products. You don't want me for a "me too" product; you want me when you want to disrupt the space.
I get the details right.
It's not just that I write software; I write software that works, the first time. Talk to anyone I've worked for and I guarantee that will be one of the first comments they make.
To my way of thinking, a consultant should be part-time and used occasionally. So what do I do as a consultant? Train, Coach, Advise and Brain-storm
Is there a topic you'd like me to train on? I can come to your workplace and train for a few hours, a few days or a few weeks - what works for you?
Would you like me to meet one-on-one with someone in your organization -- just to encourage and/or counsel? I've seen a lot in the past 33 years as an engineer, and maybe just talking with someone who has seen a lot of nonsense could really be helpful.
Needing some advice? Maybe we should just sit down and talk things through? Perhaps about real-time software, perhaps about working with FDA and FAA, or perhaps just about leading engineers. I often receive the feedback that I have keen insight into people.
Need someone to brain-storm with? Or someone to lead a brain-storming session. We should talk.
Contractors, in contrast to Consultants, join the team and help do the work. So what do I do as a contractor? Lead, Design, Code, Test
I can provide leadership for engineers.
I can help architect and design your embedded system and software.
I can help write your key documents (software requirements, software design, assurance case reports, system risk analysis to name a few).
I can help code your embedded software (although I'm an expensive coder).
I can help design your approach for testing embedded software.
I can help write your tests for embedded systems (although I'm an expensive tester).
Ok, here's the secret: there is a formula to creating world class software.
Clarify what you need to do. Write down the requirements before you start designing.
Think about how you'll do it. This will inevitably involve drawing circles, squares, and lines. The idea is to get your thoughts straight before you start coding. Sometimes people call this "design".
Craft Your Code
Code with a sense of craftsmanship. It's not that I want to promote having a shame-based organization, but I do want my people to cringe when they realize their code has a bug.
Test With Determination
Test with the belief that there are bugs in your software. Start with this simple premise: all software has bugs. The purpose of testing is not to show your software is perfect; the purpose is to find the bugs we both know are in your software.
Clearly no one person is expert in all software technologies. Here are the technologies that I've spent the past 31 years developing expertise in.
Software for Mechanical Systems
Although I've spent 33 years developing software professionally, both my undergraduate degree (U.C. Irvine, 1982, magna cum laude) and my master's degree (U.C. Irvine, 1984) are in Mechanical Engineering. And the focus of my masters degree in mechanical engineering was on heat and fluids.
I love developing software and algorithms for mechanical systems: electro-hydrostatic actuators(EHA), hydraulic actuators, pneumatic actuators, electric actuators, electric motors (brushless DC/PMDC, brushed DC and AC induction), temperature controllers, pressure controllers, pumps, and various sensors.
To put that another way, I'm comfortable not only with developing the software, but with developing algorithms and doing the analysis. I'm an engineer who does real-time embedded software; not a programmer who picked up a few bits of physics along the way.
Software in Regulated Environments
I've developed multiple software systems "soup to nuts" in both FDA, FAA, and military regulated environments.
For FDA, this includes all of the Tandem Diabetes Care pumps [IDE, 510(k),& PMA]. In fact, since Tandem Diabetes Care was founded, I have been responsible for all medical device software at Tandem.
For FAA, this includes a DO-178B, Level A rudder control system and a DO-178B, Level C avionics system.
For military environments, this includes software in a sonar system and a digital vapor cycle system for helicopter.
To put this another way, I know how to generate everything (docs, code, testing) required to get clearance/approval/certification for any software system.
Software for Closed Loop Control
Most of the software systems I've developed in the past 33 years have included a control loop. My software has controlled position, speed, velocity, acceleration, temperature, pressure, voltage, current, and force.
I've done simple loops, cascaded loops, and loops with assymmetic gains. I've developed loops with proportional, integral, derivative, acceleration, feed-forward and some vector control elements.
And most recently, I am the technical lead on the Tandem Diabetes Care closed loop artificial pancreas, which is a Hybrid Closed Loop system.
By the way, I believe the most effective tool for debugging and tuning a digital control system is often a simple stethoscope. That's old-school, and that implies an uncommon level of understanding and experience.
"C" and Assembly Language
For my first seven years at Parker Hannifin, every system I programmed was in 8051 assembly. Please don't get me wrong, I rarely recommend assembly language these days: "C" is almost always the right answer for real-time embedded software systems. By the way, I recommend against C++ and Java for embedded systems in safety critical systems because of issues related to dynamic memory allocation.
The reason I mention assembly language is to make the point that I understand a wide range of details related to both the art of assembly language and the art of real-time embedded software. In fact, I taught assembly language at Orange Coast College in Costa Mesa, CA for six years.
The corollary to this is that I'm comfortable with a schematic and I know how to grab an oscilloscope and debug a complex problem.
New Approaches/New Kinds of Products
One of the consistent themes of my career is that most of the things I've worked on were either entirely new approaches to existing types of devices (e.g. the t:slim Insulin Pump) or entirely new types of devices, such as an Electro-Hydrostatic Actuator (while at Parker, I wrote the software for the world's first working EHA). To put that another way, I'm good at starting with a blank piece of paper.
You don't want to hire me to make a "me too" product. You hire me to do something entirely different.
Real-Time Embedded Software
Real-Time software is software where exact timing is essential. Too fast is just as bad as too slow. Real-Time software is usually involved in controlling physical things such as actuators, vapor-cycle systems and pumps.
Embedded software is software that is fundamentally part of the product. You're probably aware that your car has a computer controlling the engine. That engine control software is embedded software. And no, knowing how to use Windows-CE does not mean you are an embedded software expert.
It's not that I like documentation, but I am good at it. Requirements Specifications, Design Documents, Interface Descriptions, Risk Analysis and of course because I'm working on infusion pumps at Tandem Diabetes Care, I can do Assurance Case Reports.
But not Web Software