Archive for the ‘Development’ Category

Project Management

2004-05-21 18:47

Photograph: Bicycle Wheels, Cambridge, MA, 2004-04, © Nick Varacalli. Been interviewing project managers of late.

Some Interview Questions

The questions are a work in progress, some of the questions are decent, many suck. These aren’t the actual questions, just bullets to remind me what to ask. Conversation starters. Sometimes there’s no right answer, I just want a reaction. I have to remember to keep my questions short and open. Let them talk!

  • How to manage the differences between the different types of developers (LMH experience cross LMH talent)?
  • Reverse interview (how would they interview someone in my position)? Haven’t used this one yet. Doubt I will.
  • Help me prioritize my To Do list. Haven’t used this one yet either.
  • What hobby or interest outside work has helped you in your career?
  • How do you avoid a death march? One candidate asked “What’s a death march?” Ding! No hire.
  • What do you want in a software engineer?
  • How do you reconcile the 80/20 rule with the need for 100% accuracy in some cases? One candidate asked me to explain the question twice. Then they answered “I’d just escalate that to my boss.” Ding! No hire.
  • What advice would you give an aspiring manager?
  • How do you get time estimates for projects?
  • What do you do to help your charges succeed?
  • What do you want from your charges?
  • How do you make the customer happy?
  • At what point to you tell your charges (or think to yourself), “Bullshit!“?
  • How do you deal with a dysfunctional team?
  • When interviewing, how do you vet people who can talk the talk, but can’t walk the walk? How do I do that with you?
  • How do you figure out your vision for your career? For your company?

Oh… and if I’m interviewing you to be my manager, and you’re cowed by me, I don’t care that there’s an interview dynamic… tough… Ding! No hire.

Some Project Management Tips

I’m not vouching for any of these… just things I want to keep in mind and think about when it comes time…

  • When getting document sign-off, schedule a meeting and do it face to face. I’ve already been bitten by this once this year.
  • Outward facing, focus on the customer. Inward facing, empower your charges.
  • Keep an ongoing document of questions based on surprises that have bit you in the ass in the past.
  • There are many more gray areas in project management than development.

Project Managing

2004-03-25 19:05

bullet point stream of consciousness may occur at times…

My first major project at work hit production while I was on vacation. It wasn’t the disaster that I had nightmares about. Thankfully.

Project management instills me with a feeling of helplessness. You depend on other people. Not everyone is a Smooth or a Sheffi. How do you estimate how long it will take someone who is more junior / less skilled than you are to do something? Relying on their estimate isn’t always right, because, heck, their estimation skills may not be their forté.

I have the urge to code, even if I should be overseeing things. I broke down and coded something that I should have delegated. Is this bad?

I’m done. It didn’t blow up. It is useful. But… will it be used?

On this project, I was worried that my architecture wouldn’t be up to snuff. I was worried that I wouldn’t be able to do it well enough. My new project is more familiar. I’m simply not sure if I’ll be able to get it done on time. Much more reassuring… I know how to deal with that.

Honest introspection and the outward appearance of self-confidence are two things that I have yet to reconcile.

Programming People: Estimates, Motivation, Example

2004-02-08 19:22

Programming People entries will examining managerial and motivational type topics. Most of the time it will be related to work, but sometimes it deals with social dynamics. This may belong in Thoughts On Development, but it’s of interest to non-developers also.

The name of the topic comes from HB. One way to think of managing people is to think of it as “programming people”, just as one would program computers. You have a goal you wish to accomplish. It can involve convincing a computer to perform tasks using software. Apparently, it can involve convincing a person to perform tasks (involving a computer to perform tasks using software) using wetware. That description appeals to me enough that I’m interested in at least trying it. I disagree somewhat with my CIO’s thought that if you can apply brain power to a software problem then you apply the same brain power to wetware problems. I think that certain patterns of thought work well when manipulating computers. Others work well when manipulating people. If my skills at manipulating people were as good as my skills at manipulating computers, I would have gone into a different field. On the other hand, maybe my skills at manipulating people aren’t good because I don’t have as much interest in doing it.

Of course, I’m going to have to self-censor here for a couple of reasons. First, I don’t want to provide too many details about work. That shouldn’t be too hard. Second, some of the techniques used in social dynamic situations don’t necessarily work if people are aware of them. In fact, the last sentence may be enough to heisenberg some situations.

Anyway, enough of the intro, on to some situations.

Some of the new responsibilities that I’m stepping into are resource allocation and scheduling. Motivating developers to do things is also proving problematic. Though our general office culture of “focus on what is in front of you at the expense of tomorrow” may be getting in my way, the problem is squarely on my shoulders. There are a couple of things of interest for now.

First, how do you estimate how long it will take someone else to do things? I’ve become quite adept at estimating how long it will take me to do something. I’ve also learned to handle surrounding issues, such as pitching inflated numbers to managers to provide space for the inevitable emergency they will throw at me, and then discount when it comes to figuring out if I hit my targets. I’ve also learned to lowball estimates when convenient. Mostly when I know some other developer has also lowballed, either intentionally, or because, like most developers, they can’t estimate for shit. Sometimes lowballing is important when something absolutely needs to get done but managers won’t be happy with the fully loaded time estimate. Lowball. Partially implement. Display benefits to managers. Managers give you more time.

But I digress. How do you estimate how long it will take another to do something? Well, the first question is, do you know who that someone is? If so, HB suggests that I ask that person how long they think it will take to implement. Besides getting an estimate from the person who is most familiar with their work, there is also an element of buy-in. Instead of some Pointy Haired Boss handing them a schedule, they are participating. They have motivation to hit the deadline that they suggest. It has the downside of relying on a developer’s estimation skills, which may well suck. I’m awaiting wisdom on this one from someone with more experience from work.

Second, how do you get someone to do something you ask them to? I’ve asked someone to perform specific tasks in order to prepare for some work we have to do. Repeatedly. The task is well within the abilities of the person asked to perform it. Dan suggests sitting down with them and walking them through the task. That seems particularly wasteful of my time, and limited supply of patience. As I write this, I’m starting to fret more and more about my deadlines.

On a related topic, how do you teach developers how to automate tasks, making both their jobs, and the jobs of those around them easier. Talking to HB about this, he suggests the best way to program developers is to demonstrate success to them. This involves:

  1. Saying what you are going to automate.
  2. Saying what you expect to happen from automating it.
  3. Giving them the task of actually automating it.
  4. Giving them the task of evaluating the results.

Roughly, explain the benefits, tell them to do what you want, tell them to observe the benefits. Once they have done this once, you can ask them to make suggestions about other things to automate. Once they’ve lived it for one cycle, they’ll have a much better appreciation of the trade-offs between time to develop, time saved, and time wasted because of automation bugs.

On a meta level, HB is teaching me “How to teach developers: ‘How to automate.’”. Thank you HB.

Coding Horrors

2003-10-12 08:50

Photograph: Dina and Erin, Henna Kit, Close-up Depth Of Field, Magazine Beach, 2003-01-31, © Nick Varacalli. Here, under the guise of learning from others’ mistakes, and at the request of some of the ITG Ex-Pats, are a few fine examples of how not to do things if you are a programmer. They are generally in VB-like syntax, but you should be able to discern the reason for horror if you are a competent developer. Sorry to all the legion non-developers in my readership.

Names have been changed for readability in many cases. Code has been condensed in order to illustrate the core principles. The horrors, though, have not been exaggerated.

If Booleans Are Hard = True Then

Within the same function.

If x = True Then
...
If x <> False Then

ItemExists isn’t used anywhere else. Bonus: rsoperation25 is so named as to avoid collision with all the other recordsets that have essentially global scope.

If Not rsoperation25.EOF Then
    ItemExists2 = True

    If ItemExists2 = True Then
        ItemFlag2 = True
    End If
End If

Readability

aka, “Where’d The End If Go?”

If Foo() Then _
    Bar = False

Language Abuse

Let’s take AppendFormat or String.Format, designed to remove string concats, and put a string concat in the middle of it.

' Banner Image.
' Guilty Party Username Suppressed (mm/dd/yyyy)
'results.AppendFormat("<img src=""/{0}/banner.jpg"" >", ItemCode)
results.AppendFormat("<img src=""/{0}/" & Banner & """ >", ItemCode)
String.Format("<a href=""" & PageName & "?{0}"">...</a>", QueryString)

No Style

Let’s take some nice HTML, with styles, and replace with font tags and other goodness. Code split onto multiple lines for “readability”

ShippingChoices = Replace(
                        Replace(
                            Replace(
                                Replace(ShippingMethods(...),
                                        " CLASS=""Normal"">",
                                        "><FONT FACE=""" & g_sFont & """ SIZE=""2"">" ),
                                " CLASS=""Error"">",
                                "><FONT FACE="""  & g_sFont &  """ COLOR=""#FF0000"" SIZE=""2"">" ),
                            " CLASS=""subscript"">",
                            "><FONT FACE="""  & g_sFont &  """ SIZE=""1"">" ),
                        "</TD>",
                        "</FONT></TD>" )

Span anyone?

<FONT style="FONT-WEIGHT: bold; FONT-SIZE: 13pt; COLOR: red">

Y2K5

currentYear = Right(strStartDate, 2)
If (currentYear = "00" Or
    currentYear = "01" Or
    currentYear = "02" Or
    currentYear = "03" Or
    currentYear = "04" Or
    currentYear = "05" ) Then
    currentYear = "20" & currentYear
Else
    currentYear = "19" & currentYear
End If

Objects

Sprinkle liberally through code. Cook at 350° for 40 minutes. These will literally occur on three successive lines.

Dim someObject As SomeObjectType
someObject = New SomeObjectType
someObject = SomeFunctionThatReturnsSomeObjectType

Occam’s Razor Is Rusty

Verbose version.

Private Function isSomethingDisabled(ByVal PID As Long) As Boolean
    isSomethingDisabled = True

    Dim l_lPID As Long

    l_lPID = PID
    'check to see if customer care, if so don't deny, so they can use the site
    If isCustomerCare() Then
        isSomethingDisabled = False
    End If

End Function

Fixed.

Private Function isSomethingDisabled() As Boolean
    Return Not isCustomerCare()
End Function

Data Types?

MajorVersion is an Integer. Pet peeveI’ve got so many, I could start a peeve zoo.: code that uses if statements to set a single Boolean value.

Public Function IsAOL8() As Boolean
    If Browser.AOL Then
        If 8 <= CDbl(Browser.MajorVersion) And CDbl(Browser.MajorVersion) < 9 Then
            IsAOL8 = True
        Else
            IsAOL8 = False
        End If
    End If
End Function

Fixed.

Public Function IsAOL8() As Boolean
    Return Browser.AOL AndAlso Browser.MajorVersion = 8
End Function

Peer Recognition

2003-09-30 08:51

Photograph: Hot Air Ballooning, Rows of Plants, New Hampshire, 2003-07-26, © Nick Varacalli. Received in IM from a coworker (abridged):

Now, I’m no slouch when it comes to OO design, but I’ve always felt a bit behind most of my friends who are in the same line of work that I am. I was very surprised at how good the compliment made me feel.

Now we just have to see if the implementation and performance match the design.

Etymology

2003-09-28 08:52

Photograph: Dina and Erin, Henna Kit, Admiring Handiwork, Magazine Beach, 2003-01-31, © Nick Varacalli. I finally bought a Pocket Book that fits in my back pocket. Ah ha!

I’ve come to understand the difference between the “professional” and “enterprise” version of software. In one tool we bought, the professional version is perfect for, well, a professional developer to run against his code. The enterprise version is automatable, suitable for running against an automated build.

Speaking of which, build automation is pretty cool.

Automation

2003-09-20 08:53

Photograph: Nick With Flower At Amy's Wedding, Newport, Rhode Island, 2003-06-21, © Nick Varacalli. Yesterday was one of the most productive days I’ve had in a long time. Finally got FxCop (static assembly analysis), NUnit (unit testing framework), NDoc (help file generation) up, running, and automated on test projects. I’m really impressed with NDoc. Generates compiled help and web pages that look like the MSDN documentation from your XML comments. Of course, it’s easy to automate with NAnt already running. Next, I have to look at Log4Net (logging framework), NUnitASP (ASPX unit testing), and Draco.Net (continuous integration). It should be relatively easy to get the up and running at work. The hard part, of course, will be to get other people to use the tools.

My VS.Net macro suite is also growing at a fair clip, both my own macros, and stuff grabbed off the web. I think I’m going to start posting some of them here in an attempt to get more regular updates to the Thoughts on Development section.

Background Threads Working Overtime

2003-08-30 08:59

Intro

Photograph: Hot Air Ballooning, New Hampshire, 2003-07-26, © Nick Varacalli. I’ve been at my new job for 3.5 months now. First, that means that I’ve passed my probationary period. More importantly, it means that my brain is now getting more and more into the habit of thinking. I’m starting to want to read more, both technical, and non-technical, fiction and non-fiction. It also means that I’m getting more and more epiphanies. A lot of things are coming together.

Problem Solving Is Not Solving The Problem For Me

Photograph: Hot Air Ballooning, New Hampshire, 2003-07-26, © Nick Varacalli. One thing that still hasn’t come together for me is problem solving in a work environment. In a home environment, once you solve a problem, it’ll normally stay fixed. You don’t have to pay much attention to it.

At work, I’m getting paid to solve problems. See… that’s an example of how deep me not groking this idea really is. I’m not really getting paid to solve problems. Solving problems is the thing that I do the most of at work, and on the surface, it looks like that’s what I get paid for.

It’s not.

I get paid to know how to solve the problem, and to keep the problem from happening.

It’s not useful if I twiddle with configurations if I can’t figure out which twiddle solved the problem. I have to be able to extend my problem solving skills to the relevant portions of my organization.

Though a fairly simple concept, it, as many simple concepts do, has a lot of ramifications.

  • I should be documenting things that I am doing, so that others in the organization can benefit.
  • The way I wrap my message is important. It doesn’t matter if I know something if I can’t flow that information to the rest of the organization in a manner that will make them listen.
  • It is not enough for me to architect something such that it helps me solve problems. The architecture, as well as my code, needs to have a competitive edge over the lazy way of doing things. The solution to the problem has to be seductive.

Cost Gradient

Photograph: Hot Air Ballooning, New Hampshire, 2003-07-26, © Nick Varacalli. One of the things about good development practice and architecture is that you want to break things. OK… what you really want to do is break things sooner. A bug is an order of magnitude more costly each milestone (project accepted, design, development, test, prod) it passes. What a good software engineer wants to do is push the bug down the cost gradient. Unfortunately, this is generally up the effort gradient. That’s why humans, being naturally lazy, aren’t always good at this. Short term, planning for the long term is hard.

One of the things that I’ve come to worry about at work is perception. When you expose bugs sooner, even if they are other people’s bugse.g. You just put logging statements in the code to show something bad is happening people have a tendency to blame the messenger. Uncovering bugs in production that no one knew about, but affect thousands of our users would seem like a good thing. It is. But if you don’t do it correctly, people will think that you are responsible for the thousands of bugs.

I think that one of the things that I like about my job is that, although the responsibility for dealing with the bug may fall to the messenger, they don’t really seem to be blaming the messenger.

Panopticon

Photograph: Hot Air Ballooning, New Hampshire, 2003-07-26, © Nick Varacalli. I’ve been an avid reader of software engineering best practice type books, covering everything from deep in the code books, specialized / niche technology tomes, social dynamics, design, psychology, etc. It’s starting to come together. A lot of the ideas that I understood, I am slowly starting to grok. I’m at the point where ideas are forming on their own. Kinda scary.

I think that there are a number of reasons for this. The heavy volume of reading was a good foundation. Accumulating experience never hurts. My brain getting into gear no doubt helps.

I think the most important factor, though, is the fact that I’ve now ‘worked’ at three very different companies in the last year. The ability to compare and contrast, and to see that solutions have to be tailored to the company has brought a lot of issues into focus.

Site Updates

2003-08-30 08:57

Photograph: White Water Rafting, Charlemont, Massachusetts, 2003-07-20, © Nick Varacalli. Photograph: White Water Rafting, Charlemont, Massachusetts, 2003-07-20, © Nick Varacalli. Uploaded the white water rafting pictures. Split out the Maritime road trip pictures into a separate page. Nifty new rollover effect for pictures. Not that great, but I get to roll-my-own utilities to do the work, so I’m happy. Also cleaned up a bunch of the picture HTML, automated some uploading, and fixed some internal naming.

Learned that the proper way to center a tablePictures pages, for layout. or a divRésumé page of paper effect is to use:

.CenteredBlockElement
{
	margin-left:  auto;
	margin-right: auto;
}

Thoughts

2003-08-21 09:01

Thanks to Jeff, I learned how to do cross platform image rollovers.

function logoChange(imageSrc) {
	document.getElementById("logo").src = imageSrc;
	return true;
}

Next, I have to get my résumé properly centered in Mozilla, like it is in IE.

What do I like about Firebird?

  • It’s free.
  • Unzip and it works. No installation.
  • Popup blocking.
  • Tabbed browsing. Ctrl-Click on a link = open in a new tab, leaving the current tab on top.
  • Open folders of bookmarks in tabs. Great for reading your morning comics and news.
  • Type in page find. Great when used in conjunction with Google.
  • Select and search. Ditto on Google.
  • Ability to turn off selective JavaScript behaviours.
  • Works mostly like IE. Notably, Alt-D = Address bar. Ctrl-Enter = complete .com address.

What’s missing?

  • Switch to turn off image resizing. Found it, it’s in the geek-tweak settings.
  • Too much real-estate taken up by controls, even in full screen mode. None of the skins quite fix this problem. I may have to write my own.
  • Ability to turn off animated images.
  • Font is that garish bold thing that Netscape uses. I can probably turn this off using a skin or the userChrome.css file.
  • The interface lacks accelerator keys in numerous places.

Friday was weird… being up at 04:00 always gets me feeling a bit alone… probably half solitude, and half lonely. It brought back a lot of memories of being in London, when I’d frequently be alone in my room writing letters to friends. It used to be how my life was, and I liked my life then. It is no longer how my life is in general. Besides being with Dina, I’m constantly around friends. I like my life better now.

Early To Rise From The Ashes Into Flames

2003-08-15 09:04

Downloaded Mozilla Firebird. Pretty good browser. Just need a few small tweaks, and I’ll be willing to use it over IE.

I like Firebird enough that I finally sat down and fixed the display of the Page HeaderCurrently the black strip at the top of the page with the site logo and “Email Me” link. under Mozilla browsers. The <p> that contains the logo and link needed

height: 35px; /* For Mozilla: Same height as the logo */

and

margin-top: 0; /* For Mozilla: Despite the fact that the body has margin: 0; */

Guess that’s the next phase in my web programming development: learning to care about cross-browser compatibility.

Also stopped the horizontal scroll bar from appearing on the blog pages. Two culprits: one, a

width: 105%;

was understandable. The other,

text-align: justify;

causes IE6.0SP1 to display it, but not other browsers. Weird.

Am downloading the ISOs for Red Hat. So far, WinXP hasn’t crashed. On the other hand, I just watched the IE/Explorer dialog display:

1 Hour 0 Minutes Remaining

1 Hour Remaining

60 Minutes Remaining

Car noise was but a pebble in the brakes.

Signed the lease for another year at the same place.

Got my new business cards for work. Finally. Ironic for reasons I can’t mention.

Heard back from Heidi again. I’ve been hashed into the “sin” bucket in her memory.

<sigh />

Wasn’t quite what I was hoping for, but it wasn’t unexpected either. In fact, I’m so unhappy about it that the part of me that enjoys tempting people is neither proud nor guiltily ashamed; it’s just staying quietly in it’s little corner of my mind/personality.

Another possibility is that, all along, I never even had cards to play. That would probably be the worst outcome, since it would mean that I was manipulated and lied to all along. I try not to think of that much, mostly for my own self esteem.

Nadine used to tell me that I sounded like Kermit D. Frog. I never told her that I liked this song.

It’s not that easy being green;

Having to spend each day the color of the leaves.

When I think it could be nicer being red, or yellow or gold,

or something much more colorful like that.

 

It’s not easy being green.

It seems you blend in with so many other ord’nary things.

And people tend to pass you over ’cause you’re

not standing out like flashy sparkles in the water

or stars in the sky.

 

But green’s the color of Spring.

And green can be cool and friendly-like.

And green can be big like an ocean, or important like a mountain,

or tall like a tree.

 

When green is all there is to be

It could make you wonder why, but why wonder why?

Wonder, I am green and it’ll do fine, it’s beautiful!

And I think it’s what I want to be.

From “The Sesame Street Book and Record”.

‘Green’ is ©1970 Jonico Music, Inc.

Jeff: One entry, no “points of ellipses” Fine, only one…

More Geek Tweak

2003-08-15 09:01

Figured out JavaScript for the mouseover on Mozilla instead of IE. One would think that rollovers would be an easy thing to do. This is what I came up with… if anyone has suggestions for better, I’m all ears.

if (document.images) {
	logoRed = new Image;
	logoWhite = new Image;

	logoRed.src = '/images/varacalli-logo-with-home-red.gif';
	logoWhite.src = '/images/varacalli-logo-with-home.gif';
} else {
	logoRed = '';
	logoWhite = '';
	document.logo = '';
}

function logoChange(imageSrc) {
	var bWorked = true;
	// This one works on IE
	try {
		document.all.logo.src = imageSrc;
	} catch (ex) {
		bWorked = false;
	}

	// This one works on Mozilla
	if (!bWorked) {
		try {
			document["logo"].src = imageSrc;
		} catch (ex) {
			// Do Nothing. Ignore error.
		}
	}
	return true;
}

function logoHighlight() {
	return logoChange(logoRed.src);
}

function logoNormal() {
	return logoChange(logoWhite.src);
}

Not Right. Jealous OS.

2003-08-09 09:07

Photograph: Not A Church, Boston, 2003-05, © Nick Varacalli. Was in one of the comic stores in Harvard Square today. A middle aged couple was discussing anti-Bush / anti-Right / left t-shirts, bumper stickers, and web sites. It was nice to be able to point them to Patriot Savant, run by a friend of mine. Felt almost as good as voting.

I emailed a couple of friends asking them for Linux distro suggestions. I think that WindowsXP Pro pulled a jealous tantrum. It blue-screened on reboot. Even safe mode wouldn’t work. I finally figured out how to use the recovery console to do a chkdsk on it. I feel sorry for the non-techie who has to figure out how to do something like that. Someone like my mom might just buy a new computer, or abandon them forever. Now I just have to figure out whether it was installing remote admin software, or something caused by a power flap.

Lucky Us

2003-07-30 09:20

Photograph: Pigeons Over the Charles River, Boston, 2003-05, © Nick Varacalli. Maybe this belongs in thoughts on development, maybe not.

A week or so back, we were driving to lunch, and discussing some architectural or process short coming in our current system. One of my younger co-workers, with only 3 or so years experience said something like “Obviously, it should be done like this.”

That statement made me realize what a great education working at ITG was. I learned zoots about all the non-coding issues that surround software development. Now that I’m at a new job, I realize how much I’ve learned over the past five years. I also realize that I still have a lot to learn… mainly when it comes to putting what I know into practice.

Working For The Man

2003-07-29 09:13

The more I learn about software development, the more I realize that my paycheque is a bribe to write sub-optimal software.

Development vs. Writing

2003-07-27 09:17

Photograph: Looking Up Building, Boston, 2003-05, © Nick Varacalli. There are times that I use my blog as a means of expressing myself, writing can be fun and therapeutic. Other times, it’s a way to learn about various technologies. I’m currently in the mood to do the latter.

I’ve ditched VSS, and have installed SubVersion and TortoiseSVN. I’m using NAnt as a build system, instead of a homebrewIt had a kick-ass UI. Maybe I should write one for NAnt. system of batch files and XML. I’ve signed up for SourceForge, and hope to contribute to both NAnt and NAntContrib. After that, integrating NUnit, NDoc, and FxCop.

Although I’m currently using a pre-processor, I’m unhappy with it. I have to build my web site by running the pre-processor before I can view my changes. I think I need to figure out how to write a handler for my un-pre-processed files so that my local web-server will run the processing step before displaying the files.

Theoretically, I shouldn’t need a preprocessor, I should just be writing the whole site as XML fragments, then use/write a utility to aggregate the XML into XHTML. An additional advantage of that is I can start publishing an RSS feed.

I’m shifting from a writing bent to a technical bent because I may need to learn some of these tools and technologies for work. Also, work is digging into my writing time. As a geek, writing software, or other facets of development, is much easier than writing prose.

Work

2003-06-14 09:23

Photograph: Boston Public Gardens, 2003-05, © Nick Varacalli. Not much of note going on lately other than work. I’m learning a lot about .NET and ASP.NET as I port ASP code. Hopefully, I’ll have some entries for thoughts on development soon.

Pictures. Moved. Work.

2003-06-02 09:23

Photograph: Falling Balcony, Cambridge, 2003-05, © Nick Varacalli. Updated the pictures page. Added all the pics that I’ve been uploading for the blog. Changed the layout.

The web hosting transition is done, modulo getting the dns entries to propagate out. Site is up, mail is flowing. I can now easily check my web logs for referrers, visitors, and all sorts of other stats.

Whether or not I’m tired / dazed after work has less to do with the amount of work I do, and more with whether or not I finish popping my stack by the end of the day. Two hours alone in the morning at work is very productive, BTW…

Learning Quirk

2003-05-25 09:29

src=”/pictures/maritime-road-trip/maritime-road-trip-nh-lake-2003-05_small.jpg”
class=”alignright”
style=”width : 150px; height : 97px;”
alt=”Photograph: New Hampshire Lake, 2003-04, © Nick Varacalli.”
title=”New Hampshire Lake, 2003-04, © Nick Varacalli.”
/>

I’m coming to realize that I have problems understanding the underlying concepts of situations.
This comes into play a lot when I have to understand the problem domain for something I am programming.
In some ways, it is frustrating that I learn the domain that slowly or shallowly.
At least there is an upside to this.
I can implement solutions with minimal knowledge of the underlying domain.

Not Doing Things Right

2003-03-21 09:55

Photograph: Beach-side house, St.-Lucia, 2003-02, © Nick Varacalli. This might be construed as thoughts about software development. On the other hand, this applies in a much broader context to life, so it’s here.

There is a thought in software engineering that things should be done “The Right Way ™”. Take the extra little bit of time (and therefore money) to write software correctly the first time. In the end, this saves money because industry studies have shown that avoiding a bug by coding correctly is cheap compared to the other options. If the bug is found in testing, before the software is released to customers (whether shrink wrap, or internal) it is about 10 times as costly to fix and re-test. If the bug is found in production, after the software is released to customers, it is about 100 times as costly to fix, re-test, and re-deploy. This ignores the loss of trust by the users of your software.

Assuming that the figures above are right, are there times when it is appropriate to do things “Not The Right Way ™”? I’m starting to think that the answer is, unfortunately, yes.

One of the problems with doing things right is that it the cost is incurred up front. Shortsighted people, wanting to avoid costs, and not being astute enough to see the costs downstream, therefore prefer that things not get done the right way. Trying to convince these people of doing things right burns office-politics karma. You may be pigeonholed as difficult to work with, nitpicky, perfectionists, and all sorts of things that you would think are compliments, but really aren’t in a corporate environment.

“Ah,” you say, “all we have to do is to show them the costs downstream.”

It’s not that easy. If you work for an organization where shortsightedness is endemic and learning from experience doesn’t happen, it is near impossible to convince people of the usefulness of doing things now that pay off later. A good example is our ex-department, ITG, in the context of Merrill Lynch. Most of us were hired because, among other qualities, we had a passion about doing things “The Right Way ™”. It was one of the things that caused a lot of us individually, and our department, to be painted with a difficult-to-work-with brush.

The problem is that in a shortsighted environment, no one remembers that things are easier now because you did the right thing yesterday, last week, last month, or last year. It would have been just as easy now even if you hadn’t done it the right way. No one can correlate the fact that things are hard now with the fact that you didn’t do it the right way in the past. Attempting to point out that you are in a pickle because of poor decisions in the past simply gets you label you as a wise-ass, I-told-you-so type person. All people will remember is that you wasted time and money trying to get things done your way. You’re being stubborn and unresponsive.

Yes, I realize that the definition doing things right is highly subjective. There are times, however, when it is apparent that approaches to problem solving have not been thought out.

I think that one thing that my new job is teaching me is that I can’t be as passionate about optimizing for efficiency, and doing things right when others are involved. I’m now a consultant. The customer is always right. I can suggest what I think is the correct way of doing things. The customer is free to ignore said advice. I will attempt not to say I told you so, no matter the guise.

However, I’m still looking for a job that will let me be passionate about it again…

On a personal level, I guess this means that I can’t get frustrated when I optimize for something in a situation, and then things don’t go the way I planned due to outside factors.

On the other hand, maybe what this means is that I have to learn to be (much) more persuasive in convincing others of the righteousness of my convictions. Hmmm… fat chance of that. I’m not that persuasive, I’m probably not that right, and you can lead a horse to water…