Theory vs. Practice: Delivering Real World Software

Theory vs. Practice: Delivering Real World Software

On Friday I attended a panel discussion titled “Theory vs. Practice: Delivering Real World Software” at the New York Law School put on by CUNY TAP (Tech Apprenticeship Program). The event featured 6 speakers from the software industry who spoke about their career experiences to an audience of 100+ students and software practitioners. I was expecting a lively debate on competing methodologies and theories used in the industry (i.e. Waterfall, Agile, TDD, Scrum, Kanban, etc.). Instead, each panelist spoke from the heart about their most painful experiences that defined who they are today:

  • Eli Goodman, a senior engineering manager at Etsy, says “don’t assume you know better than users.” As an example, his team spent nine months to develop a very complex real-time browsing features, only to find that customer’s didn’t even use it! He recommends that programmers follow a balanced approach to personal development: do crazy, bold side projects but also keep yourself grounded by contributing incremental improvements to open-source work. When it comes to accounting for technical debt (code refactoring), he recommends to let it come naturally in ebbs and flows.
  • Toby Boudreaux, CTO at Control Group, says “cater solely to what customers actually want, not what they say.” However, he cautions that this must be balanced by salesmanship to convince the alpha males in the C-suite that their own self-confident ideas might not be correct. He also recommends a healthy dose of humility: “When you think you know something, go get drunk: you don’t know anything.” At the same time, believe in yourself: “Have the confidence to know that “dumber people have done this.” Tony cautions about hiring excellent but inflexible engineers: “Having someone who is really brilliant about solving a particular and wanting to turn everything into that problem is not very helpful”. Finally, a word of encouragement: “Every day when you leave, ask yourself if this was the best day of your career. If not, make the next day the best day of your career.”
  • Bernie Kravitz is the CTO at and has a very Steve Jobsian alternative background. He studied computer science in college and had an existential meltdown: “I couldn’t handle Alan Turing!” He then ventured into liberal arts and alternative career paths such as comedy. He credits his unique life experiences for giving him unique perspective to software development.
  • Gabriel Spil is a XBox manager at Microsoft, where he started in 2001 by bringing the Windows CE development toolset in-house. There he was an early adopter of Agile and brought in TDD, Scrum, and Scenario Focused Engineering. Gabriel highlights the importance of automated unit testing, the lack of which is a huge drain on productivity: “It would take 10 days of manual testing to test 2 days worth of features”. Unit tests also have problems (bugs, race conditions), but they do provide a certain safety net. Gabriel is a strong proponent of TDD because it forces developers to look at the code from the client’s perspective: interface-driven and outside-in.
  • Peter Bell is an evangelist and hacker for hackNY says that “Great code doesn’t always equal a great product.” He strongly recommends a book by Don Reinerstein called Principles of Product Development Flow. Peter is a strong proponent of failure, provided that you fail early, often, and inexpensively. Ideally, you maximize your learning when you fail about half the time. To insure the right amount of failure, it’s important to proceed at the right pace: not too fast, not too slow. He says that a CTO’s job is to slow down and speed up their team to keep a consistent pace of 40-50 hours a week.
  • Adam Milligan is a former Director at Pivotal Labs, a development shop known for its commitment to XP (Extreme Programming) practices such as pair programming. He likens pair programming to constant conversation and code review, which is essential because “writing software is like getting a group of people to write a really good novel.” Adam says that programmers need to be constantly improving themselves: “If you don’t look back at code you wrote a year ago and hate yourself for it, go become a gardener.” To do that he recommends learning various different programming languages.

The speakers were all very humble and honest as they spoke of their often epic failures. Mediator Art Chang even pointed out after a while that “the single word the panelists we are hearing the panelists use most often is failure.” Indeed, there is a notable humility in the US software industry that is hard to find elsewhere. Very rarely do executives brag about how big or how often they failed. Perhaps it is the ephemeral nature of software that makes that possible. After all, code is abstract and can easily be changed or updated in a fast, iterative process that cannot be matched in standard manufactured goods. Thanks to the panelists and to CUNY TAP for organizing this event!

About Martin Rybak

I am a New York area software developer and MBA with 10+ years of server-side experience on the Microsoft stack. I've also been a native iOS developer since before the days of ARC. I architect and develop full-stack web applications, iOS apps, database systems, and backend services.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: