My Secret Life as a Spaghetti Coder
home | about | contact | privacy statement
This is the eight in a series of answers to 100 Interview Questions for Software Developers.

The list is not intended to be a "one-size-fits-all" list. Instead, "the key is to ask challenging questions that enable you to distinguish the smart software developers from the moronic mandrills." Even still, "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. Here's that attempt.

Though I hope otherwise, I may fall flat on my face. Be nice, and enjoy (and help out where you can!).

  • What kind of tools are important to you for monitoring a product during maintenance?
    I rely on logs and profiling tools on occasion. I'm really interested to hear from the rest of you about this though.

  • What is important when updating a product that is in production and is being used?
    I'd say it's important not to interrupt service. Surely there must be something else you're getting at?

  • How do you find an error in a large file with code that you cannot step through?
    cout, puts, printf, System.Out.print, Console.Out.WriteLine, and ## have all been useful for me at one time or another.

    A good strategy here is to isolate the code that's causing the error by removing code and faking results. By doing that, you can slowly add code back in until the error reappears. Rewrite that part.

  • How can you make sure that changes in code will not affect any other parts of the product?
    Regression tests!

  • How do you create technical documentation for your products?
    Ideally I'd have comments that can be harvested by tools like RDoc or JavaDoc, but times are often less than ideal.

    The Empty Set

  • What measures have you taken to make your software products more easily maintainable?
    See my answers to the questions about technical design. Also, having unit tests helps handily.

  • How can you debug a system in a production environment, while it is being used?
    You can read logs if important events are being logged. Profiling tools exist for this purpose, but I don't have experience with any outside of those for use with databases.

  • Do you know what load balancing is? Can you name different types of load balancing?
    One computer acts as the gatekeeper for an array of computers and directs requests to the others to "balance the load" of the entire system.

    I'm not familiar with different types, but just guessing I'd assume they have round-robin and need-based load balancing. I'd also presume any other scheduling algorithmic scheme could be applied in load balancing.

    I'm more interested to know why this is on the maintenance list of questions. Is it because you've deployed your application and now you need to scale it with hardware?

  • Can you name reasons why maintenance of software is the biggest/most expensive part of an application's life cycle?
    One view is that after you write the first line of code, you begin maintenance. But more in-line with the popular view: it lasts the longest. You may take a month to build a system that will be in production over several years. During that time, defects are found that need to be fixed, business rules may change, or new features may be added.

    Also, we suck at writing software.

    EconoPoo

  • What is the difference between re-engineering and reverse engineering?
    I didn't know this one. I thought and would have responded that re-engineering would be rebuilding an application with a white box, while reverse engineering would be done through a black box.

    According to Wikipedia, who is never wrong,
    The reengineering of software was described by Chikofsky and Cross in their 1990 paper, as "The examination and alteration of a system to reconstitute it in a new form". Less formally, reengineering is the modification of a software system that takes place after it has been reverse engineered, generally to add new functionality, or to correct errors.

    This entire process is often erroneously referred to as reverse engineering; however, it is more accurate to say that reverse engineering is the initial examination of the system, and reengineering is the subsequent modification.
How would you answer these questions about software maintenance?

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

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 29, 2011 at 06:42 AM UTC - 6 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