I have been working in the software industry in Atlanta for 30+ years in a variety of positions, spanning all aspects of producing and marketing software products and services, including product management, software engineering, quality, automation, DevOps, and business development. My strengths intersect with mobile and web technologies.
I have produced many types of software products, with distribution channels spanning SaaS, OEM licensing, online sales and hanging on a peg in an electronics store. I have produced software for many different platforms including web, mobile, embedded, and desktop.
I am a seasoned technology leader having managed large teams of software development professions. I am also a hands-on developer-manager when needed, and can build and lead teams that incorporate full-time, contractor, local, near-shore and offshore resources spanning the necessary disciplines required to produce a software product or service.
- Launching new software products using Lean Startup techniques
- Designing and building complex software applications ranging from mobile products to desktop applications to SaaS web applications
- Leading, building and scaling interdisciplinary teams that are distributed globally
- Creating force multipliers with outsourcing while protecting intellectual property and core skills
- Transforming organizations using Agile development methodologies
My Back Story
I went to High School in Griffin, Georgia, a small town of approximately 23,000 people in central Georgia in the early 1980’s – before the public Internet, before Google, and way before coding boot camps.
For some unknown reason to me, there was an Apple II computer in a book storage room next to one of my classrooms. I was fortunate in that I could go in there to play around on that Apple II.
The Apple II shipped with a few things in the box: a user manual, a few programs including a simulation game called Lemonade Stand, and a Basic Language Programming manual.
The Lemonade Stand game was simple: determine the optimal amount of lemonade to produce each day based on what you think the weather conditions would be for that day – produce enough and you make a profit; produce too much and you lose money. The game was really entertaining. It had graphics and animations and really good music (for the time). I played the game a few times.
But the game was just the start. The Basic Language Programming manual that was included is how I learned to program. I studied the manual and learned the language and started writing my own programs. I was really into creating my own games, especially space games (I had recently seen Star Wars in the theatre). I figured out how to animate graphics using sprites, so I turned my attention to producing music and sound effects.
I tried reproducing the music from the Lemonade Stand in my own Basic programs, but I was unable to do so. What I got sounded nothing like what I heard in the game – it was too slow and just plain awful! So, I studied the game’s source code (it was included) to learn how the game did it.
It turns out that the game authors were very clever and very knowledgeable about microprocessors. They were not using the Basic language to play the music, but were instead using the native language of the microprocessor to do it, the native instruction set, the so - called Machine Code. So I dug in a little further, and decoded the machine code of the microprocessor (without any information on the microprocessor) and figured out how to reproduce the music myself.
Now, once I learned about machine code, the Basic Language was boring and slow by comparison. There was this other world that I had discovered hidden in the Lemonade Stand. I was in on a secret trick of how to make really great software. This experience opened my eyes to what was possible with a simple computer, and I never thought about computers the same after that.
Fast forward to 1987 when I was a computer science student at Georgia Tech. I was taking an Artificial Intelligence class and the professor mentioned some computing problem that was hard. I muttered under my breath about having solved the problem on my personal computer in my spare time. Someone nearby overheard me make my cheeky remarks and stopped me after class to ask me about it. It turns out that my eavesdropper was Doug Armstrong, a student entrepreneur who had started a product design company at the Advanced Technology Development Center (ATDC) at Georgia Tech. He invited me over to his office to show off some of the projects they were working on and he offered me a programming job on the spot! So there I was – a college sophomore getting paid a salary to write software using what I learned by playing and hacking the Lemonade Stand game.
If you’re curious, and want to try your luck at Lemonade Stand, you can play it here: Lemonade Stand Online.
If you’re REALLY curious (and a bit geeky like me), play the game and then press ESC to exit. When it asks “WOULD YOU LIKE TO PLAY AGAIN”, answer no. You are now at a command prompt for the Apple II emulator (it’s a “]” with a blinking square cursor). If you enter the command LIST, you will see the Basic source code for the game scroll by! If you type LIST 11000,12000, you will see the actual code that inspired my lifetime journey on line 11720:
POKE 768,I: POKE 769,J: CALL 770
I can’t remember which is which, but I and J are variables that represent the frequency and duration of the musical tone to play.
I’ve never met any of the people responsible for Lemonade Stand – all I can do now is send them my thanks. So here is my sincere thanks and gratitude to the late Steve Jobs, and Steve Wozniack for creating the Apple II, and a big thanks to Bob Jamison who created the original game and Charlie Kellner who made it work on the Apple II. If you know any of these people personally, please tell them I said thanks and that I am forever grateful!