Technical Debt for Clients

If you’ve ever built a big software project you’re totally familiar with the idea of technical debt, but it’s unlikely that your clients are familiar with it. So lets figure out what it is, and what we can do about it.

What is Technical debt

Technical debt can also be caused by building a feature under a specific assumption, then later in the project we add new features that change the assumption. With our assumptions changed, we now have to work around that original code. We know the whole time that we can rewrite the original code, under our new working model and we will have code that’s easier to work with.

Time is also a factor in technical debt. Decide you just have to have a feature ‘by tomorrow’ then it’s more likely someone is going to have to take a shortcut to hit that deadline. Sometimes if you want a feature it’s better to move the time requirement so that it’s right the first time.

Undoubtedly, as suggested by this article in 24 Ways, a lot of technical debt can be dealt with by better planning from the outset. Building under the model of Test Driven Development can also head off technical debt. Neither of these things mean that a project will have no technical debt, just that it’s managed better.

Dealing with Technical Debt

So how do we deal with technical debt? Well every 3 or 4 development cycles, we stop and evaluate the code based on our current working model. Then we refactor the code to suit the new model.

Yup that’s it. All we need is some time to deal with it. Maybe even an outside set of eyes to look at the code. Developers become blind to their issues, just like writers become blind to spelling mistakes and errors in their manuscripts.

The Client Problem

The issue is that it’s hard to convince clients to spend $$$$ to have us rebuild something that, at least from their eyes, works perfectly fine. Then we tell them at the end of the refactoring, it’s all still going to look the same to them. They often see no immediate return on investment for refactoring.

I’ve Left Projects

It will come as no surprise to the experienced developer to hear me say that I’ve left perfectly good clients because of technical debt. At some point the debt load becomes so high that the project isn’t fun to work on anymore.

The project has become an exercise in building ‘hacks’ to make the old models work still.

So Mr and Mrs Client, part of this is on you. When developers ask for time to refactor code, you need to give it to them. If you don’t you can be sure that they’re going to be less and lest interested in the project. At some point they’re going to leave and the next developer you hire is going to see a mess of code and declare it unworkable.

Your original developer knew it was becoming unworkable, that’s why they left.

Developing Like a 2 Year Old

If you didn’t know already, I’ve got a 2 year old daughter. A 2 year old is 5 parts wonderful, and 5 parts a pain in the ass. For all the naughty things they do to push the limits, they do things that are absolutely awesome.

One of the main objectives of my daughter lately has been to do things herself. She feels she can get dressed, do puzzles, put on her coat, and a myriad of other things all by herself with no help from Daddy or Mommy.

It’s Done, but…

When it comes to getting dressed, she actually does pretty good. She get’s the shirt over her head, and arms in the holes. Pants go on and legs are in the holes. Socks get on with just a little effort.

The problem is that some or all of it is backwards. We’ve accomplished the goal of keeping her warm as well as the goal of making sure she’s not naked when others come, but it’s not quite right.

Not only is it just a bit off, it takes a long long time. See I can tell her it’s backwards or on the wrong way, but actually touch NO WAY. On top of that every so often the frustration of someone saying it’s the wrong way is overwhelming, and a total melt down ensues.

The Starting Programmer

As I’ve watched her then gone about my daily work (building sites with WordPress) I’m reminded of when I started development.

As with many beginning developers, I was not charging much and I just didn’t know what I didn’t know. I didn’t even have a framework to ask a question with sometimes.

During this time, things got done but when I’ve been back in the code, it’s just a bit off (and that may be gracious). Back then I had a few issues:

  1. I couldn’t afford to pay someone else to help me
  2. I thought I was so smart and didn’t need any help anyway

So things got done, but there were also tantrums. There were times I was on a deadline and still had no solution, and didn’t know what to even ask so I could solve the issue. I was near tears more than once and stressed to no end. But I never even thought about hiring out the work. No I couldn’t have paid for it anyway, but it never crossed my mind to get some help.

I could do it myself.

I was a 2 year old developer.

Grown Up Developer, Well I Hope So

Part of growing up as a developer was knowing the things I could not tackle on a project. Recently I had to do some stuff with the WordPress rewrite rules. It started as a basic thing, and then got pretty complex.

Now learning is part of development. If I just stopped every time I wasn’t quite sure how to do something, I would never be the developer I am today. There is a point when it’s past learning and your approaching the point where you no longer have a framework to even ask a question. I also firmly believe that if you look at 1 year old code and don’t cringe just a bit, you’re not learning much.

After an afternoon trying to accomplish the more complex task I decided that my time was worth more than mindless hacking away. I mean there was no progress and I still didn’t have a clear framework to even start to solve the problem.

Instead of just hacking around till I was in tears at the wasted time, I hired the work out to @bradyvercher to do the job. Well 2 days later the work was done right, the first time. I was happy and my client was happy.

The grown up thing was to get help, so I did.

Grow Up Yourself

So when your stuck don’t just hack around till you’re fed up and about to crack. Find someone you can trust to help. This is a solid endorsement for @bradyvercher if you need some complex rewrite stuff, he did right by me.

Now when I look at a complex feature, I simply decide if I can make more money learning/building it or doing something else. If I have other work to do and know someone that I can get to do the work for me, I contract it out.

See it’s about knowing what you don’t know. Then find someone that does know it, and let them do it. Not only will your life be much less stressful, but you’re going to make great contacts that will pass along work in the same way.

Writing Good Content, When you have a Passion for it

While the article in question is not primarily about writing good content, it’s got a few gems for those trying to create it. The most pertinent for me was:

Every time you publish an article on your website, ask yourself: “Would anyone share this article for any reason?” If the answer is “no” then you should not publish the article.

Now there are a few recommendations that I don’t love, mainly because I find them tiring on sites I read so don’t want to be pushing them on my regular readers.

It’s not about what you know, it’s about what you know that’s also profitable. Starting a website about free poetry will probably never make you any money, even if you rank number one for most of the related keywords. (Emphasis mine)

If the main goal of the site is strictly to make money then I suppose you can’t go wrong with the above suggestion but I’ve got to wonder if you’re going to get burnt out writing for something ‘profitable’ where you have some knowledge but have little real passion for.

I could write about building vinyl decks, plumbing, electrical work, forming and framing houses since I’ve done all of those jobs at one point or another in my 32 years on earth. The reality is that I don’t have any particular passion to write about them. I do enjoy good honest physical labour and I love helping friends out on their renovations, but writing guides on how to perform home maintenance would bore me. I could see that a site about home renovations would even make money, but I’d never be dedicated enough to actually make it happen. No point in me working on it then.

I suppose that this also comes down to knowing yourself. Some people could write consistently about a topic they have little passion for, simply because they would make money at it, I’m not one of those people. I know I would never follow through on it, along with many other styles of business I tried and realized I loathe. No matter how much money a friend makes selling MonaVie I’d fail because I simply hate the work involved doing it.

So write good content, make sure that it’s something someone would share, and know what ventures are actually suitable for you.

Your Cashflow – Not my Problem

During my years running my own web business I’ve both taken work on a sub-contract, and sub-contracted out work when I need help. While it can be a great thing, it can also be a big pain in the ass.

I’m not talking about the managing of other people, that’s just par for hiring or being hired. If you’re sub-contracting it introduces a layer between you and the client. It’s more likely that communication lines will be crossed. Same goes if you’re hiring someone to do a portion of a project. You know the requirements and either don’t communicate them properly or their not understood. The big issue for me is getting paid when I’m sub-contracting from someone else.

The things I’ve found quite common is that the freelancer wants to pay me after they have been paid by their client. This allows them to stop managing their cashflow, they try to take a loan on you. I don’t let that fly, if you want me to wait for the client then I’m invoicing them directly, on my terms. You’re taking a loan off me and you want it to be interest free. I’m not your bank, so I’m not in the loan business and I’m certainly not letting you hang on to my money interest free.

As far as I’m concerned it’s your job to have the cashflow to support your business. I know when I sub-contract to others I pay them right away, no questions asked. My cashflow is not their problem. They do not wait for my client to pay me, I’m their client. I pay them swiftly with no issues once the agreed upon deliverable is delivered.

So if you’re thinking about sub-contracting work, make sure you have the cash around to afford it. If you’re starting out, don’t agree to wait to get paid. Make sure they sign you’re contract and agree to pay you on the terms you feel comfortable with.

photo credit: pasukaru76 cc

What Does a Meeting Cost

I hate meetings. Well that may not be quite accurate, I hate meetings that waste my time and about 90% of meetings in the corporate world are a waste of time. At one place I worked I forced the boss to take something off my TODO list for every meeting I was supposed to attend, 99% of the time the meeting was off my list. Yes the meetings were so useless that I almost never had to attend them.

An even better way to keep meeting in check may be this meeting ticker. Add the number of people and the average hourly rate (don’t forget to include the cost of lights in the room) then click start. Watch managements eyes bulge as the first 30 seconds of the meeting cost $20. I bet they figure out how to have less meetings and make them more productive when you have to have them.

Again, Take a Break or Burnout

Certainly not the first time I’ve mentioned the need to take a break and risking burnout but here is another note.

I once knew a pro triathlete who I came to coach who decided to skip recovery weeks and press on regardless of how tired he was. He was never the same again. Overtraining took a big bite out of his performance and he never fully recovered from it. Two years later he retired, prematurely, from the sport.

Professional athletes track so many stats on their health so that they know when they need a break. I’m a professional programmer but I don’t track stats really on my mental health to see if I need a break from work.

I wonder how many programmers designers…leave the field early because they ‘overtrained’ and didn’t take the breaks they needed to have a healthy long term career. I’d bet there are more of those than athletes that burned out.

The quote comes from Joe Friel, probably the voice on training for Triathlon or Cycling.

Living Life Outside of What is Considered Normal

While I typically think profanity shows a lack of vocabulary this is a nice article about forgetting what society thinks you should be doing and just doing what works for you.

What if you dropped out of school and walked across the country? What if you decided grades were sort of silly, and instead read all the interesting things you could find?

I used to be really nomadic. Couch surfing for 6 months on $1000 was no problem. Heading off in to Algonquin Park for weeks with little plan outside of enjoying creation, totally normal. My wife (then girlfriend) remembers having lunch with me then stopping by my cabin (yes I was living in a cabin with no power) around dinner to find me gone. It was 3 weeks till she heard from me.

Even now I feel that we live a life contrary to what ‘normal’ society thinks is proper. We have one car, I rarely drive. We watch little television, never been a party house. We want to be comfortable but the wife and I try to work just enough so that the bills are paid and the rest of the time we spend doing what we love (this means pretty short work weeks compared to the norm). There is no rush to get ahead, the life I’m living now is what is important.

Part of me really misses just getting out and not having any real commitments but a bigger part of me loves to hear my daughter laugh. Some days I may wish that I could still take off, but then the kid’s laugh reminds me that I made the right decision.