Category Archives: Uncategorized

Communication Part 2: Don’t waste my time

Do not send meeting invitations for a meeting in the next hour (or early the next business day) if you haven’t directly contacted me beforehand.  I won’t be there.

Do not invite me to a meeting in which I do not actively participate.  Instead,  just send me a recap via email.

Do publish meeting minutes and include Action Items with assigned responsibilities for meetings.

Do not invite me to daily status meetings.  I will be sending my status via email.  Better yet, I will be show you how use your project management tool of choice and run the canned report.

Elements of a great developer job

Over the past few months, I’ve been thinking about my dream job.  Not that I’m not happy where I am right now, but what would make me really happy?  Just thought I’d share.

Company Feel – Excited or boring?  Does the company feel big or small.  I like to work in a fast-paced environment with a lot of control.  Others will like the warm, snugly feeling of a great big company will lots of bureaucracy and red tape.  What about the fringe benefits?  Do they have free beverages, Taco Tuesdays or do they sponsor a local user groups?  Are they located in a cool part of town, or do they allow working remotely?  These things can differentiate a good company from a great company.  I know some of these fringe benefits are kind of cliche these days, but they really do add to employee morale, especially that of a developer.

IT – Your IT team is there to support you in your work, not hinder.  Let’s face it, employees are still people and have obligations outside of work that need to be taken care of during work hours. Accept it.  Slow internet connections are simply unacceptable.  Things like site blockers take the “nanny for 9 yr olds” approach to adult management.  Instead of doing this, let everyone know that the internet is being monitored, and they will be fired if they use it improperly.

Management – Management is there to tow the company line.  But it can be done without severity.  Does management tend to say, “Hey, you were five minutes late!”, or “I saw you logged in last night at midnight, working on anything fun?”  Let’s face it, developers develop on their own time.  A great book that I read recently was Pragmatic Thinking and Learning, in which the author recognizes the necessity of a calm working block of time and the impracticality of getting one at work.  The best work environment (and hence the best manager) embraces this concept and allows you to work when it is best for you, yet still holding you to be accountable for promised work product.

Product Management – Do the product managers know what they provide?  Do they know their audience? or are they flying by the seat of their pants?  If they are, do they at least acknowledge that?

Executive Leadership (C-Level) – Does the highest level of management have a clue?  Or are they just blowing smoke?  Do they have an accurate view of what is going on at the lower levels?  A telltale sign that this is not happening is when product releases are delayed.  A good sign that this is happening is when you see them conducting 360 reviews, talking with people outside the C-level block, like investors, support staff, clerks, etc.

HR – I prefer to be a consultant and remove HR from the whole equation.  No one has your best interests at heart but you.  Earn your paycheck, and pay for your own damned healthcare.  Depending on your station in life, you may need to have company-sponsored healthcare.

Priority and Severity

Priority and Severity are the foundational methods to categorize work items in software development. With the agreement and buy-in across the team on the accepted definitions, it is much easier to order and schedule work.

Below are the industry standards for Priority and Severity. Do not stray from these definitions. You will only end up dooming your team to failure.

Priority
An organizational ordering of the work item. It is not based on how hard the problem is or who it affects. It defines importance to the team. It typically affects when the work will be scheduled.
1 – High – Most important/valuable to the organization. We will fix this bug first.
2 – Medium – Moderately important. We’ll fix this bug eventually.
3 – Low – Least important. We’ll fix this bug when we get around to it.

There is no need for more than 3 levels of prioritization.

Severity
A technical categorization of the bug. How much of an effect does the work item have? Is it the game changing new feature that we think will make our profits soar? Is it the terrible bug that every one of our users sees every time they login? Maybe it’s just a typo on the About Us page. Severity defines the what. There are 4 levels of severity:
• Critical – This is a serious. Wake up the CIO. Some part of the system is down and it is affecting all customers. There is no known workaround. If necessary, all hands on-deck to get this done.
• Major – Some part of the system is not working properly, affecting all customers. There is an effective workaround.
• Minor – Some part of the system is not working properly, affecting some customers.
• Low – Pesky problem for some customer, but they can live with it until we fix it.

Blockers
A blocker is neither a Priority nor a Severity. Do not get caught in that trap. A blocker indicates that something is blocking something else from occurring. A bug can block other bugs from being tested. Knowing that something is a blocker can affect the bug’s priority.


Software Craftsmanship

Anyone with a compiler today can call themselves a programmer.  Some are doing it and don’t even realize that they are doing it (think Excel formulas).  But even narrowing the field down to those that make a living writing code, there is a great disparity in the quality of developers out there. Compared to  various other professional careers out there, software developers are vastly unregulated.  How can we tell (without extreme vetting and interviews) how good a developer an individual really is?

Engineer – An engineer can do the work.  She understands the basic and advanced levels of the work.  He knows the tools and knows how to do them.  In software engineering, this person does not need Google to write code.

Let’s begin with some definitions that help us understand Craftmanship:

Craftsman – A craftsman lives the life of their craft.  It is part of their being.  They know intimately the tools and materials that are available when building something from scratch. They know how to fix things the right way.  A craftsman intuitively knows when something is right.  This person learns and educates at the same time.  When I think of craftsman,  I immediately get this image in my head of some learned old dude in worn coveralls with a white beard, hunched over a tool, finely tuning that end product while dropping knowledge on some younger apprentice.  Craftsmen can just do their work without thinking, almost intuitively. Craftsmen mentor.  They educate.  They teach.

Levels – Many other professions regulate their membership.  These are the common levels of craftsmanship in organizations and professions like Masons, Doctors, Electricians, Engineers, Architects, Plumbers, HVAC, and others in which we place trust with our lives:

  • Apprentice – Has identified an interest.  Studying, learning.  An apprentice must prove proficiency via testing and practice.  Must be supervised by a Journeyman. Membership at this level is usually a period of 3 or more years or classroom and practical experience.
  • Journeyman – Can work alone at the direction of a Master.  Usually consists of 5,000+ hours of on the job training and hundreds of classroom hours.  Tested.
  • Master –  10,000+ hours of experience.  Has been a journeyman for a certain time period.  Testing.  Proven track record.

Guild – An organization of members that facilitates and oversees the entire process.  A guild regulates and certifies its members, requires regular and ongoing professional training, and recommends professionals based on those certifications. 

What does the field of software engineering have today that satisfies the Craftmanship challenge?  In short, very little:

  • Schools – let’s face it, from the 2 week programmer’s boot camp program to undergraduate and graduate school, these programs are all the same: A let down.  These organizations teach you a few skills, take your money, hand you a piece of paper, and wish you luck.  At best, these serve only a portion of the Apprenticeship requirement.
  • ACM – I was a member of this organization when I was in college.  ACM leans a little more to the hardware engineering side of IT.  It is disappointing from the software engineering viewpoint.  Their levels fall short of a mastery certification or a process of development.  Membership levels  are based simply on years of membership and member endorsements.
  • Software Craftmanship NA – Interesting conference.   But it’s only a 2 day conference. It is a good options for ongoing training learning.
  • User groups/Meetups – Great ongoing learning opportunities
  • Conferences – Also good opportunities for learning.  I especially like attending the community run conferences in my local area.

So why don’t we follow this same course in Software Engineering?  There is certification testing available:

  • National Council of Examiners for Engineering and Surveying
  • PE exam in software dscipline

A Call to Action

So where are you along your journey?  Are you an apprentice, still trying to figure out if you like the  job?   Or are you just paying the bills so you hack out some code every few days?  Do you consider yourself a Master?  If so, why?

Debug logging sucks

I’ve seen a bunch of production killers caused by debug logging.

Why does debug logging suck?  Because it’s debug, stupid:
1) It’s usually extremely verbose.
2) It opens you up for potential security violations.  Who know what that contractor put into a debug statement?
3) It’s not meant to be performant.  In other words, it’s slow.  Like sloth-slow.

The only time you should ever use debug logging is during development. Even then, debug logging just means “I was too lazy (or proud) to step through my shitty code in the debugger”. It’s logging overkill. Most of the problems I’ve seen are caused by different threads all trying to access non-threadsafe code at the same time.

Either way, logs fill up with useless crap.  That crap fills up your disk, etc.  It marginalizes the stability of your software.  So following are few quick pointers.

  1. Never let your users know it’s available. Once you do, it’s on forever.
  2. Better yet, just don’t create debug log messages.  Do one of these instead:
  • Create a no-op method for your debug messages in production.  Use a “Production” configuration tag to determine when your code is in a production environment.  Don’t log when in production mode. [Good]
  • Create a single logging class and always use it. Compile out the debug messages when building Release software. [Better]
  • Create integrated performance counters in your code that instrument key metrics like methods calls /sec and average method call execution times. Identify and instrument the key methods in your software. This way, you can track your software performance in real time, regardless of your environment. [Best]

Tenets of a Performant Development team

Our customers are very important to us.  We will do everything reasonable to make our customers happy.  If we cannot satisfy or customer, they will fire us.  If our customer is unreasonable, we will fire them.

Our software is not overly complicated;  it is easy to understand.  If the architecture takes an hour-long meeting to explain, it’s wrong.

We operate as a team.  We communicate.  Occasionally, we will argue (respectfully) because we all have different opinions.  That’s ok. We are not offended by it.  If someone on my team needs help, I readily volunteer to help.  For you manager types, read this article of stages of team development to help your team get to the Performing stage.

We commit completed, tested, demonstrable code.  What does that mean?

  • We don’t break features up into a bunches of unrelated stories.  We are committed to getting the feature done by the end of our development cycle (iteration/sprint).
  • We don’t commit half-assed ideas to the trunk in lots of little piece.   Every source control system out there has a way to save your bits and pieces off to the side (branches, forks, shelvesets, etc.) while they are not complete ideas.  Your feature should be committed to the trunk in a single piece.
  • There are automated tests around as much of it as possible (i.e. all of it).
  • We can show it to the customer and they can understand it easily.

We write software.  If our automated builds/test are broken, then we are no longer writing software, we are writing bugs.  Therefore a properly functioning, successful (green) build is a priority.  We regularly monitor our builds and fix them.  Our software is tested automatically;  we do not accept broken software.

Best Small Business Software

Are you a small business owner?  Do you like to keep costs low and productivity high?

Check these sites out.  These are all web-based applications.  No software to download.  I use them all, and highly recommend them.  (Full disclosure:   Like I saidI use them, and the links below contain my referral codes)

Freshbooks – very low cost accounting tool.  With this you can:

  • Import customers,
  • Create one-time and recurring Invoices. Can send invoices through email or snail mail (extra fee).  Customers can view invoices online.
  • Setup recurring email reminders for past invoices overdue.
  • Create one-time and recurring Expenses.
  • Accept online payments through PayPal or your Credit card processing company
  • Customers can create Support Tickets, create multiple staff logins to manage customer service, etc.
  • Customize with your own logo and text.
    Freshbooks gets my highest recommendation.  If you are not using it, then you are wasting your time.

Shoeboxed.com – Free trial – store all your recepits online.  Categorize them and you’re all set for tax season.

Outright.com – (now owned by GoDaddy and renamed GoDaddy Bookkeeping) Free bookkeeping package.  Can pull your income and expenses from Freshbooks and generate usefule P&L statements and other reports.  Upgrade monthly pricing $9.95/mon for invoicing capability.  Looks like the got rid of the EOY contractor 1099 generation (bummer).

Dropbox – Awesome place to store your files and share without having to think about it.

DreamHost – Good web site hosting, and cheap too.

Living without a cell phone

First, Let me say that I hate being stuck with the phone I buy for 2 years.  But I’m cheap, so that is what I usually do.  Then I “upgrade” to another device with the same carrier. Now European, Asian, and others continents get to buy they phone they want and use it on whatever carrier they want. Only the dumb cattle here in the U.S. put up with the antiquated style of marketing that only big U.S. companies can provide. I can’t wait for domestic carriers to catch on to this trend. Right now they make too much money off of us suckers.

Second, I really hate Apple. I love their products. But I hate the walled garden that they put around their hardware (and software).   Imagine only being able to wear that fly Tommy Hilfiger oxford inside the Sak’s where you bought it.  Stupid, right?

But I digress.  Last Christmas, I received a 3rd gen 32 GB iTouch as a gift.  I really do like the device for its capacity to store and keep updated the volumes of podcasts and plethora of bohemian music that I regularly consume.  Love it!  Plenty of nice apps, and I can use Skype.  Hmmmm….

So I dumped my Palm Treo 650 (purchased in 2005, don’t laugh) with its pathetically slow data speed, and “upgraded” to the Novatel Mifi 2200 device .  It’s the same as the Verizon branded one.  The device is sleek and did the job very well.

Novatel Wireless MiFi 2200

Novatel Wireless MiFi 2200

Not bad.  I can surf the web while I’m driving along in my car.  AND… since I got Skype on the iPod,  I have a phone, too! Well this was working out pretty good for me, but I got greedy.  First, there were a couple of dead spots driving around town, and occasionally Skype would just die on me.  Secondly, I had to pay extra for any exorbitant amount of data I was using (2 GB) limit.

So I “upgraded” to Sprint’s Overdrive 3G/4G Mobile Hotspot device instead.

Sprint Overdrive 3G/4G Mobile Hotspot by Sierra Wireless

Overdrive 3G/4G Mobile Hotspot

Nice!  So I get 4G speed if I can, and I can download the whole internet over 4G and not have to pay for it.  But alas, the Sierra device spends more time switching from 4G to 3G and then looking again for 4G that it’s almost worthless unless you’re standing still.

I’ve had a some other problems with this device, too.  If the device is plugged in, it just wants to charge.  No connecting to the web, just charge. Also, if the device is too hot, it won’t charge.  And occasionally, it just won’t shut down.  I spend quite a bit of time popping the battery out just to turn it off.

Both devices get red hot if you’re moving a lot of data, so you don’t want to go sticking these things in your breast pocket.   But if you’ve got a place to sit down and get comfortable, I highly recommend either one of them.

What’s that fishy smell? It’s electrical

For the last few days, it’s been life at the Marable household as usual, except we’ve had a few extra guest in the attic. So I set the usual trap and hoped for the best. We were surprised by the occasional fishy smells that were drifting down from the attic, but figured the smelly little beasts had done something unmentionable.
But there seemed to be a pattern. Every time someone took a shower in our master bedroom, the foulest fishy odor would greet you as you exited the bathroom into our bedroom. Gentlemen, this does not make for a good stories in any way.

Naturally, we googled about the smell, and it turns out that the odor is often related to electrical connections and appliances burning too hot, usually due to faulty wiring or wires having worked their way loose over time. After a very brief investigation, we found that the elecrtical outlet on the wall inside our bedroom as you enter the bathroom was hot (not warm, but hot) to the touch. Bam! As you can see from the picture inset, the outlet was toast. Literally. It crumbled apart when it was removed.
As it turns out, taking a shower just exacerbated the faulty electrical switch because the bathroom wiring was routed through that outlet. So the fish smell was greatest after having been in the bathroom with all of the lighting on for 15-20 minutes.
While I’m not certain why this happened, I have a theory. That outlet was essentially used as a junction box for all the wiring of the bedroom and bathroom. As such, the electricians should have used a heavy duty outlet. What you can see above, they used a normal use outlet. Which worked fine for several years. But with a TV/DVR combination plugged into it and running a hair dryer, curling iron, and 12 40 watt bulbs in the bathroom next door, it couldn’t stand up to the pressure over time.
Either way, the outlet’s been replaced. This post serves as a reminder to me, and a warning to you. Do NOT ignore that fishy smell. It could be the warning that saves your life.

Deploying My 1st ASP.Net MVC site

So I’ve been kicking around the idea of re-doing my consulting business web site for a while now.  My last design sucked.  I was quite embarrassed to send anyone to the site.  I finally got the motivated after having attended atlantacodecamp and then hearing about ASP.Net MVC 1.0 finally being released this week.

Luckily, I’d already started a prototype from an earlier beta release.  I’ll blog more about writing the code later.  I’d been tinkering with lightweight Business Objects. cool mock unit tests, and SubSonic data layers to keep my mind off of doing any real work.  But the real problem was that I had a lousy looking site.  All my designer buddies were pretty busy (why is it that everybody wants a new site design in the Spring?), but I finally managed to find a nice clean CSS layout for free on the web.  With that in hand, I was fresh out of excuses.  My site was ready.  Not functionally, but at least it looks better.

ASP.Net MVC 1.0 needs the Microsoft .Net Framework 3.5 SP1 installed.  This sucked for me, because my web server was already low on space.  The service pack is a 220Mb download that requires at least 300 Mb free before even thinking about installing on your system drive.  I think I had maybe 100 Meg free.  But I was desperate.  So it was time to try something crazy.

So I just uninstalled .Net entirely.  Backwards.  Control Panel, Add/Remove Programs.  First, remove 3.5. Then 2.0. And then 1.1. Next, I installed 3.5 SP1.  Voila!  Since 3.5 SP1 is cumulative, it reinstalls everything again!  Finally, install MVC.

Next, I deployed my site.  Nothing to it.  Build.  Copy.

So you’d love to hear that I deployed my site and everything worked fine.  No such luck.  IIS 6 has a little problem with MVC’s routing engine. This is solved quite easily by just clicking the Configuration button of your site in IIS Manager (on the Home Directory tab). On the Mappings tab, add a wildcard application map using C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll.  Make sure you uncheck the option to verify that file exists.  Now if this were a big production server, I’d have a problem with this step.  You can read more elsewhere about it.  But my site is not a huge production site.  So I’ll let it slide for now.

Check it out  www.pm-consult.com.  Now if I could just find a writer to put some content out there.