My Secret Life as a Spaghetti Coder
home | about | contact | privacy statement
This is the first in a series of my answers to Jurgen Appelo's list of 100 Interview Questions for Software Developers. Jurgen is a software development manager and CIO at ISM eCompany, according to his About page.

The list is not intended to be a "one-size-fits-all, every developer must know the correct answer to all questions" list. Instead, Jurgen notes:
The key is to ask challenging questions that enable you to distinguish the smart software developers from the moronic mandrills.
...
This list covers most of the knowledge areas as defined by the Software Engineering Body of Knowledge. Of course, if you're just looking for brilliant programmers, you may want to limit the topics to [the] Construction, Algorithms, Data Structures and Testing [sections of the list]. And if you're looking for architects, you can just consider the questions under the headings Requirements, Functional Design and Technical Design.

But whatever you do, keep this in mind:
For most of the questions in this list there are no right and wrong answers!
Keeping that in mind, I thought it would be fun for me to provide my off-the-top-of-my-head answers, as if I had not prepared for the interview at all. The format will first list the question, my initial response (to start the discussion), followed by a place I might have looked for further information had I seen the questions and prepared before answering them.

Though I hope otherwise, I may fall flat on my face. Be nice, and enjoy.

Requirements

  1. Can you name a number of non-functional (or quality) requirements?
    I'd first mention performance and security, from the user's perspective. I'd then mention meeting minimum requirements for metrics like code coverage in testing and dependencies in our design. I don't consider code quality out-of-order when it comes to requirements.

    The non-functional requirements page at Wikipedia lists several examples. Notable exceptions from my quickie-response: accessibility, documentation, portability. There are several that are listed that I consider covered by what I've listed, but I missed some that caused me to say

    Homer Simpson saying, 'D'oh!'

  2. What is your advice when a customer wants high performance, high usability and high security?
    My "advice" starts with the questions: "What do you consider X to be?" where X belongs to the set {"high performance", "high usability", "high security"}. I might offer that I consider "high performance" to be a misnomer, as it's either acceptable or not, and that unless the customer defines it, I don't know how we'd even attempt to measure something as vague as "usability."

    I'm not sure where I'd prepare for this question. Any suggestions are appreciated.

  3. Can you name a number of different techniques for specifying requirements? What works best in which case?
    I can name several: tell me in person, tell me over email, tell me over IM or over the phone. I know that's not what you're looking for. You're looking for answers like "use cases." It all boils down to the same. I might even mention "unit tests" here. That's part of the spec, as far as I'm concerned, and for almost any software I write for myself, it's the only way I specify requirements (except for maybe a very informal to-do list).

    Face-to-face works best in most cases, I'd gather.

    The answer after doing some research: ¬°Ay, ay, ay, no me gusta! I didn't see this coming. There are a number of things that could qualify as answers (Prototyping, Storyboards, Modeling, ..., State transitions) that I knew about beforehand. I thought to include none of them.

    Ay ay ay, no me gusta!

  4. What is requirements tracing? What is backward tracing vs. forward tracing?
    My response? "I don't know anything about requirements tracing. I'm willing to learn."

    Once again, Wikipedia tells us about requirements traceability, illuminating the issue for us.

  5. Which tools do you like to use for keeping track of requirements?
    I generally use a combination of a text file and emails, as far as the client is concerned. If it's a larger system, I'll use something like Sharepoint, Basecamp, or another system that performs a similar function. I have no preferences, because nothing I've ever used compares to a simple list. If it does, it's equally useful.

    I don't know that I'd say I like any of them. In reality I prefer a simple to-do list that I encode in tests (insofar as I'm capable of writing the tests) and knock them out one-by-one.

  6. How do you treat changing requirements? Are they good or bad? Why?
    I don't give a value judgement on changing requirements: they are inevitable. They can be good or bad depending on how the client handles them.

    I always try to let the client know: I can do X amount in Y timeframe. You asked for Z total. Here's an estimate for each item in Z, pick X from it for our current Y timeframe. I'll get back to you every Y timeframe to show a demo, and you can choose X from the remaining Z again (with changes based on circumstances if required). Feel free to fire me when you have enough out of Z that's functional. (Ok, I probably wouldn't say the last sentence in those terms, but I'd find a way to say it, if for no other reason than to sell them the rest of the process.)

    As far as looking it up before the interview: I've review Agile literature. Searching any of the agile yahoo groups for the question at hand ought to be good enough.

  7. How do you search and find requirements? What are possible sources?
    "What do you mean?" would be my response. I really don't know. What does searching and finding requirements mean? Does it mean figuring out how to do requirements that I don't know how to accomplish?

    If so, the first step is Google. In the rare event no one that I can find has had my problem, I'll go traipsing through the source code if it's available.

    Clearly, I don't know where to start here.

  8. How do you prioritize requirements? Do you know different techniques?
    I rarely prioritize requirements. I let the customer decide. I give them a relative cost of implementing X requirement vs. implementing Y requirement, and let them decide. If Y requires X, then I tell them so.

    I know of different techniques - take "random" for example. I don't know what they might be called. But I cannot think of anything better, even if it were decreed as a Top 10 Commandment for Prioritizing Requirements.

    No web search for this comes to mind. I'd review a couple of process management books if I had no clue. This seems to be a decent discussion, if you must have one from me from a cursory browse.

  9. Can you name the responsibilities of the user, the customer and the developer in the requirements process?
    The user will be the person using the software, versus the customer being the one who pays for its development. I hate that distinction. The developer programs it. Responsibilities? In my ideal organization, I'd have:
    • Developers working with the Customer to manage requirements.
    • Developers working with the User to make the application work for them regardless of the Customer (I've seen too many projects where the User had to use whatever the Customer purchased, even if the purchase was ... little yellow bus-ish.)
    • Customer/User having daily meetings with the developer
    • Developer making the best software he/she can given the constraints.
    Again, I don't know where I'd look this up before being asked. Suggestions (again, as always) are most welcome.

  10. What do you do with requirements that are incomplete or incomprehensible?
    I send an email saying "I don't understand what you mean. Please read the very small attached book and get back to me."

    What the fuck is this shit?!

    Just kidding, of course (at least in most cases. I've been recently tempted to send that exact email, as it happens.)

    I just ask them to clarify. If I don't have contact with the customer, I ask the intermediary to clarify or get clarification.

    Outside reading: Agile, and hopefully other processes for some compare and contrast.

I think these are decent answers to start a discussion with. If you're a hiring manager, what do you say? Would you show me the door, or keep me around for a while longer?

It's not quite as hard as Steve Yegge's list of things to know (I'll get to that eventually), but it's a good (and more well-rounded!) list nevertheless.

How would you answer the Requirements questions?

Hey! Why don't you make your life easier and subscribe to the full post or short blurb RSS feed? I'm so confident you'll love my smelly pasta plate wisdom that I'm offering a no-strings-attached, lifetime money back guarantee!


Comments
Leave a comment

hahaha... this was pretty funny. I think I would have flubbed these questions much worse than you. But I put in a lot of effort and sincerity for my users, which I think people notice.

Also, like the caveat that there is no right or wrong answer, but really the responses they elicit will give the asker some insight into the person's character and attitude, which is (some might say) a very big factor. A wise interviewEE can also use his/her responses to figure out if the interviewER is a moron or not (I've been reading The Daily WTF quite a bit).

Posted by KaJun on May 27, 2010 at 07:22 PM UTC - 5 hrs

This is a great list of questions to initiate intelligent discussion around software development...

But it's only a small fraction of the larger interview process to ensure you get quality candidates on board. I actually put together a blog outlining interview strategies:

http://www.customsoftwarebypreston.com/software-de...

Thanks,

Brett

Posted by Brett Miller on Nov 07, 2010 at 08:52 AM UTC - 5 hrs

This is a great list of questions to initiate intelligent discussion around software development...

But it's only a small fraction of the larger interview process to ensure you get quality candidates on board. I actually put together a blog outlining interview strategies:

http://www.customsoftwarebypreston.com/software-de...

Thanks,

Brett

Posted by Brett Miller on Nov 07, 2010 at 08:52 AM UTC - 5 hrs

Sam,
Look - I am not a developer, just a manager trying to replace a hell of a good developer I lost the natural food chain. I grabbed the 100 questions as one angle of looking at understanding replacement knowledge. I went on the web and went through all of the EMOtional chatter about how unfair these questions were as a whole - I throughly enjoyed you going out there and answering and the common sense answers in each catergory you gave - good for you - good for us. now if you need a job, I know of this opportunity....

Posted by Jeff on Aug 03, 2011 at 06:38 PM UTC - 5 hrs

display your answers in simple language every one can't understand your language

Posted by ajay on Aug 22, 2011 at 08:30 AM UTC - 5 hrs

Answer to question 8)
I would give highest priority to all the task in critical path, next priority would go to 2 critical path and so on.

See "Critical path Method" in Wiki to understand this.

Posted by Trilok on Sep 08, 2011 at 11:23 AM UTC - 5 hrs

My strategy - If you can't convince them, confuse them!

Posted by rich4321 on Aug 04, 2012 at 03:33 AM UTC - 5 hrs

What motivates you?

Posted by Marco Serrano on Feb 11, 2013 at 07:36 PM UTC - 5 hrs

@Marco: Curiosity and problem solving are fun for me, which is why I got into this field.

Money doesn't hurt either, though I'd say it's a secondary motivator as opposed to the primary ones I listed above.

Posted by Sammy Larbi on Feb 12, 2013 at 07:20 AM UTC - 5 hrs

Visit the following link to learn some commonly asked Interview Questions for the job or vacancy of Software Engineer or Software/Web/Desktop Application Developer. It also includes OOP, C#, ASP.NET, ADO.NET and SQL Interview Questions.
http://sohaiby.blogspot.com/2013/09/software-engin...

Posted by Sohaib Ahmed on Oct 12, 2013 at 04:04 PM UTC - 5 hrs

Thanks for sharing. such a greate article all time. Thanks buddy. also see my own article at this topic
http://www.mycodingland.com/2015/08/top-interview-...

Posted by Aamir on Oct 23, 2015 at 01:09 PM UTC - 5 hrs

it's being useful. thanx alot

Posted by dreamland on Apr 13, 2017 at 04:59 AM UTC - 5 hrs

Leave a comment

Leave this field empty
Your Name
Email (not displayed, more info?)
Website

Comment:

Subcribe to this comment thread
Remember my details
Google
Web CodeOdor.com

Me
Picture of me

Topics
.NET (19)
AI/Machine Learning (14)
Answers To 100 Interview Questions (10)
Bioinformatics (2)
Business (1)
C and C++ (6)
cfrails (22)
ColdFusion (78)
Customer Relations (15)
Databases (3)
DRY (18)
DSLs (11)
Future Tech (5)
Games (5)
Groovy/Grails (8)
Hardware (1)
IDEs (9)
Java (38)
JavaScript (4)
Linux (2)
Lisp (1)
Mac OS (4)
Management (15)
MediaServerX (1)
Miscellany (76)
OOAD (37)
Productivity (11)
Programming (168)
Programming Quotables (9)
Rails (31)
Ruby (67)
Save Your Job (58)
scriptaGulous (4)
Software Development Process (23)
TDD (41)
TDDing xorblog (6)
Tools (5)
Web Development (8)
Windows (1)
With (1)
YAGNI (10)

Resources
Agile Manifesto & Principles
Principles Of OOD
ColdFusion
CFUnit
Ruby
Ruby on Rails
JUnit



RSS 2.0: Full Post | Short Blurb
Subscribe by email:

Delivered by FeedBurner