Simulate Hardware With Tests

I’ve long been fascinated by the idea of automated testing of production software. The problem I faced in implementing anything like “automated testing” was that I couldn’t figure out how to do it with embedded firmware. Writing firmware can be tricky. There are often dependencies that you can’t control. Typical problems include:  How do you […]

Flawed Conclusions

I once heard about a researcher that was studying a rare breed of frog that had some incredible jumping abilities. On a good day, with wind at its back, it was said the species could jump a good 30+ feet. This may not sound impressive to you but… for a frog? Trust me, it’s impressive. […]

Polishing the Curves

Tell me if this has ever happened to you. When going over some code, I discovered a chunk of “working” code that had an incredibly … amateurish implementation. The sad part wasn’t that the code-quality was poor. No, the sad part was: I was the fool that had written it. In my defense, these perceived […]

Version Control is a Solved Problem

There are a lot of really interesting open problems in software but there’s one problem that I keep seeing professionals walk into that deserves a mention. Not because it’s an unsolved problem but because it has actually been solved. Many. Times. Repeatedly. Let me cut to the chase. If you write software, you need to […]

Optimize Second

When I was first starting out as an engineer, I was tasked with a job that sounded easy but quickly became a challenge for me. I was working with a senior engineer to develop a embedded controller for a piece of proprietary hardware and our system requirements called for frequent polynomial fits based on raw […]

Ideas Are The Easy Part

A friend of mine has a really neat idea. He wants to develop an online tailoring service that will leverage skilled people overseas to produce suits and clothing for people here in the U.S.A. In case you’ve never experienced custom made clothing, the fit is truly amazing and will almost always leave you wanting more. […]

Iterative Personal Development

The road to greatness often comes with a lot of polishing. This is how I write software. I start with a simple chunk of code and gradually write software components, refine code, and tweak the solution until it results in something that solves the requirements as gracefully as possible. It’s awesome to realize this is […]

Be Transparent

My sister and I have chosen incredibly different career paths. She does graphic design for a multinational corporation and I… Well, I have chosen the path of writing software. Over the years, it’s been fun to discover places where ideas from our professional lives intersect into each others’ fields. Two of these realizations came to […]

Consider The Customers

It often surprises me when my fellow software engineers seem to forget our customers when designing software. There are at least three major customers for any piece of software and it pays to remember their needs with every software project. The first group of customers are our bread-and-butter. They are the users of the software; […]

Who Needs Goals?

A while back, while working for a former employer, I was called into my manager’s office. It was “annual review time” and my manager had decided one-on-ones were the order of the day. The review itself went well. I had great input from my teammates and had a green light for a promotion in the […]