I love discovering new things and teaching them to people.
When I was a child, I wanted to be an ichthyologist (someone who discovers fish in the ocean). I saw myself finding new species and showing them to my friends and family.
When I discovered software, I wanted to learn every language, process, and technology I could get my hands on. I helped teams whenever I could to build the best products and use the latest practices.
And so when software projects started to go bad - I wanted to discover why so I could help show people how to fix it.
I made a playlist on YouTube to share my career journey with you over 3 videos. In the videos, I explain about how it wasn't until 10 years into my career that I discovered the key skills I was missing. Once I developed these skills, I gained a lot of experience helping people break through challenges over the years that followed.
This page has a written summary of some of what is covered in the YouTube videos, as well as some expanded information.
I had already gone to University of Wisconsin, Milwaukee and dropped out of their Physics program. I couldn't stand learning from lecture halls - it felt so impersonal and meaningless coming from the small town classrooms in rural Wisconsin outside of Milwaukee.
One night my Aunt, who was going to school at a local technical college at the time for computers, recommended that I do the same. I went and saw a career counselor, and within a few short months began classes with a loan. I pursued an Associates degree as a "Microcomputer Specialist". In essence this was a combination of programming, hardware, system analysis, and communications.
Towards the end of my degree my Mother met someone at church who knew a Software Development Manager at a Rockwell Automation (at the time called Rockwell Software). I interviewed and accepted a position as a software tester.
During my early time at Rockwell I sought out older mentors and learned quite a bit about manufacturing software. One particular man showed me quite a bit about system programming and how to do things to a computer's operating system. Another showed me a lot about how to test software.
My biggest influence at the time however, was my boss. He wore a wallet chain, biker boots, and kept his hair back in a ponytail. He was a risk taker and an innovator, and he inspired me almost immediately with his energy and enthusiasm. He saw something in me early and encouraged me with almost everything I did.
Over the years Rockwell had acquired several other companies. Unfortunately, this caused our customers to have to learn and use five or so different complicated programs to do their work.
While I was at home learning, I had been noticing at the time how web sites and "windowed applications" looked completely different. For fun, I began creating a "web app" that looked somewhat like Rockwell's existing windowed applications, but it was built using early versions of the web technologies we know and love today.
The other thing I did with this side project was come up with a user interface that brought elements of the other products together. This was in an attempt to make it easier to use and simpler.
Somehow I ended up telling my boss about it and he asked me to give him a runnable demo on a CD. Soon afterwards I found out he met with the then VP of Rockwell who called it "the most strategically important project in our portfolio". We were given permission to pick 12 of the best software people across the company, and within a few months we had a team.
Everyone was excited to work with Java. I was asked by Microsoft to be an MVP for Java and COM integration. We patented an XML-RPC protocol that was essentially the precursor to SOAP. I contributed Sun Microsystem's "Netbeans" Java IDE's first plugin, on that ran the ant build system. I got several promotions, eventually to "Application Architect" by the time I was 23. I thought my career was off to a great start.
But half of my team didn't like me because they had been at the company longer, and were much older. They were distrustful of me, and it didn't help that I had no idea how to build relationships with them or help calm things down when they disagreed.
Within a short period, things came to a boiling point between I and another man on my team and he complained about me being unfit to lead the project to HR. When others on my team were asked to confirm his complaints, they disagreed and he was fired. However during the time he was there, he had sewn seeds of discontent. The CTO out of another big city in the country at the time began to feel threatened that this "team in West Allis, Wisconsin" was doing so much to push the envelope of technology and teamwork outside of his influence.
I was asked to take a trip to Vancouver to meet with a company that might partner with us on Java technology. When I arrived at the airport with my boss, we met someone who he shortly told me privately to "look out for". I signed a non-disclosure agreement at our first meeting with this potential partner. Within hours my new friend we met at the airport had pissed our client off so bad the partnership didn't have a prayer of happening. It almost felt like he wanted to sabotage the relationship.
When I arrived back home, the Director who was above my boss called us into his office. He told us he realized the non-compete we signed was drafted by Rockwell, and barred us from working on any project with Java technology for 5 years. Somehow the CTO had maneuvered us out of innovating. This was my first exposure to higher level politics in a company, and it disgusted me!
Shortly thereafter the company asked us to build a new portal product using the then-emerging Microsoft .NET framework. Our customers felt like it was too hard to keep up with our products since they all were updated at different times. Because of this our company mandated that all products needed to ship a new version and release on the same day.
Unfortunately due to more politics, the release was delayed and my boss was let go.
My boss ended up at a new company that sold watering products to the animal industry. He started building a new team and in short order hired me and the rest of the people from Rockwell who liked working together.
We were brought in to build a web application that would run on touch screen computers, mounted on the walls of research facilities. This was several years prior to the iPhone and most of the touch screen devices we have today. It was an exciting opportunity to try and figure out how to design the user interface, as the Product Manager for the product would fly to Japan and try and observe how they were using touch screens. At the time Japan was significantly ahead of the United States with touch screen adoption.
We were reading about agile methodologies like scrum, which were still very new at the time. To use them on our projects, we created a small portal site that we used to manage our work. It was crude but it gave us experience with trying to write user stories, estimate tasks, many of the other typical things scrum teams do. We really didn't know what we were doing though.
Soon there was even more political drama, and my boss was let go again. This time due to being blamed for a mistake by someone else at the company who was going though a personal challenge. I again saw corporate politics put my boss in the crosshairs, due in no part to his actions.
Next my boss ended up at a company that was struggling to ship a .NET product to market. He was able to hire me and a few other people from the prior debacle to help.
The main product of this company was a Manufacturing Execution System (MES). It allowed factory floor workers to operate the software with a touch screen.
My boss and I first identified issues with the software development process. We then built some SOAP Web Services that used the OAGIS standard. This standard was useful at the time, because it allowed our MES product to then connect to many Enterprise Resource Planning (ERP) software packages that our customers used.
I also prototyped a new application for them in ruby on rails. I left the company before this project moved forward to move out of state.
My family and I fixed up our aging house from the 1970's in Wisconsin and sold it in 2007. We moved to Austin, Texas where I have family from my Dad's side living there.
Upon arriving in Austin, I spoke with several recruiters and hiring managers about positions. One night I received a call from a recruiter for a small (at the time) consulting agency in town, Catapult Systems. I had heard some bad things about consulting, so I was hesitant.
However the interview changed my mind completely. When I interviewed, I met several people who would come to be my friends to this day. When they asked me about my story, and told me about working there - it was immediately obvious that there was an understanding of the software business here that I hadn't come across before. They convinced me to join them and I started a few weeks later.
The names of the products, companies, and people in the stories I share about the clients I worked with at Catapult have been changed to protect their confidentiality. This is an unfortunate byproduct of working in the consulting industry for a firm, you're not allowed to advertise who you've done business with!
My agency started a project with a large client in the oil and gas energy market. Their primary product collected data about drilling oil rigs. They wanted to offer a reporting product that would "bolt on" to their primary product to drive sales.
The client had agreed to use an agile delivery process, until a week before starting. When they demanded a more formal "waterfall" approach, we made a big mistake and didn't re-negotiate the contract. You can probably guess what happened next.
Over the course of 9 months, we lost money building the client a 300 page specification for a product they never ended up building. Though we tried to advise the client to use a different design, they were hell bent on having us design what was essentially Microsoft Excel again for them. Though we warned them it would be too expensive, they insisted on designing it. The project was a failure.
One of the next sizable projects I worked on was for a major non-profit that provides funding to help improve education. This was my first experience working for a non-profit, and it was an eye-opener to see how much money could be spent at a company who's business model is to give it away.
The building we worked in was brand new and beautiful. The team was great, I met a friend I'm still very close with from Catapult that made the project fun. We learned that we both liked to play music, and had much of the same perspective on life, family, and our work.
Though we made great progress on the project, there were politics. The client's head of the project was gunning for other people's jobs and we were often caught in the middle of it. Before the project ended, 3 people at the client were fired. Eventually we finished the project and handed it over to their very-capable developers at that point.
The agency didn't have a large project for me at this point, and one of our clients was upset with a poor job done by one of our consultants out of a different office. I was asked to help this client get what they needed, and to turn around their opinion of my company.
I knew I wouldn't lie, cover up for, or excuse the mistakes that were done by the other consultant. But I also knew this was not a project to show off, or take any risks whatsoever. The client's solution was a set of Microsoft project management SaaS products that were bolted together to provide a solution for managing a large number of energy improvement projects. I needed to get in and figure out what was necessary to resolve the issues, and nothing more. I didn't have time to comprehend the entire solution!
I came in, and in two weeks fixed all the issues they had. They were very pleased, and I won an award from Catapult for my service.
I had heard in the hallways of my agency that there was a particular client project we were having problems with. I hadn't heard the details until one day I was asked to meet with a colleague who had been "fired" from the client - I was to replace him.
Upon meeting the colleague, I was told that the client liked to argue, re-write work we'd done, and blame us for their bad decisions. I was walking into a fire fight.
This client's product provided tracking and behavioral data to huge companies. They collected millions of data points per day, and were having problems meeting the scale of their user base.
Within a few days of working with the client, another colleague of mine and I were asked to create a prototype. There were too young men from the east coast who had started the company, and they were our main technical reports. They insisted that moving the data into Hadoop would solve their problems.
We tried to explain that their product allowed customers to slice and dice the data in some specific ways that at that time, were not efficient in hadoop. They demanded we continue the prototype, so we built a cluster in both raw hbase and cassandra and did some testing. Eventually they realized we had provided them with good advice, and we began suggesting that one of our Microsoft SQL Server experts meet them.
In the time of our attempting to convince these two young men to start looking at the database more seriously, they began to re-write everything we would build for them each week over the weekend. They were convinced we didn't know what we were doing, so they actually put a webcam on our team of 7 developers so they could make sure we were working! To say we were upset would be an understatement. Luckily after 3 days of this silliness, they turned it off.
Our SQL expert did an analysis on their production system. What he found still blows my mind to this day. When you install Microsoft SQL Server, the database they were using in production, by default it is set to "auto-grow". What this means is when the file containing the data gets too big, the server automatically resizes the file to get bigger. This resizing process stops everything for a bit, resizes the file, then continues.
The "auto-grow" can be set to a size, and our SQL expert found this was set to 1MB! The database was basically resizing itself every few seconds - which would explain why they were using several hundred THOUSAND dollars worth of hardware to handle database I/O. Let's just say we weren't called back when they realized this.
Next I joined a small team to help a client deliver a website and platform that was to be a clone of mint.com, but for customers with high net worth. The company was based out of another state, so all of the work was remote.
Most of the team I worked with from the client was great, but you could tell almost right away they had no idea what they were building. There was confusion around the vision, the design, and what customers wanted.
Though we did our best to build the product this client wanted, in the end they scrapped it. One of the things that killed it was that the product needed to pull in large amounts of data from banks and other financial institutions. They chose to use a "drag and drop" tool from Microsoft at the time to build these data-import components. Unfortunately the technology was buggy, hard to use, and didn't deliver on the performance we'd hoped.
I was happy to get the opportunity to work downtown for a large international grocer. They had a product that was having trouble getting released. I was brought in to coach them on Scrum.
The team was fantastic to work with, and they were very cooperative. This was a surprise coming from my prior clients who were very resistant to me as a consultant and had a hard time taking any advice contrary to theirs.
After coaching the team over a few sprints, I pulled back the sheets on their deployment process. It was severely lacking. Production deployments were 100% manual, done on the weekends and only a few times a year.
I began reading the book on Continuous Delivery, and immediately started selling the benefits to my client. While I was there, I and another colleague from my firm began using Microsoft Windows PowerShell to automate deployment and release of their product through the typical quality and environment gates you'll find in a Continuous Delivery deployment pipeline. At the time there were no tools for this on the Microsoft platform, so I had to build my own.
The next large project I worked on was for a client who helps college students find housing. The publicly traded, profitable company was hitting issues with scaling. To server their customers, IT had to manage 6 large applications that were written separately and were now tightly connected to each other.
I was asked to come in and do a few things. First, I was supposed to evaluate the maturity of their software delivery process. Second, I was to prototype the use of an Enterprise Service Bus (or Egregious Spaghetti Bus if you go by Martin Fowler).
I essentially ended up building micro-services on top of each of the systems that would publish and subscribe to messages from the bus. The architecture was well received, but the company didn't have the time, money, or priority to pursue a broad implementation just yet. I used the same interviews and maturity evaluation I had at the prior client.
Over the next year, another colleague of mine was working at a major computer hardware manufacturer in town and began to tell them about the single page application work I'd done. I arrived and gave a short presentation and demo, and the company began using these technologies on projects.
Eventually, I was asked to help the team. When I got there, my colleagues had significantly advanced the technology - bringing in other modern frameworks at the time like backbone and knockout. There was a "religious war" between our team and another at the company as to whether the products should be moved to angular. I completed my work on the project before the decision was made.
Over the previous year, my agency began investing in offering business intelligence and "big data" solutions to customers. I had been given opportunities to work on them, but was too busy with other clients at the time.
I jumped at the chance to work on a team with a colleague who we hired just for the project. He brought a SaaS product he built for rapidly creating data warehouses and years of experience with BI. I had found a mentor.
The client was in the health provider space, and they had hired a prior vendor to build some dashboards to help their executives have more data points to inform their decisions. Unfortunately, after spending a huge amount of cash and having nothing to show for it, they fired the vendor.
So when we started this gig, the client was very distrustful. They did their best to stay open, but we could feel with most interactions that they were still very much hurt and on the defense to have it happen again - understandably so!
Through the use of a platform that was created by a colleague at the time who then went on to expand his business, we were able to deliver the project in 9 months. We accomplished this through a combination of the LeapFrogBI platform for data transformation, and powerdelivery for automated deployment. Within a few weeks we began doing intra-day releases, often up to 10 times a day to production!
Following the success of our prior big project for the health care provider above, we found a local client that offers health insurance brokerage and analysis services that needed help. This client's primary problem was that their staff were experts in one source of health insurance data (of which they had 13 at the time) and so training new people could take as long as 9 months!
We found significant "dirty data" in their product and helped them prototype the use of several data quality and data cleansing products to get more accurate results. We also used master data management solutions to deduplicate and match common records across different health provider's data. In the end, their training needs went down from 9 months to 1 week! Though we ran into some delivery problems due to staff changing in the middle of the project, it was ultimately a big success for the client.
I was asked to lead a team that would create the software to run on an embedded device for charging cell phones in bars and other entertainment locations. The product was built with WPF, Caliburn.Micro, Azure, and powerdelivery.
As with the prior project, we began doing intra-day releases to the physical machines to get rapid feedback. Unfortunately, the client did not have the budget to complete the project and so it was canceled.
A project that was in trouble at my agency needed my assistance to deliver. The technology stack was a combination of AngularJS, Phonegap, and ASP.NET Web API. This project provided me with some experience with promises, and the bundling of an HTML app to deliver on mobile. It also used bootstrap for styling.
A State and Local Government client based in Austin needed a solution for ingesting, cleansing, transforming, and reporting on large quantities of data for use by several government agencies. They put out an RFP and my agency won the bid.
The project was one of the first in the world to use Microsoft's Cortana Intelligence Suite (in beta at the time) - AND on the "private" government cloud. Though we did not use every feature of Cortana's platform, the project was a success. Once initial patterns were in place, I rolled off before it was complete to help with the project below.
My next client had an extensive SaaS web application that provided document management solutions for their clients in the education space. Their competition offered iPad applications, and so they chose to hire my agency to design and deliver one for their product as well. The technology stack was Xamarin, iOS, ASP.NET Web API, Identity Server 3 for authentication, and PDFTron for PDF document editing and annotation.
During the project, I was the sole developer and began releasing builds to their beta users several times a day after 2 weeks of development. I met a brilliant woman at this client who built the server API after I designed it's specification with swagger. She built a full test suite that was able to verify correct operation of the API in under 1 minute!
Though we encountered challenges with how Xamarin was managing memory that eventually caused us to use a support ticket - the project was a success. In the 10 months following their first production release of the app, it only crashed once!
I was born in the Detroit, Michigan area and lived there until I was 10.
I moved to Genessee, Wisconsin and lived around the Milwaukee area until I was 31. During that time I played guitar and sang in a few bands, attended college, met and married my wife, and had three children.
I now live in Austin, Texas with my wife and kids. When I’m not working or spending time with my family; I like to ride road bicycles (recreationally). I also still play various instruments and write songs from time to time. I'm currently helping my wife with starting up her fitness and wellness business - as she gives me advice on my coaching program :).