Fog Creek Software
Discussion Board




Joels worst piece yet...

That last piece about reasons why Joel rewrote a setup program from scratch was about the worst piece I have read here so far. I'm probably still too upset and don't want to waste too much time on this, so here's just the most blatant contradictions that spring into you face:
* Joel decided to rewrite a setup program from scratch. This is bad enough, but coming
from someone who is still picking on those Netscape guys for rewriting that from
scratch is a bit of a hard one. After all, besides the difference in size, I bet that the argument that the existing code didn't do _exactly_ what they wanted was the answer you would get from any Netscape engineer asked on why they had to rewrite everything. Hell, there are ways to extend the existing code (=Install Shield, Wise), so why the hell didn't you go for that??? Lower your requirements a bit, try a bit harder and you're there with a reasonable solution.
After all, Joel is always quick to point (rightly) at economic considerations. Considering the current economic situation and the gain from a setup up routine that is a bit but not substantially better, rewriting someting that exists in thousands of versions which you can pick from the shelf in shrinkwrapped boxes is not very economic after all.
Oh, and it took you even longer to write that thing than you expected? Could have known if
you would read your own columns from time to time...
* Now he decided to rewrite this thing from scratch which is bad enough. But he did it in C++! If I remember correctly, Joel always said that one should pick the right tool for the Job. So he shouldn't be surprised when people point him to the right one. What really got me going was his statement:
> First of all, leave your language
> religious fanaticism at the Usenet
> door. Somehow I managed to figure
> out in high school that language
> advocacy and religious
> arguments are unbelievably boring.
That would be ok for anyone to say but Joel Spolsky. After all, he's the one who disregards Java cause it didn't run a game or something he programmed a few years ago on SUN or whatever. Maybe Java evolved? Maybe one isn't too good when starting out with a new language? I've seen what a Java-Pro can do, and since you get platform portability for nothing with Java, you can't ignore it anymore. Except when Joel likes to. But who is he, Mr. 'I won't even take glimpse at
Java', to judge, anyway? By the way, I don't do Java, but at least I know what it can do and when to grab me a Java programmer...
* Best part is his answer to the question on why to bother improving tha setup program at all, since he already got his customers' money:
> This was actually the smartest
> question and made me think the
> hardest.
Translates to: I know by now that I screwed here, but I still have to defend my position as giving in would be a sign of weakness or whatever. Man, you should admit at least by now that it might not have been a good idea to rewrite this from scratch. But what do you expect from someone who puts his email address up on his web-pages and doesn't even care to answer when you write him?

Once a colleague told me that the biggest difference between a job in software development and most other jobs is that you have to learn continuously. Whenever you think you mastered 'it' and start leaning back, you have already lost. Could it be that Joel was putting his feet on the table a few times too often lately? C'mon Joel, I know you can do better than this! I don't subscribe to anything he says, but at least his stuff is in most cases entertaining and mostly good enough for a decent discussion.
Hope you're back up to your standard again next time, Joel!

itdoesntmatter
Thursday, October 10, 2002

Glad someone else sees the hypocrisy here. Joel _says_ that he has the world of programming all figured out, but does his company have predictable release cycles? Does his company *make money*?

It's easy to talk the talk, but it's harder to walk the walk, isn't it Joel?

A Former Fan
Thursday, October 10, 2002

Although you may still be right, and Joel wrong, you seem to overlook a few important facts.

Joel did not rewrite anything from scratch. He had nothing of his own to begin with.

Why is that important? Because if the tools you can buy don't do what you need, you have no alternative to either adjust to the tool, or create your own. Too often the latter is chosen over the wrong reasons, but that does not mean there are no good reasons to do so.

Even in case of a real rewrite, there is no universal rule that says never rewrite and that always holds true.
No rule applies under all circumstances. Neither does this one. In fact, most people confuse heuristics for rules. A complete rewrite may have several disadvantages which makes it a good candidate for a wrong decision.

The rule helps you in the right direction most of the time, not always. That's how we humans process information. We develop rules that alleviate us from having to think about things extensively and mostly unnecessarrily. Sometimes the push us in the wrong direction. Hopefully other defense mechanisms kick in before it is too late. Sometimes they don't.

So examine Joel's motivations. If they suck, then he was wrong on this, but his advise still stands.

Erik
Thursday, October 10, 2002

Why an earth would Joel want to write the setup program using Java when a) he's already stated that it needs to access numerous Windows APIs and VC++/MFC is the most productive tool *for Joel* for this task and b) FogBUGZ only runs on Windows platforms, ergo said APIs only exist on Windows!

I'm not anti-Java but to say that you get platform portability for nothing is patently untrue. Java has to abstract the underlying OS which means that it's bound to run slower than something without the extra layer(s).

Oh, and I know it's being pedantic but Joel didn't rewrite his setup program from scratch because there was nothing to rewrite! He wrote it from scratch.

John Topley
Thursday, October 10, 2002

Joel often has stated that it's a bad idea to throw away _old_ code and re-write. He's never (to my knowledge) said that it's bad to write new software when the currently available options don't do what you need.

Adrian Gilby
Thursday, October 10, 2002

"I'm not anti-Java but to say that you get platform portability for nothing is patently untrue. Java has to abstract the underlying OS which means that it's bound to run slower than something without the extra layer(s)."

But most importantly, platform portability does not help anyone but the programmer. It certainly does not help the user. Even if she would be using the product on two different platforms, similarity within the platform is much more important than similarity within the application.

When working on Windows, you have a Windows mind set which let's you recognise things easily and infer what and where things might be.
On another platform, things might be totally different.

So unless you only ever interact with the application and nothing else besides that, you need a platform dependent solution for your product's interaction.

Erik
Thursday, October 10, 2002

just two quick notes:
- I never said that Joel should have used Java. My point was rather that he's a hypocrite stating that prejudices towards programming languages are wrong while he has those same prejudices himself - like the Java example shows.
- Right, it wasn't _his_ code to rewrite. But isn't it always someone else's code that we rewrite? Whether that was purchased code in form of a product or inherited by a colleague doesn't matter here. He could have read deeper into Install Shield and would have found ways to get around some limitations. Combined with some compromises elswhere he would have been done. But one is so damn quick to throw away code/discard Install Shield that it is easy to fall for this. But if that someone who falls for it has stated numerous times how stupid it is to fall for it...er, well, that's moronic in my opinion. When he typed the line where he admits that it took longer than expected, he should have started thinking...

itdoesntmatter
Thursday, October 10, 2002

"But isn't it always someone else's code that we rewrite?"

Come one, that's too easy. And totally not to the point. Not to mention silly.

There are numerous reasons to write your own code even if someone else has already written exactly the same code.
Accessability and control being the most obvious. You can control your own code, you can't control someone elses. If it is vital to your product, you better have control. If it is only part of the infrastructure, let someone else worry about it.

Like there are numerous reasons to write your own code, there are also numerous reasons why not to throw it away without giving it good thought.

Besides the functionality you might already have had if you simply bought one, writing your own setup program gives you something extra that you would not have had otherwise. Whether it is control, or functionality, or both.

But you better have good reason to need that something extra. At least that is what you are right about. Joel may have misjudged that, or you might be misjudging Joel for lack of information. Can you truly say the latter is not the case?

Erik
Thursday, October 10, 2002

BTW, I am not defending Joel. I don't know and don't care if he was wrong about writing a setup program.
I am merely questioning the reasoning that lead people to conclude he was wrong. He may in fact have been wrong, for many other reasons given here, just not those particular ones.

Erik
Thursday, October 10, 2002

Come on, if you've read joel's site for long enough you should have figured out that there is almost never a cut-and-dry solution to anything.

For the example of using installshield to do IIS/SQL installations: you can do it using installshield, and I have. But what I ended up doing was writing all the code to do the clever stuff that installshield couldn't do in a DLL and calling that from the script. In the end it wouldn't have been much more effort to have done what joel did and it would have been a lot more maintainable (imho).

The point is this: it's not knowing theory alone that informs you to making the 'right' decision, it's a combination of that theory and experience. Had I not encountered the problems joel faced I might have agreed that he was doing the wrong thing, but having been in that situation I'd say he made the right choice.

John C
Thursday, October 10, 2002

"for many other reasons given here, just not those particular ones."

That should read: "for many other reasons than given here, just not those particular ones."

Erik
Thursday, October 10, 2002

I thought Joel said that you shouldn't write something unless it is a core part of the business?  I guess FogBugz is core (now), but a setup program?  What's next, a custom browser?

n/a
Thursday, October 10, 2002

BASTARD!  Joel went two weeks over schedule just to save hundreds of hours of his customers collective frustration!  His customers are now lining up to disembowel him...

Read that article on not-invented-here, it applies more in this situation.

anon
Thursday, October 10, 2002

Joel never said you shouldn't write something yourself if it isn't core. He said you should write it yourself if it is core. Reversing the implies is a common logic error.

I fail to see why you think Joel is prejudiced towards Java. I'd say the site contains a number of Java comments that are both balanced and reasonable. In fact, do a quick search for 'Java' and see what it shows up. Oh, that's right, anything but prejudice.

Mr Jack
Thursday, October 10, 2002

You are right that he said that one can rewrite core parts, but this is a simple installation program! I still find it way too contradictory to is previous statements what he did.
Don't get me wrong: I would agree that if _I_ am good at something which might be a bit oversized for the Job (like using C++ instead of VBasic or Perl or whatever), I should still use that as it gets the job done. But Joel isn't exactly what I would call a person that sees the shades of grey: You don't rewrite existing code, full stop. That's what he said, and it took a lot of arguing until he gave in and admitted that there _might_ be reasons to do so.
Maybe I should make myself more clear here: What he did might be OK (no, I don't know the full background), but considering the many black-white statments he usually does, he was _way_ to quick to go for a rewrite for my taste. I mean: He convinced me that you should consider thrice before diving into a rewrite, and then he simply goes for it himself just like that and makes a number of other contradictions in the process as well? Maybe I'm misinterpreting all of this, and considering the number of lines I already wrote this is probably pure overkill in relation to the topic, but I find it astonishing how easily he gets away with what he pulled off here, especially since you can read between the lines that it was not a good idea after all...

itdoesntmatter
Thursday, October 10, 2002

I am guessing the difference between writing and rewriting is clouding your judgement. And yes, the difference is significant. Rewriting does not give you more control than you already had, but it might make it easier. Whereas writing something that you have available only as a product does give you control where you had none, but it need not give you more functionality.

If control is what you need, you have no option but...
If different functionality is what you need, you have no option but...

But if neither is an issue, think twice...

Basically, think...

Erik
Thursday, October 10, 2002

C++ was a reasonable choice since the interface needed was to the pre-existing Setup APIs.  Doing it using MFC probably reduced the interface development even if you think its the ugliest piece of code on the planet (which I wouldn't demur from), it does the job and doesn't get in the way.

VB sucks at talking to Win32 and is no quicker at writing interfaces (no really its not if you  have the MFC experience).

So, given the tools available (yes sure you could do it in Visual Perl, but you'd have to know it first), it wasn't a bad choice.

Simon P. Lucy
Thursday, October 10, 2002

in some cases you gain control, in others you get stability/better maintenance, etc. But the bottom line is: Is it worth the trouble. And I don't see that happening here. People pointed at ways to get around spending weeks or whatever on what he did. His 'project' of writing a substitude failed miserably, was over time, etc., and just like the mozilla guys, he's still holding up the flag and says 'I finally got something that's even better'...but that's the only thing.
Just consider the unusual length of his posting where he explains why he went for the rewrite. If it would have been clear from his previous articles, he could have made that way shorter. His difficulties, as he admits, in discarding some of the arguments shows.
I guess my problem is simply that I'm a bit fed up with his contradictions...

itdoesntmatter
Thursday, October 10, 2002

"And I don't see that happening here."

Not you, but Joel did. At the time. And things might always turn out different after all.

"His 'project' of writing a substitude failed miserably, ..."

You may be overreacting...

"Just consider the unusual length of his posting where he explains why he went for the rewrite."

That may be just as much a result of us questioning his decision...

"I guess my problem is simply that I'm a bit fed up with his contradictions..."

That is you right. But you seem to refer to his previous arguments as if you agreed with them. Even if Joel has violated his own advice, which is not at all certain, how does that suddenly make his previous arguments invalid?

Even if people do silly things once in a while, doesn't make their smart things any less smart.
So disagree on this topic...

Erik
Thursday, October 10, 2002

> Even if Joel has violated his own advice,
> which is not at all certain, how does that > suddenly make his previous arguments
> invalid?

Consider my posting as some sort of wake-up call to some people around here that subscribe to _anything_ Joel writes. Now when I think about it, what I really want to say is:
Don't believe anything you read here without questioning it. Think, think for yourself, but think!
(I guess that is where we can meet, can we?)

itdoesntmatter
Thursday, October 10, 2002

I don't agree with your analysis.  But if you want to vent about Joel, great, this forum is for you.

Before your frustration levels get too high though, keep in mind that all of us realize that Joel is reasonably often wrong.  But that's not the point, we come here because still no one writes honest things about their work, what they do and how they think it can be done better.

A long time ago, word.com had interviews where people talked about their jobs.  They ranged from Shamans to convenience-store clerks.  That was the most interesting reading on the net I can remember, the interviewer turned it into smooth prose and it felt honest.

Say it 10 times.  Joel Joel Joel Joel is wrong wrong wrong wrong wrong.  Do you feel better?

anonymous
Thursday, October 10, 2002

Just a minor point, but in the article Joel says he didn't wrote it  from scratch, he mentions he used the library he had developed to make the install for the former version.


But really, shouldn't we stop second guessing Joel, it is not as if his articles are the Tora or something. They are very interesting, even when I disagree with him, his points are worth thinking about, but that is just it, no need to get up in arms about them.

Andres
Thursday, October 10, 2002

ok, I'm out of here for now. Maybe Joel is too often busy feeling good about what he wrote (something I can't stand about people).
You're right, I'm off to other (more useful) things...


PS: And still Joel managed to get an interesting discussion going...

itdoesntmatter
Thursday, October 10, 2002

itdoesntmatter, you did not make one single valid point in any of your posts. He didn*re*write anything. Ease of use (including of installation) *is* a core feature of FogCreek products. Joel is proficient in C++. 4 *weeks* is a lot different from 4 *years*. There's little indication that the project was a failure. Joel may have thought it would take 2 weeks but planned for 4 weeks. Subscribing to Joel's discussions is a lot safer than not.

pb
Thursday, October 10, 2002

"Reversing the implies is a common logic error."

So is a straw man argument.  Notice that n/a merely said s/he thought that that was what Joel had said. 

Logic Nazi
Thursday, October 10, 2002

Boy oh boy. I can't figure out if itdoesntmatter is trying to troll using an inane parody of rank stupidity and insecure arrogance or if he really is that clueless.

First regarding Java, why don't you show us some of your own java apps, code boy? You rant about how Joel is biased about Java and doesn't know enough about it. Well, Joel's got a decent working Java game available that he wrote on his site. Where is *your* Java game, Mr. Expert?

Second, why even bother talking about Java? Show me the popular commercial shrink wrap apps that I can buy which are written in Java. Why there they are, right next to the aisle of commercial shrink wrap Lisp 3D shooter programs!

So Joel's spent a month writing an app that would take you a year. What's it to you anyway?

Regarding your comment about how Joel won't answer the pining love letters you send him, despite what you see as his open invitation to respond to all email indicated by his posting his email address -- Oh Boo Hoo! I am filled with tears hearing your sad story and I feel for you I really do -- Bill Gates won't respond to my personal love letters either! Who does he think he is anyway. Boo hoo! Why not post your own email address instead of using an anonymous email address if responding to email is so important to you?

Ed the Millwright
Thursday, October 10, 2002

Haven't read much about your additions to the world of software over at itdoesntmatteronsoftware.com

it might matter
Thursday, October 10, 2002

Ed, you don't have something going on with Joel, do you?  You seem pretty offended.

uninterested observer
Thursday, October 10, 2002

Not only is Joel happily commited, a fact he documents elsewhere, but he lives on the wrong coast.

Besides, it's Bill I'm waiting for. Despite his flaws, I know there's a human down there somewhere if only someone can love him enough to find it!

Ed
Thursday, October 10, 2002

If only you put this much effort into finding employment...

Guy Incognito
Thursday, October 10, 2002

itdoesntmatter

2 words read & understand. you do not seem to get the latter!

Prakash S
Thursday, October 10, 2002

Joel has fallen into the trap of always trying to make "the big statement" and obviously some people reading this site have fallen into the trap of regarding a single individual as the fount of all knowledge. 

Joel has enough interesting insights to make it worthwhile visiting this site, but I stopped thinking about software development in absolute terms a long time ago.  Every project is different, there are no rules just guidelines and principles and even those are very blurry.  Take what you can use and ignore the rest.

yawn
Thursday, October 10, 2002

Yeah, but I'm smarter than he is?

Guy Incognito, MCSD DOA PITA
Thursday, October 10, 2002

Irrelevant but interesting factlet: Jak & Daxter, one of the most succesful recent PS2 games was largely written in a LISP-based language.

Mr Jack
Friday, October 11, 2002

me: "Show me the popular commercial shrink wrap ... Lisp 3D shooter programs!"

Señor Jacques: "Jak & Daxter, one of the most succesful recent PS2 games was largely written in a LISP-based language"

Yarrg.
Ah man... (scratch scratch) yeah OK... I uh, hm...
Dang.

Ed the Millwright
Friday, October 11, 2002

Don't beat yourself up man, Jak & Daxter is a 3d platformer not a shooter. :)

Mr Jack
Friday, October 11, 2002

Pardon me if I return this to the original topic.

"You are right that he said that one can rewrite core parts, but this is a simple installation program!"

The Installation Program is a vary core part of any piece of software. The fact that this core part has been successfully outsourced does not make it any less a core part of the program. In the same vein, a TextBox is a core part of any program, yet we are all very happy to outsource this key component to Microsoft (or whoever).

The Installation Program is the first interaction that you have with your customers. If the installation does not go well, they may not try out the program. Remember that Joel's software is try-it-before-you-buy-it.

There have been a number of programs that, after installation, I have not run, due primarily to bad installation programs. It does not matter that these programs may have been the best programs in the world, or filled my needs exactly, or been at the perfect price/features ratio. Because the installation was so annoying, the programs did not even get a look in.

If the existing installation programs on the market did not perform according to the requirements that Joel had, then he was completely justified in spending the time he did in developing his own. And I have not seen too many people (if any at all) questioning his requirements.

And, when it comes down to it, it is Joel's time to spend how he wants. So what if it took four weeks? Joel obviously thought, from a business viewpoint, that it was time well spent. And I am sure that, from a programming perspective, it was an enjoyable, if at times frustrating, endevour.

And you never know, Joel may be able to turn it into a saleable product and it may end up outselling any of his other products.

Evan
Friday, October 11, 2002

Even if the installation program didn't work out, there could be a market for FogCreek installation consulting.

tk
Sunday, October 13, 2002

Jak & Daxter being in Lisp:

In an interview, the team admitted writing it in Lisp was not necessarily THAT smart a move. For one thing cheap C++/games developers are fairly deep on the ground for hiring, whereas Lisp/games developers aren't.

Even if they were, it's not Lisp-lisp, it's Jak&Daxter-lisp...

Also they let one guy write a lot of it and they said something like "he's one of the best Lisp developers around, so it works, but no-one else understands what it does.."



If anyone has any links to info on the internals of the game, I'd be interested in having a read...

Katie Lucas
Tuesday, October 15, 2002

In this http://www.gamasutra.com/features/20020710/white_02.htm postmortem of the game, they list GOAL as being one of the best, and one of the worst things.

Mr Jack
Tuesday, October 15, 2002

*  Recent Topics

*  Fog Creek Home