20+ Years of Trying to Make Great Software

20+ Years of Trying to Make Great Software

I am working on a guest lecture for Software Engineering students @WakeForest for Monday. Today I will present a dry run for @rolemodelsoft. Here are the key ideas I intend to share from my 20+ years of trying to make great software:

Originally published on X as Software Leadership: 20+ Years of Trying to Make Great Software.

Trying

Absolutely key to success and satisfaction (which, in this world, is deeper and more enduring than happiness), is doing your best, caring about what you do and how well it is done, in a word, trying.

Throw that quasi-profound Yodaism, “Try not. Do, or do not. There is no try,” to the curb and embrace trying. Absolutely you need to take action, but if you do not allow yourself to try, you will constrain your imagination, and ultimately your action, to what you already have high confidence of being able to achieve.

Trying often takes the form of an iterative loop that I have sometimes called The Learning Engine, which has the steps: DO → LEARN → IMAGINE. Doing is essential—and often not beginning to DO is what holds people back—but without intentionally learning from the results of your actions and taking time to imagine new solutions, outcomes, and actions, what you do will be limited and uninspiring.

The Learning Engine cycle: DO → LEARN → IMAGINE

“The Learning Engine”

(The Learning Engine and the importance of Imagination are explained in this post about entrepreneurs, and highlighted in this post as the operating model of a Beautiful Business.)

Trying can be both reactive and proactive, and often requires courage. It is key to achieving success and satisfaction both professionally and personally. Be unconstrained in your imagination, but at the same time fully-defined in your actions.

Making

Making software is a always team sport.

OK, I’ll grant that in the case where you’re making software by yourself and only for yourself, that it can be a solo activity. But as soon as you’re making software that you imagine could be used by someone else, even if you’re making software by yourself, you need to start building a team. In that case the team can simply be another person who is interested in using your software. At least that’s what you need to make Great Software, which we’ll get to in a little bit.

As with any team sport, becoming your best requires constant practice and growth in three areas:

  1. Individual skills
  2. Cooperative skills
  3. Leadership skills

Excellence in individual skills can be leveraged to create excellence in cooperative skills, and similarly both individual and cooperative skills can be leveraged to produce greater leadership skills. And while it is natural for your focus to progress “up the ladder” just as your career does, you ALWAYS need to be working to improve in all areas.

1. Individual Skills

Includes:

  • Knowing programming languages
  • Understanding, using, and identifying patterns (in design and in data)
  • Learning and synthesizing
  • Practicing discipline, humility, courage, and other virtues

2. Cooperative Skills

Includes:

  • Working with someone to DO a technical task
  • Working with the team LEARN from what has happened and to IMAGINE what could be
  • Being empathetic; towards your teammates and your users/customers
  • Respecting your coaches† doing your best to execute

† Whether they be a team lead, a manager, a mentor, …

3. Leadership Skills

Includes:

  • Being proactive to achieve team goals without waiting to be told what to do
  • Considering the whole team’s effectiveness, not only your own
  • Understanding the “big picture,” identifying problems and opportunities, stepping up to address them yourself or to facilitate someone else to do so
  • “Sharing your gift,” mentoring others, “paying it forward,” being a great teammate “on and off the field”

Great Software

Great software is a great product (1), that is easy to change (2), and a pleasure to make (3).

  1. Whether you’re working on what is obviously recognized as a software product, or on custom fit-for-use software for a specific customer, your software is not great software. Great software delivers high, and increasing, benefits per cost to its users/customers.
  2. If your software isn’t “soft,” i.e. changeable, why is it even software? Great software has been built with care and craftsmanship, and so is easy to change.
  3. Can you imagine looking forward to going to work everyday, being thankful for the people you work with and for the challenges you have to tackle, and getting genuine satisfaction from making software that helps makes someone else’s life a little better than it would otherwise be? Great software is sustainable to maintain and improve, and radiates the joy of its makers to the experiences of its users.

In Summary

  1. Have courage to Try! The Learning Engine: DO → LEARN → IMAGINE
  2. Be, and become a better, teammate. Consistently practice and grow in 1) Individual skills, 2) Cooperative skills, 3) Leadership skills — whatever you do in software, you need them all
  3. Commit yourself to making great software.

Sean Kennedy

The creator of "Whatever The Heck That Means" is now based in Winter Park, Florida. Previously he lived and worked in Raleigh, North Carolina, and before that Toronto, Canada. He has been trying to make great software for over 20 years. Find him on X @AkaMacGyver.

Comments are closed.