Self-Engineering. Chad Fowler (VP Living Social).

Engineers create abstractions, measure things, change things that have been built, deal with abstractions, anticipate failure, organize stuff, argue passionately.

If you don’t anticipate failure, you are not building good software.

“The only great programmers are the good programmers with great practice.” - Chris Parsons

Programmers really care about getting things right.

We sometimes prioritize working long hours over life satisfaction and spending time with family. We all are looking for one thing. We are all looking to be happy. Happiness is the ultimate altruistic goal for everyone.

happiness = food + shelter + personal relationships + career

You are a complex system. Your career is a complex system. Your health is a complex system. Your personal relationships are complex systems.

Products of engineering:

  • Complexity
  • Abstraction
  • Experimentation
  • Measurement
  • Decomposition
  • Failure/resiliency
  • Change
  • Ownership and control

The E-Myth revisited - Why most small business don’t work and what to do about it - Michael E. Gerber

“Your organizational chart is like the grand scheme of your business.”

Start thinking about your business as a system. Even if you are the only employee and you are putting your name in every position, it helps to start thinking about the system.

The Passionate Programmer by Chad Fowler

Product management involves:

  • Choosing your market
  • Investing
  • Execution
  • Marketing
  • Refreshing

Your career is a product. What market do you want to be in? Once you figure it out, invest in your product. Execute on it. Market it. Then refresh your product line.

Product development:

  • Requirements definition process – What do you actually want? 
  • Do you have a list of what you want? What are your requirements?
  • What does happiness mean to you? Turn it into measurable functions.

Process:

  • Agile.
  • Small pieces.
  • Re-prioritize as you go.
  • Do the most important one first.
  • Long, rigid plans lead to disappointment.
  • When the requirements are complex, true agility is a necessity.

Agile involves asking three questions:

  1. Where do we want to be?
  2. Where are we now?
  3. How do we improve our position?

Don’t measure the process. You may be delivering X velocity points in Pivotal Tracker but how do you know the stories are valuable? Measure the results of the process, not the process itself.

Design:

  • Change involves simplicity, abstraction, decomposition. 
  • Kent Beck’s rule for method decomposition: “Divide your programs into methods that perform one identifiable task. Keep all of the operations in a method at the same level of abstraction. This will naturally result in programs with many small methods, each a few lines long.” -Smalltalk Best Practice Patterns 
  • Single Responsibility Principle, Bob Martin - Every object should have a single responsibility, that responsibility should be entirely encapsulated in the object’s class.
  • You don’t have to do everything yourself. You can outsource roles once they are well defined.
  • Your models are inherently wrong: get over it. Your design is wrong: “don’t hate, iterate” –@dpan
  • “syntax naming versioning and whitespace are fertile ground for bikeshedding, the manure for delay and strife”. -@fogus
  • Re-use the patterns.

Resiliency and failure:

  • Erlang is built around the concept of failure and resiliency.
  • Fail early and correct it.

Testing: Executable Assumptions

Experiments:

  • TDD/BDD, write an assertion, make sure it passes. Life is like this too.
  • “I’m good at everything, I just fail silently often and only tell you about the successes” -@chadfowler
  • “Premature optimization is the root of all evil” 
  • “Pornography: I’ll know it when I see it” -Justice Potter. Not measurable.
  • Engineers want things to be measurable.
  • Living Social doesn’t let engineers create products unless success is measurable.

Monitoring:

  • The worse things get, the less likely we are to measure them.
  • Use statsd to detect when things go out of spec.
  • Have an information radiator. A screen of big visible charts where all can see.
  • Big visible chart for a big visible belly
  • Calendar alerts: every day, do something, e.g. learn something about functional programming for 10 minutes 

Make it outsourcable: document, communicate, delegate, measure.

After making $75k/year, money stops mattering, but we still think it does. If you are already making $75k/year why aren’t you happy yet? You probably haven’t figured out what you want and are not approaching problems in the right way. - Paraphrasing Justin from justin.tv

Full video from talk available from Chariot Solutions.