Don't (only) focus on the code

Every developer aspires to create great things, but often the most important issue is not just the quality of your code, but many other and obscure things that are setting you back from achieving your and your company’s goals.

You should write good, well tested code, which doesn’t have to be perfect, but merely good enough. I know that some of the purists will get mad but that is often the case. As the saying goes, Perfect is the enemy of good enough. I won’t go into the quality of the code anymore, because I believe you, as most of the programmers do, write good enough code. What you should focus on is something completely different.

There are three things that you can do while working for a company or consulting for a client:

  • Create value
  • Reduce expenses
  • Both of the above

Ultimately I want you to always think of the ROI (Return On Investment), for either your employer, your client, or yourself in the end. If you steer away from that focal point, and start procrastinating on delivering the product, because the code, design, or copy is not perfect, you will never ship it. Also, if you are not embarrassed by your first release, you have shipped too late.

Now, think long and hard, what situations call for further improving the quality of your code to stick them in the three categories mentioned above? Testing and refactoring bad code will improve future maintainability, which reduces expenses in the long run. Optimising for performance and making the application faster can bring you more clients and earn more money. Optimising workflows will cut the time needed for the end-user to finish a unit of work faster, which reduces expenses per unit of work, allowing them to do more in the same amount of time, or to work less.

Automation is a nice thing to have, but unnecessary in the beginning. If the product that you are creating succeeds, and you start spending a lot of time on processes that should be automated, please automate them, and delegate the execution to someone else. But don’t do it before it really starts to hurt, because you are wasting your (and the company’s) precious time.

Understanding how and why the software does what it does should be the main thing for you to learn about. I agree that you can be some level III programmer in an enterprise behemoth, really detached from the process, being fed with your daily or weekly tasks through some project planning tool and not really knowing how the sausage is made. Maybe you are one of the Dark Matter Programmers, and aren’t really ambitious to move up, and that is also OK. I know people that are in the same situation as you are, happy with the work they are doing. Although I consider this approach highly insecure and uncertain for the long run, it is practical for the present, for them.

If you are focusing on the process, and eliminating the obstacles to reach one of the three points mentioned above (create value, cut expenses, both of them), then your software will be better in the long run. In that process you stop being just a programmer that is easily replaceable, and start being a true business consultant, with a unique set of skills.

As an example, there is a process that each end user has to do to make one widget. It includes going through 10 different screens, and entering a dozen parameters on each screen to produce the widget. Creating any type of widget generally takes 10 minutes Although the company makes different types of widgets, let’s say that one widget accounts for 80% of the sales, and all others for only 20%. Optimising the code in this situation does nothing, because the code has to produce a variety of widgets, and unless it’s really messed up, you should leave it alone.

Optimising the process on the other hand is something completely different. Especially if we have a situation like I mentioned above. I really love the Pareto principle, and try to use it all the time, applying it to any situation will allow you to focus on the stuff that really maters and ignore/drop the stuff that doesn’t.

How do we apply it to the above example? Let’s call the widget that accounts for 80% of the sales The Golden Goose. All widgets have around 100 properties you can set while creating them, but 95 of them are the same for each Golden Goose. So why bother entering and checking each one for a process that happens 80% of the time. Optimising the process from 10 screens and 100 parameters that takes at least 10 minutes and allows for a lot of human error, to one screen and 5 parameters, which reduces the widget preparation time to only one minute will drastically increase the user productivity, allow them to push out more widgets in the same time.

By focusing on the business and not only on the task at hand, you will stand out among your peers. There is no difference whether you are an employee, a freelancer or a consultant, your customers will generally have more respect for someone who looks at the bigger picture, and speaks their language. You can do yourself a big favour and read a couple of business books. It is a very big chance that you work for one, so why not invest a couple of hours in understanding how businesses work. It is a very small chance that those hours are spent in vain. If you don’t know there to start, The Personal MBA by Josh Kaufman is really great, and I can’t recommend it more.

You are not just a (Insert language here) programmer

This is probably be one of those rant posts, so beware. I was listening to one
of the podcasts I try to regularly listen, and heard a good description of a
web developer. I like to call myself many names, and one of them is my
linkedin title Junior Shark Trainer, one of them is web developer, which
could be more precise (or broad) title than ruby on rails programmer.

If you do web development, or desktop application development (do those people
still exist, hello? :)), you are required to know a couple more things than
just wielding your programming language like a light saber, and slashing your
enemies with it. Here is an example, in the past 4 months, excluding the
text editors I work with, and explored, on the tasks involving web
development
I used:

  • bash (to write server creation and management scripts and various other
    little things)
  • sed (google it, it will blow your mind)
  • ruby (duh!)
  • javascript (and coffeescript)
  • html (plus erb, haml, handlebars)
  • css (sass, scss)
  • sql (yes it still exists, even if you are working with rails)
  • regular expressions https://xkcd.com/208/
  • centos linux distribution

And probably a lot of other things that I can’t even remember but went into
web development process. OK, if your job title is Systems Programmer II
then you are probably only expected to know how to fire up your editor, and
crunch out code. I’m happy I never had to work at a company where someone else
had to set up my development environment for me each time I got a new
computer. I made a reference to being able to craft your own light saber in a
post called Importance of installing your own development machine
from more than two years ago, and I still hold that reference true. If you
consider yourself a developer, you should be able to set up the thing you are
going to develop. I’m not talking about knowing everything about anything. As
you don’t have to know how to set up reverse proxy and make your
infrastructure able to scale vertically and horizontally, on the click of a
button. But if you, let’s say, want to bootstrap your startup, all of those things can be
of use, before you can delegate them to employees.

Not my job syndrome also comes to mind, and I’ve had it before. Nowadays I
look at it differently. It’s not my job to design and improve existing UX
interfaces, but I’ve gotten interested in doing it at the moment. Or writing
copy, marketing, trying to increase conversion, or basic design, none of it
was my job a year ago. If I think about it, even web development was not my
job seven years ago. I was a back-end database (oracle) programmer, the SQL
skills are really useful even to this day.

So, embrace every learning opportunity, learn something from it, and do try
everything. Even the ugly marketing/business/sales side of things, which is
the hell on earth for an average developer, but if you are a freelancer, I
won’t break this to you gently. YOU ARE ALREADY RUNNING A BUSINESS, a
business of one that is, but still a business.

I might change my title to Thought Leader in training, whatever that might
be. I just hope I’ll never get to be Programmer Level III anywhere. Who would say,
it’s not that big of a rant after all.

How tracking time can make YOU more money without any additional efforts?

Are you one of the many people who don’t track all of their working time? Or maybe you just forget to do it all the time? Are you aware how much money are you flushing down the drain with that? I was the same, and maybe sometimes relapse into endless procrastinating, while doing “busy work”.

What if I told you if by tracking all of your time (spent working), you could earn more each month. I am not talking exclusively about earning money, because different people have different priorities. Some people value more time with their families, some will value their new Audi more, to each their own.

If you are still reading, you probably have felt the issues of not tracking time, part from the billable client work, if you bill by the hour. On the other hand, if you bill weekly, monthly, or have fixed bid projects, you don’t have the incentive to track your time. I’ll give you one right here and now: Do you want to be aware how much is your effective hourly rate? Here is one more: What if you optimised the way you spend your time working, and it enabled you to earn more, or have more free time?

Tracking all the time spent on all tasks can be daunting, and sometimes really hard to do. Luckily there are lots of tools out there, online and offline, that will ease your pain. I use Freckle as my primary time tracking app, but I am experimenting with Pomodoro technique when programming, as it helps me focus, in addition to regular time tracking.

Let’s run a little experiment, find a free time tracking tool, Freckle does offer a free 30 day trial, but something like Toggl is 100% free if you don’t want to use pro features, which we don’t need at the moment, and both of them have smart little apps to help track your time on your desktop (at least in OS X).

Start tracking all the things you do while “working”. This is crucial at the moment, and you can drop some of the tracking later on, but you REALLY NEED this data to optimise your work. After a week or maybe even a month, you will have some basic data to see how are you using your time. If you are anything like me, you will realise that you are maybe hopping between tasks, spending too much time on browsing (Reddit anyone?), or just doing a lot of different tasks (projects) in the same time slots.

After you have some hard data, you can start optimising for productivity. And there are some ground rules I have found that work for me:

  • Bundle all same/similar tasks together
  • Work only on one thing at a time
  • Try to get up between switching contexts

Let’s go over each one just to explain how do I do it.

Bundle all similar tasks together
This is fairly self-explanatory. Try doing email twice or four times a day, and ignore it for the rest of the time. Email is a real-time waster, and if you can optimise it, you can most probably get yourself at least 2 or more free hours a week. If you are paying the bills, pay them all at once. Don’t do things as they come in, but put them in their separate box, and process them when you have enough to take you at least 30 minutes of uninterrupted work.

Work only on one thing at a time
Again, this means what it means, I have too often gotten myself into a situation when I’m working on something and another client pings me to ask about something, and I immediately switch context to the other project, leaving unfinished work in the first one. This is also true with everything you do, every interruption has its toll, so try to minimise those you can control, like email and instant messaging.

Try to get up between switching contexts
What this basically means is: if you are working on Task A, and are done with it, don’t immediately jump onto Task B, but get up and stretch/walk for at least 5 minutes. The physical motion of getting away from the computer helps me disconnect from the first task, and sit back at the computer with a clearer mind.

Getting through the famine period

If you are a full time freelancer, you have, or surely will encounter a famine period, because only thing sure in freelancing is uncertainty. Of course, with great marketing and engagement, that uncertainty can be reduced to a minimum level, but it still exists. Let’s say you encounter a famine period. That can happen for a variety of reasons, you being fired by a client, you firing a client(you can and should do that when you feel the need), client not having any more work/money to keep you on, or the worst one of all, health/family issues taking most of your time.

Whatever happens, you should always have a certain amount that goes from your earnings to a savings account. I handle that by working through an equivalent of a LLC company in the US, and pay myself a monthly paycheck. That way, enough money stays on the company’s account as a certain part of savings, and you should make sure you have at least 3 paycheck’s worth in the account, before you go and buy that new and shiny Apple product you just have to have right now. Of course, be sure to leave enough for taxes, especially if your government does not require you top prepay them for the following year.

After we have the company account, and enough money that goes into savings/taxes, you should consider your personal savings too. On that side, try to reduce your spending until you get to at least full 3 monthly burn rates of savings. If you don’t know how to achieve this, there is a great book on the subject Rich Dad, Poor Dad written by Robert Kiyosaki. It should teach you enough to get started.

When famine happens, and it surely will, the savings backbone and mentality described will help you get through the bad period much easier, and let you continue living your dream job, instead of defaulting to full time employment every time you have a bad financial week or month. The first thing you should do is take a retrospect and analyze what had happened. If the client had fired you, was it your fault, or theirs? Did you communicate all issues with the client, Maybe there was some scope creep, or you just bit more than you can chew. If you have fired the client, why did you do that, what trait of the client you found so annoying that you just couldn’t wok with them? Can you try to spot and avoid that type of client in the future? If the client ran out of work for you, can you offer them more? Or reformulate your offering to maybe suite that type of client better? If the client ran out of money, why did that happen? Was it something your work has caused, could you somehow guided the client to better decisions, and maybe profitability?

After you have summarized everything, it is time to fire up your sales funnel. If you don’t have one, go to a user group, and as if someone has extra work you could take over, if you engage with your local group on a regular basis, they will get to know you, and throw work your way, even when you don’t need it. Contact your previous clients, ask them if they may have some work for you, or know someone who has. Referrals is one of the best ways to get good clients, and be able to provide them with great value.

In the meantime, take a vacation, you have earned it. Being a freelancer, I sometimes dread for vacation time, but always wanting to do/learn more keeps me from resting completely. I know that I should try a screen free day, as soon as possible.

Go learn something new. If you are a Ruby on Rails developer, go and learn a frontend javascript framework, Ember or Angular are good enough. Learn another language, maybe a functional one, Elixir seems to gain popularity, Clojure already is fairly popular within the developer community. Invest time in yourself, you have all those savings to keep your mind at ease. You could even learn a real(non-programming) language, that will make your synapses fire differently, and knowing a foreign language never did any harm to no one. Start writing a blog, just for yourself if you have no audience. It will help you channel everything you know, learn it better, and maybe gain you some tracking in the community.

The famine period will make you desperate to find work, that is something we people feel and can’t really get away from it, but hopefully you will be able to rely on your savings, until you find a client that fits you just right. And if you can’t find a client in 4-5 months, then go and look for a full time job, maybe using some of the hot new skills you have learned.

Running a freelance business

So, you have decided to start freelancing? I am really happy for you! It is a
great choice, one of the best work related decisions I’ve made in my life. You
maybe have some clients, maybe you just got laid off, and want to try this
cool and fun freelancing life everyone seems to talk about. There surely isn’t
much about it, you have a client, you work for some amount of time for that
client, and get paid for the work. And you will be doing only the things you
love, none of that crap on that ancient architecture your last boss was making
you do. And you will work for whoever you want, because you are the boss
now
.

Yes, you have read that well, you are the boss now, and the CEO, and the
CFO, and every other department that existed in the regular job you used to
work. You also get to be the cleaner, and the system administrator.

How will you ever learn all of that, or even know everything there is to be
done? The easiest way is to find someone in the same business you want to get
into and ask them. Most people will gladly help, because they don’t mind
helping out someone in need. Some of them, well, won’t help you, maybe even
undermine you or your work, but, c’est la vie, some people are just assholes
and you have to get over it. The sooner you grow a thicker skin, the better
for you. So when you find out everything there is, and that depends from
country to country so I won’t get into details about what needs to be done
here, you have to figure out how to do it. Let’s get to that now.

You can, and should outsource a lot of that work, let the people better than
you do their jobs and pay them for your own piece of mind. Accounting, legal,
even assistant work can be outsourced to other people, freelancers or
companies. They are professionals, like you are in your field, and should be
on the edge of their domain, so you don’t have to. For example, I know very
little about the process of accounting, I could if I wanted to, as could
almost every one of us, but we don’t, because we have other stuff to think
about, learn about, and to run our now business. Or law, which I know nothing
about, but I’m sure a lawyer knows everything, or can refer me to the one that
does.

So, when you have outsourced everything that someone else can do instead of
you, there is still some work for you to do. Finding clients, marketing,
scheduling, IT work, being the CEO and the secretary at once, and taking care
of yourself, as you are now your company’s best asset. I’ll get to those in my
next couple of posts, because I don’t want you to fall asleep reading.

Working Remote

You are surely tired of your commute, every day, waking up way before it’s convenient for you, cramming in public traffic, with people around you, wasting your precious time day after day. I had a 10 minute walk to the last place I worked at before going freelance, and it was nice, the commute before that was 45 minutes each way. But even that, being tied to one place, for 8 hours each day, at a fixed time is nauseating. There is a solution: Remote Working.

As you are aware, many companies today offer the option for you to work remotely full-time. As a freelance consultant, this is probably the most common way to work. Now, by saying remote, I don’t mean only and always working from your home, but working from a place that is not your main office, that can be a lot of places. Some people prefer coffee shops, some like me, really love to work from home, some go to a co-working space, whatever floats your boat.

So here are some benefits that you will see immediately or after some time, and pitfalls that you can meet in your remote working life if you don’t take care of yourself.

Benefits

  • Less time commuting == More time spent with your family
  • No commuting expenses
  • Ability to choose the best time of day when you are most productive
  • Less stress and interruptions
  • Less meetings
  • Your written communication levels rise to the roof
  • You learn how to work better

Pitfalls

  • Not being able to separate work from private life
  • Isolation from other people can affect your mental health in a bad way
  • Letting yourself go physically

Jason and David are far better writers than me, so if you
want to really learn about remote work, and everything it carries with, go and read great book on this subject Remote: Office Not Required by the guys from Basecamp.

Why would you want to become a freelancer?

So what are your top reasons you want to become a freelancer? Feel free to
leave them in the comments section below. I will briefly give you my reasons
for doing it over the next couple of posts.

Be your own boss

The main reason everyone quotes is being fed up with the management at their
current place of work. That may be due to a lot of reasons. For example: Stuck
on boring projects; Can’t work from home sometimes; Don’t have a flexible schedule;
You can’t implement the new and hip technology you read about last week, because
you are stuck doing a VB6 project; And this list goes on and on…

The good parts

Being your own boss can improve that situation a lot, you get to choose the
projects to work on, the clients to work with and the technologies to
implement those projects to some extent. You get to choose when you work, and
where you work from.

The bad parts(not really)

You are your own boss, you are the one to set the working schedule, organize yourself, and
be proactive with work. There is no Boss telling you what you are going to
work on next. Also you will find that you have to work on some other
issues, as you have to run a company right now, a one man company of yourself,
you are your own boss right now, and manager, HR, and marketing. Each client is a kind of
a boss, as you are responsible to them for the work you are contracted to do.

The cure

Hire an accountant, and outsource as much stuff as you can. Time you spend on
learning your skill, they spend on learning their skills. Don’t do everything
by yourself, and remember, always be polite.

Flexible working hours/location

This is also a classic. All the freelancers out there seem to work whenever
they want, wherever they want.

The good parts

You work whenever/wherever you want, you can travel around the country, or
even abroad, and your work won’t suffer, your clients may not even notice that
you are 5000 km away from the place they think you are. But it really doesn’t
matter. Work happens where it happens for you, and it’s in your and your
clients’ best interest to be as productive as you can for them, and for
yourself, of course.

The bad parts

You can work the whole day, there is always something to be done. First you
forget lunch, then you forget your kids big game or play at school, as you
have so much work to do. If you don’t plan your time you will loose your
health/family and everything.

The cure

Make a schedule and stick to it. Being constrained to work 5 or 6 hours each day
makes you the most productive machine there is, because you haven’t got more
time, just those 6 hours each day, so about 30 hours a week.

This is it for this post, I will continue writing on this subject and the
tools to help you while freelancing or being a remote worker.