Good Software Developer - Bad Software Developer

I came up with the following while reading Ben Horowitz’s book The Hard Thing About Hard Things. I highly recommend reading the book.

He has a section in the book where he talks about setting standards for his team of product managers. Here is his original document. Below is my adaptation based upon the standards I would have in place for any software developer working for me. Note, the last two are taken directly from Ben’s list.

A good software developer assumes that the Client is an expert in their field, and that she is a very intelligent person. A bad software developer assumes that the Client does not know what she is talking about because she doesn’t understand technology.

A good software developer makes expert suggestions about technology and design options. A bad software developer tells the Client she is wrong.

A good software developer communicates clearly in a way that is native to the listener. For example, if she is talking with someone on the East Coast, she will go out of her way to provide times for the Eastern time zone. A bad software developer communicates using technical terms and jargon and expects the Client to make the effort to understand her.

A good software developer creates software that is simple and powerful for the Client to use, despite the complexities in initial development and maintenance that that may entail. The software she creates will be used many times per day, and only created and maintained a handful of times. A bad software developer creates software that is easy for her to create.

A good software developer makes opinionated decisions based upon expertise, experience and knowledge of the business and client. A good software developer owns the “how” of creating great software. A bad software developer asks for a detailed specification for every decision and stops moving forward until she gets it.

A good software developer knows that sometimes you have to incur technical debt and you always have to pay it off. A bad software developer ignores technical debt, leading to shortcuts, fragile solutions and a future of putting out fires.

A good software developer asks questions. A bad software developer makes assumptions.

A good software developer builds the best possible solution for the Client. A bad software developer builds either the easiest possible solution for herself or the funnest possible solution to build.

A good software developer adopts new technology as it makes sense. A bad software developer either sticks with the same technology long after it is relevant or flits around between new technologies like a hummingbird.

Good software developers err on the side of clarity vs. explaining the obvious. Bad software developers never explain the obvious.

Good software developers define their job and their success. Bad software developers constantly want to be told what to do.

Speaking The Language

On a recent episode of the Critical Path, Horace asserted his belief that the first year of business school is to teach students the language of business. If you don’t speak the language of the business world then you will have a much more difficult time getting your point across to other people and will quickly get lost in a roomful of business folk.

I used to think the idea of knowing the language was useless. That may be because I am good at understanding things from context clues or just because I hate giving into “common wisdom.” But looking back on some of the things I’ve taught myself, the first thing I had to learn was that common language.

Let’s take learning development for the iPhone. I had to learn what all the different controls – the icons, text, buttons, tables, etc – were called before I could use them. I had no idea what the difference was between a UINavigationController and a UITabBarController. Not knowing that is extremely limiting, especially in a time where the answers to most of your frustrations are just a Google search away.

I think I have to concede to common wisdom. Learning the language has to be the first step in learning something new.

Losing Faith In Myself

Tonight I realized that I’m losing faith in my ability to impact my daughter’s life. I want to encourage her to crawl, walk, potty train, and eat and drink on her own. She only spends every other weekend and Wednesday nights with me. I fear that that just isn’t enough time for me to push her forward on those things. They require consistency that I just can’t provide on this schedule.

I’m terribly saddened by this thought. I’m disappointed in myself – I feel like I’m giving up. Not on her, I know she is capable of everything she puts her mind to. I’m giving up on myself. On my ability to be more than a relative she sees every other weekend.

I’m not looking for sympathy – I’m just sharing my pain with the world. I put myself in this situation and I knew it would be hard. And I continue to have faith that I’ll be able to shape her life as she grows up – especially once we can sense each other’s souls. Right this moment is just a bit of a low point.

Technology For The Real World

As a technology enthusiast it is fun to get caught up in the cutting edge technology and latest gadgets. Most of the time I live out of touch with how “real” people use and feel about the whole technology world. I’m lost in my shiny, minimalist world that doesn’t have the usual real world constraints.

Nothing has really been at stake with things I’ve designed before – I design applications that had utility beyond what they looked like so their design didn’t matter as much. My latest challenge is designing for the real people. The design is everything. A small business is at stake. Will my design do its job and connect with those real people?

This role is invigorating and surreal. If we fail a person may lose their job. But if we succeed then we could change a good man’s life. He has put his trust in us.

Ideas Within Ideas

I believe that saying one coherent thing in a blog post means leaving or cutting out most of the detail. I picture it like this – everything I write is like a map at some level of zoom. If we are zoomed all the way into the city of Denton, Texas and describe everything in it then we will not be making a coherent point. What we write will be mostly boring. So we would zoom out a little on the map and just describe the essential things to make our point to describe the essence of Denton.

But if we zoom into a detail about Denton – maybe the animal shelter – then there is a whole new coherent story to be told. At that level of detail we have to leave out the rest of the information about the city. We can zoom closer still into the story of one of the dogs at the animal shelter and still tell a coherent story. The amount of detail corresponds to the size of the thing we are describing.

This follows onto my point a couple of days ago about finding new topics in old ones. Adjust the zoom a little and you have an entirely new story to tell.

Bullying Is Never OK

In my experience, one of the worst things about being bullied is my internal voice saying “you’re over-reacting, it is no big deal, she isn’t being that mean.” That internal voice is wrong. If you are feeling bullied then the situation is not OK. Sometimes you should tell the person that you don’t appreciate the way she makes you feel if it is safe to do so. Maybe she doesn’t know what she is doing.

But it is likely that she does and that nothing you say will make her change. It is not your obligation to make her change.

Then we have situations like what is happening to females in the gaming industry. They are receiving real life death threats because they talk about what they believe. Sending someone death threats because you disagree with them does nothing to further your cause. Calling someone names does nothing to further your cause. No matter how worthy the cause those tactics will not spread ideas or change minds.

I don’t know how to help Brianna Wu, Anita Sarkeesian, and Zoe Quinn. I wish I did just as many other people wish they did. I’m going to start by openly saying “that is not OK.”

Finding More Things To Write About

My biggest concern when I started writing a blog post every day is that I would quickly run out of things to write about. As I’ve described before, it is easy to try to think through everything before starting it and impossible to actually think it through. Our minds just can’t look that many steps ahead and there are far too many factors to take into account.

As I’ve been writing every day I have only had a few times when I didn’t have something I wanted to write about. I won’t say that everything I’ve written is good or even that everything I’ve written isn’t awful. But most of the time I’ve had something I wanted to write about.

Along the way I’ve come up with an idea of what to do when I get stuck – I’ll start with an idea that I’ve already had and go into detail about one of its components. For example, I’ve written recently about male and female stereotypes that are portrayed in fairy tales. From this topic I could show specific situations in specific fairy tales to further strengthen my point. Or I could describe characteristics about myself that seem to be influenced by these male and female stereotypes.

Just knowing that I have a system to come up with more things to write about takes pressure off and seems to make it easier to come up with new things.

Excitement, Excitement, Fear And Responsibility

Closing the sale, making the plans, then realizing “oh shit I have to follow through on this.” I find that the first two are so much fun. Dreaming about how much you can help these other people. Then finding out that she believes you can help her too. Then making plans together – the future is wide open!

These parts are fun because you have no responsibility yet. You don’t have to deliver, after all no one sells them all. You haven’t made any promises yet. You have no commitment to her.

But then everything goes to plan and you get the opportunity you want. Embrace the fear. Feel it in your belly and go forward. It will pass. It won’t be easy and at times you may think you can’t do it and you may want to give up. But if you keep moving forward you will succeed.

Greeting The World With Generosity

Probably my favorite thing about starting a company is that we get to decide the rules. I don’t like the traditional business rules – things like super-secrecy, cutting corners, maximizing profits, and pushing yourself ahead at the expense of someone else. This new company is part experiment – can our ideas of how a company should be run work in the real world?

One of my strongest principles in life is that I should approach any situation with the question of “what can I give to this” rather than “what can I get out of this.” I believe that this attitude has served me well personally. Generosity brings me joy and takes my mind away from what I want.

Our new company will follow this same principle. We will share more about exactly what that means soon and we will share what we learn as we go. It is going to be a fun experiment.