Skip to main content

Interviewing contractors

Since I'm new to this game, I have no idea what something costs. Plumbers, carpenters, electricians are all paid much more than I am as far as hourly rate goes, and in my mind, since I am decently handy, if I didn't have a day job, I could be doing many of the tasks I am having to farm out. I would do it more slowly, perhaps not as well, I would need to buy tools and materials at a premium, but I would get it done.

Things like major plumbing and electrical also require licensing. In some cases this is important, since there are complex codes - some of which make sense in terms of safety - that need to be followed.

Some things, like insulating an attic, are quite doable on your own, especially since there are many instructional videos out there, including recommendations from the federal and state governments.

When I need a contractor for a job, I've been looking up "yelp" for reviews to get clues to how the contractor operates. I then like to ask them questions of how they will do something, having first tried to educate myself on the steps, techniques and materials needed for the job. I especially like to see if the contractor as a plan for certain details of the job (e.g we have a chimney, when you are insulating the attic how will you deal with the chimney).

The contractors I have dealt with are fairly opaque with pricing. They quote a total cost including materials which I don't like but that's how things are. What I like best is hourly rate x hours worked + material cost).

I then try and speak with at least one other contractor. By getting two price quotes I can get an idea of whether one of them is trying to take advantage of my inexperience. The more quotes the better, but there are practical limitations to that.

The spread on the quotes can be surprising. I would have expected a 25% or so difference amongst contractors, but for the two big jobs I have had, my quotes have spanned a 4x range.

There are the usual caveats about going with the lowest bid, but in general, once you speak with more than one contractor you will have a hunch as to what sounds fair and what sounds like being taken for a ride.

Be especially wary of contractors that look for things that are wrong and suggest that something is not code/illegal and must be fixed, or who want to do something in a complicated (and more costly way) than your common sense dictates. If they can't explain exactly why they want to draw a new line or upgrade an old installation, get a second opinion.

One thing to keep in mind: when a contractor responds to you, or you set up a time for a consultation, clarify with the person if they are going to charge you for it. I had an interaction with a contractor (incidentally, the one who gave me a quote 4x the other ones) where I declined to go with them for the job and they sent me an angry email asking for money for the consultation. Some companies explicitly say that they will charge to come over to take a look and sometimes roll the charge into the work if you go with them, which sounds fair.



Comments

Popular posts from this blog

A note on Python's __exit__() and errors

Python's context managers are a very neat way of handling code that needs a teardown once you are done. Python objects have do have a destructor method ( __del__ ) called right before the last instance of the object is about to be destroyed. You can do a teardown there. However there is a lot of fine print to the __del__ method. A cleaner way of doing tear-downs is through Python's context manager , manifested as the with keyword. class CrushMe: def __init__(self): self.f = open('test.txt', 'w') def foo(self, a, b): self.f.write(str(a - b)) def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.f.close() return True with CrushMe() as c: c.foo(2, 3) One thing that is important, and that got me just now, is error handling. I made the mistake of ignoring all those 'junk' arguments ( exc_type, exc_val, exc_tb ). I just skimmed the docs and what popped out is that you need to return True or...

Store numpy arrays in sqlite

Use numpy.getbuffer (or sqlite3.Binary ) in combination with numpy.frombuffer to lug numpy data in and out of the sqlite3 database: import sqlite3, numpy r1d = numpy.random.randn(10) con = sqlite3.connect(':memory:') con.execute("CREATE TABLE eye(id INTEGER PRIMARY KEY, desc TEXT, data BLOB)") con.execute("INSERT INTO eye(desc,data) VALUES(?,?)", ("1d", sqlite3.Binary(r1d))) con.execute("INSERT INTO eye(desc,data) VALUES(?,?)", ("1d", numpy.getbuffer(r1d))) res = con.execute("SELECT * FROM eye").fetchall() con.close() #res -> #[(1, u'1d', <read-write buffer ptr 0x10371b220, size 80 at 0x10371b1e0>), # (2, u'1d', <read-write buffer ptr 0x10371b190, size 80 at 0x10371b150>)] print r1d - numpy.frombuffer(res[0][2]) #->[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] print r1d - numpy.frombuffer(res[1][2]) #->[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] Note that for work where data ty...