Early and “where to start” questions

Arseni Mourzenko
Founder and lead developer
April 3, 2015
Tags: communication 27

I al­ready dis­cussed how Stack Over­flow en­cour­ages lazi­ness and how most per­for­mance ques­tions are wrong. The more I fo­cus on the ques­tions asked by my peers, the more I no­tice how in­com­plete, raw and un­con­struc­tive they are most of the time. Ei­ther peo­ple are lazy or they don't know how to work on prob­lems by them­selves; in both cas­es, it is un­clear what are they ex­pect­ing from oth­ers.

It's usu­al­ly the same thing: ei­ther the per­son asked the ques­tion too ear­ly, or he just doesn't know where to start.

Ear­ly ques­tions

“There are no stu­pid ques­tions”—teach­ers tell. Maybe, but there are ques­tions asked too ear­ly.

In or­der to be con­struc­tive and an­swer­able, the ques­tion should we elab­o­rat­ed. Of­ten, elab­o­ra­tion it­self leads to the dis­cov­ery of the an­swer. If not, a cor­rect­ly-elab­o­rat­ed ques­tion is usu­al­ly pleas­ant to an­swer and brings some­thing to both the asker and the an­swer­er.

The fol­low­ing di­a­logue hap­pened to­day on a dis­cus­sion opened to all com­pa­ny de­vel­op­ers:

Does somebody know OpenGraph? Help me.
Isn't it a Facebook API similar to Google's Knowledge Graph?
Yes, it's related to Facebook...
See Open Graph protocol, and Facebook's documentation.
I know what is it for, but I don't know how to add it to an ASP.NET MVC site.

This is an ar­che­type of a ques­tion asked too soon, ob­vi­ous­ly lack­ing any ef­fort and pri­or work. Not only Mike haven't worked on the prob­lem it­self, it seems that he haven't even made an ef­fort to for­mu­late the ac­tu­al ques­tion. Why would he ask some­thing like “Does some­body know Open­Graph?” while he needs some­thing much more spe­cif­ic?

This is what hap­pens when the asker didn't thought about the ques­tion. A few sen­tences ex­changed be­tween the asker and an­oth­er per­son are enough to pin­point the ac­tu­al prob­lem. This process doesn't ne­ces­si­tate a third per­son: the au­thor of the ques­tion could do the same work alone, with­out im­me­di­ate­ly seek­ing for as­sis­tance.

Some ques­tions are too gener­ic, and some are too spe­cif­ic. When fac­ing those ques­tions, it is es­sen­tial to un­der­stand that both cas­es are not that dif­fer­ent, and the fact that too spe­cif­ic ques­tions look more elab­o­rat­ed is just an im­pres­sion.

A too gener­ic ques­tion can look like this:

I have an er­ror which com­plains about my file when I open it in Mi­crosoft Word. Please help.

Ques­tions about er­rors which don't spec­i­fy the er­ror it­self and show that the per­son prob­a­bly didn't even make the ef­fort read­ing the er­ror mes­sage are al­ways gener­ic-type ear­ly ques­tions.

A too spe­cif­ic ques­tion can look like this:

I don't understand how to use an abstract factory pattern here, can you help me?
Sure. What do you need to do?
I need to create business objects from database entities, but all objects look different. If there is nothing in common, how should an abstract factory look like?
Wait, what?! Can you give me an example of an object to create, please?
Sure. I have a News object, which should contain Date and Body, and I have an SQL query which returns those fields, but I don't know how to use an abstract factory pattern to create News object.
You are trying to create a News object in data access layer, right? Probably in a NewsProvider class, something like this...
I am.
Why can't you simply initialize your `News` objects there?
I believe I can do that. Thank you for your help!
You are welcome.

Both too gener­ic and too spe­cif­ic ques­tions share sev­er­al el­e­ments:

  • They are born in a con­text where the au­thor asks them too soon, with­out think­ing a bit about the ac­tu­al prob­lem. They are of­ten based on the first idea the au­thor thought of (like the will­ing­ness to know more about Open­Graph or the as­so­ci­a­tion be­tween cre­at­ing ob­jects and the us­age of a fac­to­ry pat­tern).

  • The suc­ces­sion of ques­tions and an­swers show very quick­ly the lack of pri­or thought about the prob­lem and of­ten high­light the prob­lem it­self.

  • The ques­tion can be an­swered as-is, but the an­swer won't help the au­thor of the ques­tion. In the first ex­am­ple, the an­swer con­sists of the RTFM in a form of two links to the doc­u­men­ta­tion. In the sec­ond ex­am­ple, the an­swer would be the ac­tu­al im­ple­men­ta­tion of an ab­stract fac­to­ry pat­tern in a spe­cif­ic case, with­out con­sid­er­ing how ab­surd would it be there.

When faced with those ques­tions, lead the au­thor to the un­der­stand­ing that he needs to work more on his ques­tions in the fu­ture.

Where to start ques­tions

Those ques­tions are more dif­fi­cult to an­swer, for two rea­sons: you need to know the pro­file of the per­son ask­ing the ques­tion and you need to fig­ure out what are the ac­tu­al in­ten­tions of the per­son.

What makes them dif­fi­cult is also the num­ber of forms they can take.

I don't un­der­stand point­ers. Could you ex­plain them to me, please?


I want to learn Java. Do you have any­thing to rec­om­mend?


I'm won­der­ing what pat­tern should I use here...

are all re­quir­ing you, the an­swer­er, to do all the work of elu­ci­da­tion of the ac­tu­al prob­lem or need the asker­er is fac­ing. This makes those ques­tions close to ear­ly ques­tions, the dif­fer­ence be­ing the scope. In ear­ly ques­tions, there is not much to do: you show to the per­son that the ques­tion is ei­ther too gen­er­al or starts on a wrong premise, and then let the per­son on her own. Where to start ques­tions, on the oth­er hand, re­quire much more work: you have to ac­tu­al­ly de­ter­mine the con­text, the prob­lem and the mo­tive. Is the per­son look­ing to learn Java be­cause she wants to learn a new lan­guage? Or be­cause she needs to work on a Java-re­lat­ed pro­ject? Or be­cause she is ex­pect­ed to mod­i­fy JavaScript code and mis­tak­en­ly call the lan­guage Java?

I'm not sure how should such ques­tions be ad­dressed, and do they need to be ad­dressed in the first place. One thing is sure: the per­son ask­ing those ques­tions should be en­cour­aged to re­con­sid­er the ques­tion, think twice, search about the sub­ject, and ask an­oth­er ques­tion only when the ques­tion is ac­tu­al­ly con­struc­tive and an­swer­able.