Hacker News new | past | comments | ask | show | jobs | submit login
Joel Spolsky's latest Inc Article: How Hard Could It Be?: The Unproven Path (inc.com)
61 points by prakash on Nov 4, 2008 | hide | past | favorite | 27 comments



Summary: Joel Spolsky discovers that people matter more than processes.

I use fogbugz for my start-up's bug-tracking, and that's something I've "felt" through the application - Joel Spolsky (and, by extension, Fogbugz) believes in what I'd call the "analytical" approach to software development. I know that works for certain kinds of projects - I come from a big consulting background, and I've seen large projects being successfully delivered with those methodologies.

However, I think a not-so-new approach that also works, albeit with smaller teams, is the "just have a handful of super-productive guys with a loose mandate and good motivation" approach. This can be called "agile", but it's not quite that. Agile is not a lack of process - on the contrary, Agile can in fact be more process-heavy than traditional methodologies! This "put great people first" approach is what I'm using on my current start-up, and I believe it works great. You don't know where you're gonna end up or when, but you know that it'll be a great place and that it would have been impossible to plan your way there.

I wonder if larger corporations will ever adopt this model of development (which, imho, is far more effective, though so much less controlled).


I think it's also important to consider the nature of the project they were working on. It was a medium sized project that is applying already understood ideas (digg-like voting, wikipedia-like editing) and applying them to a new domain (programming), which the developers were very knowledgeable about. Also, it was building a website with a powerful and reliable development stack that they already knew so they could build it quickly. That type of environment lends itself nicely to small teams and quick turnaround times. And because the team was small and all the problems were well understood, there didn't need to be as much communication overhead, and they could overcome being in different locations. Finally, because their software only had to run on one machine which they controlled, a large source of bugs and complexity was eliminated.


Certainly, but the app I'm working on is not such a well understood problem domain, and yet we're working well under similarly distributed and chaotic circumstances.


just have a handful of super-productive guys with a loose mandate and good motivation

I once joined a startup that fit this description. The team included the best programmers I knew in the city, and the CEO was (is) the best person at picking talent I've ever known. I believed, and still do believe, that people are the most important thing, so I wasn't too worried about whether the initial idea would work out. A good team would simply adapt, and this was going to be the best team I'd ever been on.

It didn't work out that way at all because the leader turned out to be... well, if I described how he was, you might not believe me. So let's just say I learned a lesson: the ability to find good people and the ability to lead them are two completely different things, and you can have one without the other. This team never had a chance to get off the ground.

This doesn't contradict what you're saying, but for me it's an important thing to add to the "put great people first" approach.


Please describe how he "turned out to be...". It will surely help others avoid it.


He turned out to be abusive and incapable of collaboration. He would say things like, "From now on, nobody except me makes any creative decision. If you have a creative idea you need to clear it with me first." I know it's hard to believe, but that wasn't a joke.

I'm trying to remember some representative anecdotes for you... for example, our receptionist made the mistake of sending out an investor email without bcc'ing, so the email addresses were all visible. He made her handwrite a note that said, "I apologize for violating your privacy. [The CEO] has instructed me on how to properly send email. I will not do it again" - and write it out 90 times - and mail them to each investor. (You may ask why there were 90 investors... another story.) She told me tearfully that she got RSI from writing out the notes.

Anyway, imagine a whole bunch of examples like that and you'll get the picture.

It was fascinating to observe how the different team members reacted to this person. Most retreated into a shell and didn't speak up as he abused others. There were a few scapegoats who accepted prolonged terrible treatment. There were also a few who acted courageously. For example, when the CEO yelled at one designer for leaving work on a Sunday and told him he would have to apologize to everyone for "letting down the team", the designer said, "In that case, I won't be back" and left. But these latter were a small minority.

It will surely help others avoid it.

Maybe. Sometimes one has to experience things for oneself. The key thing I would say about all this is: if someone is abusive, it doesn't matter whether he's abusing you. What matters is what it tells you about his character. Don't make excuses for people like that. Just avoid them. (Counterargument - Steve Jobs?)


Was the leader too restrictive, or did he not maintain important boundaries and directives?


Come to think of it, he was both. He was restrictive (a control freak) and also changed strategic direction at least once a week. I once tried to convince him to let the team go two days at a time without having their project changed, and he refused!


I like to call this cowboy development, and it works well for some of us. I'm not sure it's suited to all people or environments. I think most coders have developed an application this way and it worked well because they were ecited about it and there were no porcesses to slow them down.

If you're working on your own thing, or you have a client that trusts you, it can blow away other development methodologies. I hear about TDD and BDD, agile this, etc. all the time, but I bet most coders who build something on their own don't actually start with tests etc. I just think that those who do are very vocal about it.

One big issue though is usually documentation. Once you're done, you get the huge sense of accomplishment and it can be a drag to go back and add massive amounts of documentation to what you've just done (not comments, I mean a developer guide for the next guy).


I used to call this cowboy development, but I think the term is unfair and draws an inaccurate parallel between this and a bunch of mediocre programmers hacking away without structure.

I made a point of not calling it agile either, because agile is actually very structured, not at all chaotic like this mode of development.

An important distinction with cowboy development is that you can do cowboy development with pretty much any programmers, but most programmers are not capable of this mode of development. It requires a very open and sharp mind (ability to discover and absorb new technologies at a very rapid pace and to embrace evolving requirements without always bitching about how requirements aren't stable).

I struggle to find a name for it, though.


Elite Cowboy Development then? I wasn't really trying to make a distinction about the coders capabilities. To be honest, I think it has more to do with creativity and drive than it does with mad maths or lambda the ultimate forum contributions.

Regardless I don't personally associate negative connotations with this method. I'm sure in some situations it can be disastrous, but nothings perfect and I guarantee there have been plenty of agile disasters as well.


There could be very short book in this!

The ECD process methodology.

Chapter 1: Core Principles.

- Just build it.

Chapter 2: Defect management.

- Just fix it.

Etc :)


Call it Pam - Project adapted methodology. The amount of rigor the development process needs depends on the project and the developers. With experienced developers, who are good at communication and negotiation (i.e. no big ego problems) working in a problem domain which they understand (i.e. no big unknowns waiting to bite) this is probably the quickest way to get a great product.


I wonder if larger corporations will ever adopt this model

I helping to do it right now for BigCorp X.

So far this year I've helped kick off about 10-12 teams. With another 4 coaches, we've got dozens in-flight. Another 800 or so teams remaining to be trained.

Agile is one of those things that sound easy and a lot like common sense but it can be tricky! And it can be a back-breaker. Try running one-week iterations for a while. Personally, I love it, but one thing is for certain: it sure ain't dull.


[...] on the contrary, Agile can in fact be more process-heavy than traditional methodologies!

I find that to be true. I work at a company[1] that is transitioning to the agile model and we find ourselves working more for the process rather than the process working for us.

[1] Unfortunately I do not work at a startup nor have I started my own. Soon enough though, soon enough.


You know, I just realized "agile" programming is a bit like the scientific method: you make experiments to see what works and what doesn't and then you base your mental models on that. So I guess "agile" programming puts a bit of the "science" back into "computer science".


I knew there was no chance that would happen, given that Jeff pulled his timeline completely out of thin air, but I humored him. In reality, it took about twice as long as that, which wasn't that bad, but it was still a 100 percent overrun.

Spolsky repeatedly throws Atwood under the bus...it seemed condescending and weird to me.


I didn't interpret it that way. I got the feeling that he respects Atwood quite a bit and is simply ruminating about his own software development preconceptions.


They have talked about it on the podcast. It is all good-natured ribbing.


Agreed -- but this is a different venue than a podcast they are both on.


When 2-3 bright engineers are working on something they very precisely (usually) know what they are doing. If one of them says "It's going to take six to eight weeks" then all the planning would've already happened in the programmer's brain. Even if it takes twice as much (10-12 weeks or about 3 months) it's not much because the baseline itself is pretty small. With this mental planning, spending time on bug tracking and filling a spreadsheet is a waste of his productive time. They will find tools like Twitter far more useful than FogBugz. In this case Twitter acts as more of communication tool than a project management tool.

In such small teams 'What are you working on' is more important than filling fields like 'bug type' and 'browser' or 'steps to reproduce'.

As we discover new ways to communicate traditional tools like bug tracking may become obsolete.


Unfortunately most companies don't put much thought into the tools and processes they use. They simply do what everyone else is doing. This is why monstrosities such as Quality Center are popular even though they are disgustingly expensive and of questionable value.

This is the failing of the idea that you can take someone who is really good at management (or in most cases, really mediocre) and put them in charge of software developers. When your manager doesn't have a deep understanding of what you do they have little ability to judge how well you do it. So they look at all sorts of questionable metrics, reports and graphs to try to make sense of things.


Nice job linking to the printer-friendly version. Seriously.


thank you.


This is the kind of article that makes me wish programmers studied creative writing or fine art or film making more often. I did a lot of creative writing in college and beyond, and the spectrum for what works is exceptionally wide. Some people are paralyzed without an extremely detailed outline and keep almost everything the write, while other people fill hundreds of pages with no planning and slowly filter out the words, expecting nothing more than a few dozen usable pages.

Software is usually more collaborative than writing, so it's not quite the same thing... but in the end, maybe we shouldn't be surprised when talented people end up producing great things with almost contradictory approaches, and when talented people using similar approaches often produce great results and total catastrophes.

Programming is still mainly art, after all. The only thing that really matters is that you actually do it, and you finish it. There was the advice I read: "you have to write, you have to finish what you write, and you have to publish what you write."


Prakash, if you're reading this and can amend the title: "Joel Spolsky", not "Joels SPolsky".


oops, sorry, didn't see that, can't edit now.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: