-
Website
http://blog.bitquabit.com/ -
Original page
http://blog.bitquabit.com/2009/07/01/one-which-i-call-out-hacker-news/ -
Subscribe
All Comments -
Community
-
Top Commenters
-
Grr
4 comments · 1 points
-
Eli James
2 comments · 3 points
-
Aupajo
3 comments · 6 points
-
intellectualhonesty
2 comments · 2 points
-
tomtomtomtomtom
2 comments · 2 points
-
-
Popular Threads
I've extracted my own conclusions from the article, but for the sakes of continuing a conversation [for my own benefit to understand things better] i would like to argue that developer arrogance is a product of poor skill of managing client expectation; perhaps often not developer's fault. Arguably client expectations should be managed by a more senior developer, but the same mistakes can be made regardless of the title held. I would argue that client should recognize that how questions are asked with regards to development effort estimations ultimately lead to how developer answers those questions.
I will attempt to provide example of what i am trying to say:
If a client simply asks "how much effort would it take to clone StackOverflow?", the developer's response will be very much shaped by his very limited (or not so limited) experience with StackOverflow. Here point being the amount of variability due to developer's user experience with StackOverflow.
On the other hand if client asks "How much effort would it take to clone StackOverflow without compromising any existing user experience, infrastructure, upgrade paths and _______ (insert what ever other component that is truly relevant)", will produce much different behavior from the developer. Such question leads developer to put some context around the task as well as evaluate his own knowledge of those components and potentially force them to research any grey areas in their knowledge of the mentioned components as well as relating components before answer is given. Client should realize that the way questions are asked will lead to a different answer from the developer. it is also very important to note that people are not mind readers and different cultural and life experiences lead people to understand meanings of sentences differently unless formatted very explicitly to eliminate as many variable factors as possible.
Unfortunately there are no single point of failure that we can all avoid to overcome the problem. Fortunately people that have lived through this or simply understand this psychology will tend to recognize when communication is failing due to those *variable* factors and attempt to correct themselves to communicate differently.
High level of productivity is achieved when both parties are on the same wavelength. Some productivity is possible when one person attempts to compensate by leading questions. no guaranteed productivity is possible when both parties do not understand this notion (only chance possible). It is a two way road. Both sides must ask themselves two questions 1) Am i being understood according to what i am trying to say? and 2) do i understand the other person according to what he/she trying to tell me?
In an attempt to avoid leading the question i am concluding the above thoughts without a conclusion ;)
Too frequently, a client or PM drop the phrase "small feature" or "little fix" or "minor request". That's because they only see the feature/fix/request where it sits on the page, not how it interops with the system on the whole. Yes, it's just an X, but it also has to invalidate caches, replicate quickly, and take Y into account, which we don't have control of! *sigh*
The point is, people tend to see software as parts. They often fail to see the interaction between those parts, or parts which remain hidden to the user (considerations made to easy deployment, to easy upgrading, to handle bad nodes, etc). I could whip up the crappiest version of StackOverflow together in 3 days, but it wouldn't be a StackOverflow clone, because SO is more than the sum of its visible parts.
To be fair, the vast huge majority of commercial software (which is business internal) also looks like arse, and the vast majority of our digital electronics (from phones to DVD recorders, etc) also have poor interaction design.
Which isn't to say that good UX design isn't a skill that can be learned - it's a 'language' with it's own patterns, etc, but like mastering (rather than being able to use) a programming language - it takes years of actually doing it - and presumably doing it again and again.
Perhaps equally importantly, developers get less feedback on this - performance issues and bugs make their way back to developers quickly, but design issues less so. (Our helpdesk, for instance, wouldn't even log a design complaint - the customer bought the software as is, and it's not a technical fault).
I thought this kind of massive ignorance was mostly limited to Internet pundits, certainly not professional engineers. I understand the optimism of developers, hell it's the only way to get up in the morning, but when you start underestimating things by 3 orders of magnitude you really have no business writing software for money.
And the crux of your argument was that PostgreSQL was nowhere near as easy to administer as SQLServer... because a few years ago, you used to have to create a one line cron job to vacuum the database and because on two platforms (of the many that it supports) you have to type one command to create your first database cluster? Wow. The horror! And SQLServer is better because you don't have to do that? Well, then... how exactly do you set up your SQLServer on Ubuntu or FreeBSD? Oh, wait... you can't, can you.
In most scenarios for most purposes, getting PostgreSQL up and running takes no more time than running the SQL Server installer and typing in your license key, and it often takes less.
I'm not bashing SQL Server - it's a very competent database and its integration with the Microsoft dev stack makes it very attractive when using .NET. But don't label PostgreSQL as "inferior" or "harder to use" because of the way things used to be or because you have to do one specific task in one particular scenario that can't even be done on the thing you're comparing it to. Considering the number of platforms PostgreSQL supports, having to set up your first cluster (sometimes) hardly seems like a compelling argument that PostgreSQL is "not for the faint of heart". Not to mention that there are plenty of tutorials and walkthroughs that explain the process if you're not sure what to do or why. You've hardly picked the best open-source project to make your point that OSS is never as good as commercial software (an unsupportable generalization which actually detracts from your main point)
I'm not saying PostgreSQL isn't a great database. I love it. But saying that it's harder to use than SQL Server is definitely not an ad hominem attack, and pointing out that SQL Server doesn't run on Unixes neither supports PostgreSQL's ease-of-use nor damages SQL Server's. There are actually a wide range of things that PostgreSQL does better than SQL Server, but that are harder to set up on PostgreSQL than on SQL Server, including creating and configuring databases, managing permissions, setting up routine maintenance, employing full-text search, and adding customized data-types, just to name a few. As such, I think it actually supports this article beautifully: it's technically superior and more difficult to use. Whether that's an indictment or raving support really depends on how much you value usability over power. Developers tend to value the latter, end-users the former.
One way to achieve that, which I have yet to see, but hope eventually becomes standard, is for OpenID-consuming sites to also be OpenID providers themselves. If you get to the site and don't have an OpenID, you register normally, and poof, you have one. The site can allow login only via OpenID internally, but users who don't quite get the concept aren't left in the cold. I'm hopeful that the commercial StackOverflow product will do exactly that, but we'll have to see.
StackOverflow at least allows you to basically use the site with all bells and whistles without actually logging in, so and if I remember correctly from the podcasts, the "OpenID Only" was counteracted a bit by that fact.
Personally, I think if spending the 5 minutes to get an OpenID and understand that you just need to give a site a URL (and then if you aren't logged in to your OpenID provider, give it your username/password) is too hard of a concept to grasp, it's kind of a miracle they've gotten anywhere on the web. They might not get why at first, they might think it's dumb ("what? I need to log here, then put this url over here? That's stupid..."), but those are things that can be rectified later ("oh one username/password for all these sites? restricting who can see what? Cool!"). The minimal usage concept, I think, is pretty simple.
But that's just me.
(I use Disqus on my blogs too and wish it had OpenID :( )
I generally spend 15-30 seconds to sign up at a site, and even then only if it's really compelling; spending 5 minutes to grok and sign up is a waste of my time, then typing in a whole url just so I can type my username & password again (since most sites time out your session anyway after 5 mintues).... what a waste of effort.
The #1 glaring failing of OpenID is that it conflates the username and the provider. The implementors thought that was the greatest reason to use it, and I think it's the main reason I'll never use it: I'm not going to type a 100 character url every time I want to log in with my 10 character username. Google and Yahoo saw this and implemented it sanely: You type your name and select your provider, the site fills in the rest of the URL, as it should be, and more sites are adopting this. OpenID should have specified a standard registrar and registration method, so that every site could show the various largest OpenID providers, instead of waiting for non-standard implementations by third-parties to hash this out.
Once this form of "OpenID 2" is standardized, it'll be adopted much more quickly.
The whole getting an OpenID is a one time thing, and being able to use a site simply by typing two letters in a text box and having the browser auto complete it, then hitting enter, is infinitely better IMO than having to fill out another signup form (even if it just a couple fields), then probably going to check your email, maybe use a random password to login, or just activate your account, and then go back to the site and actually login. I'd rather just type the damn URL and click 'Login' than deal with yet another login for some site. While the system isn't perfect, I still prefer it over having a separate username/password everywhere I go.
If you would rather spend 30 seconds signing up every time, versus 3 seconds to type a URL (or have the browser do it for you), be my guest. I'll be the guy with a single sign on...
If every site gets the same email address, how do I tell who's the bad guy? (Ideally sneakemail.com would become an OpenID provider, then let me configure an email address each time I authorised a new site :)
Have I missed something, or is this already possible with OpenID?
So on some providers, yes this is possible, to a degree. I think myopenid has personas.
I have this argument with my co-workers near daily. We're talking about a feature and their response is "Oh that's easy." and start talking about how the data will travel in the database. It then takes me another solid 10 minutes of talking to clarify that the user doesn't care how the database works, they care how the the user interface should work and that's what I'm trying to discuss. Their response, every time, and I'm not even joking, is "Oh that's just trivial user interface details."
...
*blink*
AAAAAAAAAHHHHH!!!!
I have literally pulled at my hair in frustration.
You're not arguing honestly, you have this awful bias and you refuse to understand that commercial software is crappy too. In fact studies have shown there is very little difference in software quality between OSS and Commercial software. It turns out that software is software, and you don't seem to understand the scope of this.
This is evident because you didn't scope your argument at all. You should retract everything you've said here about OSS because you simply have no evidence or stats to backup with you said.
I refer to papers by Adris Mauckus et al. and Calluppi et al. Also work by Thomas Zimmerman. They don't show what you show, but instead they show evidence. Go check flossmole or other OSS metrics projects and you'll see the wide range of software that you are obviously totally ignorant of.
I need to retake logic in college, I think, I didn't even think of that!
http://mail.linux.ie/pipermail/social/1999-Octo...
None shall reach the loftiness of your loftinesses!
I do agree with the point, aside from the grandeurposture.
Easy: the decision to use ASP.NET MVC -- I'd write it in a higher-level language, thus saving me a lot of typing and work, and sacrificing something no user will ever care about. I've worked on large programs in ASP.NET MVC and other languages, and it's not even close to being the best in terms of programmer efficiency.
Apache wouldn't be my first choice of open-source web server, either, for exactly the reasons you mention. And I wouldn't run an old version of Postgres, either.
Why do you defend a big complex app you wrote by trying to argue that any other implementation would have to make the same architectural decisions you did, thus resulting in an equally big and complex app? My first boss told stories about writing apps in FORTRAN on mainframes, and they sound impressive in a "when *I* was your age" kind of way, but they don't reflect the amount of work that's actually necessary today, if you care about minimizing work and not simply using 'industry standard' technologies.
Also, a proficient programmer in a given language X can code just as fast as a similarly proficient programmer in language Y. If he choose an environment, it's probably because he knows it very well, in that case, you might work faster in another environment, but all his claims still apply to that language non the less.
And if you're still not convince, try and clone it in a weekend.
Which isn't to say I think anyone can really recreate SO in a weekend. Like I said, I'm in complete agreement with your conclusions, just not with the whole of the road you took to get there.
To answer your question about the source: first, I got the initial number wrong; it should've been 2.3 MB.
As for how much is crap that could be filtered out in a better language: if you want an answer to that question, you're going have to take me slightly on faith. For credentials, I'll point out that I'm fluent in Smalltalk, am comfortable in Self, and have worked in the Factor, MLs, Common Lisp, Clojure, and several other high-level languages. That's the background I'll use for evaluating whether StackOverflow could be helped by a higher-level language. Provided that meets your criteria, my verdict:
It's actually very well-factored. If you're going to use an MVC framework (Rails, Django, Hunchentoot, or the like), I don't think you're going to improve much. The templates themselves are well-factored, and, although I'm positive the models are hardly perfect, because StackOverflow is already using LINQ to SQL, and that framework's actually quite solid, I don't think you're going to improve by an order of magnitude over what StackOverflow is currently doing if you plan to talk to an RDBMS. That just leaves the controllers. As much as I've been ambivalent about C# in general, the fact remains that C# 3 isn't honestly that far away from a "real" high-level language. You've got closures, lambdas, type inference, literal dictionaries, and so on. There are unquestionably some easy improvements you could make with a Lisp/Smalltalk/Ruby implementation, but, short of a major refactoring, not enough to make a real dent in the controllers. (And in jumping to at least some of those frameworks, you're going to take a hit, since ASP.NET MVC does some smart things, such as populating objects based on their static type, that other frameworks don't do. Whether the balance is positive or negative is something I'd be curious to see.)
Now, a more interesting question for me, at least, would be, "Can you do better using a vastly higher-level framework, such as Seaside, Uncommon Web, or Iliad, backed by an OODBMS instead of an RDBMS?" The answer there is probably, "Unquestionably--but it won't scale as well." These frameworks all make building websites far quicker, but end up caching client state in the memory of the server. That means that your sessions are now bound to a single server, and that your scaling has therefore ceased to be horizontal. This may be an acceptable trade-off for you, but won't be to many others.
I've been working in C# for a few years now myself, and I've got to admit that despite myself I've grown to kind of like it. Even if it's not the 'best' language in absolute terms right now, I think it may well have the best 'velocity towards goodness' of any language in active development right now.
As someone who suffers from "I can code anything in a week" disease this rang true.
m3mnoch.
I'm not sure how well many coders respect the 'spit & polish' of a good web app.. but it's not easy to get right and shouldn't be under-estimated
The thing that people who claim to be able to dish out a StackOverflow clone in a weekend are missing is experience. If they want to try it, then please let them try and fail so that they can learn about scope. Because scope is the key thing here.
The success of StackOverflow is clearly in it's community of users. The app is a necessary piece of infrastructure, but the real action is the community posing and answering questions. You remove the community and the app ceases to very interesting.
firefox or vlc are opensource and easy to use
the same with ubuntu to open a webpage, save a document and read it.
about Work, you are totally right.
On the other hand, your argument is not realistic to an OSS clone project's likely workflow, and is more importantly contingent on a few definitions. Foremost, what you mean by writing software. The operating assumption of the article appears to be writing code from scratch. You make this position difficult to defend by granting the use of a framework like Django.
Why could it not logically follow to start with more than a basic framework? Such a clone could be a Drupal install profile, for instance, with the currently-unsupported bits as contrib modules to the project as a whole.
If you'd like, I can go more point-by-point as to why this post is disingenuous to reality, even though the main thesis is more/less correct.
N.B.: In my admittedly limited experience, starting from a CMS like Drupal is only a good idea if what you want to do is more or less what Drupal is designed for. The more features you have that you're going to implement yourself, the better off you may be starting with something like Django instead; eventually you're spending more time learning how to rearrange the CMS's internal wiring than you would be spending starting with a less full-featured stack.
P.S.: It would have been nice if signing in hadn't erase the comment I was writing.
If a piece of software is intended to have a GUI, it shouldn't be an afterthought; and should be created by people with a good understanding of interaction design.
If open source software is to become mainstream I think designers need to contribute more to the movement.
That to me is quite sad. (It is quite true most often)
Everything you said is true. They are the exact same reason why I have never embraced open source software as the tools I regularly use, even though I always prayed the gods they would be better, they would feel smoother and gentle to my skin and work well and look pretty and smell like roses, they never do. In the end, it makes sense also. If you make something that feels so damn right, you'll probably decide to sell it instead.