Unused tools (and skills) get rusty and fall apart

I was having an interesting twitter conversation a few days ago. The tweet that started it all claims that most male programmers don’t have beautiful, or even readable handwritings. And in my experience this is true. But I think there is a reason that runs deeper than a given social group having bad handwriting. I also haven’t met a physician that has a readable handwriting either.

In the case of physicians, if you have maybe read Thank You For Arguing, you will realise that it is their code grooming in effect, or their insider language, used to effectively differentiate themselves from others.

Although some programmers can be vain, I don’t think code grooming is the case here, because there is a deeper problem emerging that we were probably the first ones to experience. Handwriting has become obsolete, marked for removal in the next major version, we are following semantic versioning, right? But without joking, If I just take a look at myself, I
almost stopped writing by hand more than 10 years ago. Apart from the few months when I went to finish my bachelor’s degree, I haven’t used it since. I do write some things down on paper, and lately I’ve been using paper and pencil more and more, to sketch, and write down meeting notes. But that doesn’t solve the problem, the real problem. I have a (tough learned) skill, that I’m not using, not on a daily basis, but sometimes a whole month or more could go
by, without me picking up the pen and writing something down. And without use, that, in the past really valuable skill, is fading away. You will never completely forget the skill, but your confidence to use it will fade away with the idle time.

One more skill that I can think about is using a language. I have learned two foreign languages during my education (not counting Latin). And because of weird stream of events, my knowledge of German was better for the 4 years I learned it in elementary school. We had a really great teacher, and she made us talk in German, at least those 2 hours in school each week. Our English teacher, let’s just say she wasn’t as good. Everything changed in high school,
and the tables have turned. The situation with teachers wasn’t really bright way back then, so we got an unqualified German teacher, and over those four years, I’ve lost most of the knowledge. Not using it 14 years after I finished high school, I can still understand most of it, but can’t communicate to save my life. Our English teacher on the other hand, was a posh old lady, who knew how to teach. And I’ll be thankful to her for the rest of my life, because not
only did she try (and succeed) teaching us English, but she also tried (and somewhat succeeded) teaching us good manners, which is also a skill hardly gained, and easily lost. My father picked up a Russian hitchhiker this summer, while he was doing some work. And as he has learned Russian in school (we were behind the iron curtain then), he knew at least the basics. Not much, but could understand the guy, and luckily our languages are similar enough, so the Russian guy could understand him back in his pigeon Russian. I asked him how he felt speaking Russian for the first time in almost 40 years, and the answer was, I was afraid I would say something wrong, and offend the man, while I tried to help him.

It’s the same fear that I have when filling out some forms, and have to write anything down by hand. I delegated most of it till now, just because my vanity doesn’t allow me to show that I’m becoming more illiterate with each passing day. That is the reason I added learning Calligraphy to my bucket list. I just can’t allow that skill to fade away so easily. Also, as irony in life dictates, I’m in the great position to relearn German, and to even use it daily, so I’m going to grab that opportunity too. As you can never know too much, except for this guy here, you should commit to lifelong learning. And try to use all of your skills, as much as you can, you never know when you will pick up someone needing a ride, but he only speaks the language you learned in school 40 years ago.

Also, go and read Merlin’s Blog, you might find interesting and useful things there.

Why I quit my full time job to seek fame and fortune in consulting

There are probably many reasons people will say caused them to quit their job, but if you try to differentiate between all of them, you will probably find one of two underlying issues behind each reason. Those are the same issues that people fire they clients for, and if you experience them as a freelancer, you should do that too. People generally quit for two reasons, they have received a substantially better offer, or they are deeply dissatisfied with the situation they are in.

The first one is self explainable, let’s say that someone in the ranks of BasecampGitHub, or even Google offers you a job. And even better, a remote job, which would be the likely case in the former two mentioned companies. How long would you think about it? If you are not a premium rate consultant, I guess not too long. And that is understandable, as we all seek either something like that, or working on some private projects on the side. But if a great offer comes your way, grab it if you want, or you will surely regret it later on. A few people can boast about
having Company X on their resume.

The second reason runs a bit deeper, it’s dissatisfaction with the working environment, lack of understanding, and a hostile climate between coworkers. That thing will drain everyone, and it does not only drain your will to live, but it also kills your creativity. If you think that environment is a good thing, do yourself a favor and read my post from last year: Build your career (You can do better), and think hard if it applies to you. I’m not saying that everyone should leave the awful job they have now, but just try and imagine yourself surrounded with people smarter than you, discussing great ideas, and creating magic. It sure beats backstabbing coworkers.

There is also one more reason, one of the economic nature. Where you really love the environment you work in, but your compensation simply is not enough for you in your given situation. Maybe you have had a baby, your expenses have gone up, and your current employer can’t afford to pay them. This is probably the hardest of them all, the one that will make you not just leave the employer, but even your country, and maybe the continent, because if you must find something better, you just don’t care where it is.

I’ve rambled through the post, without really giving my reasons. I think now, after a year and a half, I have a cool enough head to answer those questions for myself, and for others. I have been asked that same question just today, by a coworker in a startup I’m working for. For the first time I didn’t have to think hard, just think back and realize what I had back then, and what I have now. I left it for all the reasons stated above. The offer I got was substantially better, and I desperately needed a change of working environment, although I really learned a lot of things in my previous life, I think the last year and a half were substantially better and packed with more experience and learning opportunities, which I gladly took, each that I could, sometimes overestimating myself, and the time I have, but succeeding nonetheless. Also, working with people who are much smarter than yourself is something everyone should try to achieve. Because it’s a beautiful experience, and you learn so much. Which is the most important thing I learned in the last year and a half. Never stop learning, and don’t just focus on your small little niche, explore other things, you might like what you find there.

Quantifying the pain your (potential) client is having

Are you a consultant, or maybe you have a SAAS product. You are really good at what you do (programming/design), or your SAAS it the best and simplest in its niche. And somehow you don’t have more customers, or any. There may be hundreds of reasons for that, maybe your consulting services aren’t up to par with the competition, maybe your SAAS is to complex, or it isn’t pleasant to the eye. But what if all this is false, you do everything by the book, and still no
traffic?

In one of the last posts, How to sell a new technology to coworkers (and bosses, by proxy) I wrote about selling new technologies to your coworkers and bosses. And you should think about the bosses part here. As your clients and customers both handle a certain amount of money, you want from them. Be it a one off fee, or a monthly subscription. And in most cases, money is not the issue here (if your leads complain about your prices, think about getting better leads), but the financial and emotional investment a lead has in the old solution. And your job is  to learn to break them from it.

As we all know, it’s really hard to break from a software when you start using it properly. And this is basically what you are asking your lead to do, stop doing your old ways, and start using this new and revolutionary way that will change your life completely. That might sound true to you, and might even interest your lead, but what if they have 10, or 1000 users using the product you want to replace. How will you justify your new and groundbreaking technology while considering that you have to change the way a 1000 regular computer users do their job? Have you even considered the cost of switching from one software to another? You probably haven’t, and your leads have, probably consider it every time you contact them. You have to break from it right now.

Take your main competitor and study their software, or make an analysis of the system your lead wants to replace. The best thing would be, if you could watch people use the given thing for at least one day, spot the rough spots, the overly complicated procedures. Clicking 27 buttons and going through 10 different screens to accomplish one thing. Write all of it down, and turn it into something tangible, lost time.

Lost time is something we take for granted, time spent battling software that should work, but it doesn’t. I had the same issues with my business bank a while ago, but after I applied the following formula, the solution came into place. After you have written down the average daily lost time per user, multiply it by the number of users, and by 20, to get a ball park estimate of
hours lost in any given month. Multiply that with an average hourly rate for a worker in the field, and now you have your silver bullet. The amount of money they are losing with the old solution, compared to your solution. From that, you can easily form your price, and give your lead a fairly correct Return On Investment (ROI), which is the number a business person understands, and wants to hear from you, because they have to tell it to their boss.

About my bank issue, I calculated that I loose about one hour each month, with Java issues, and trying to log into the net banking interface. Multiplied that with 12, to get the yearly amount, then by my hourly rate, quantified my pain, and changed the bank. That simple, (after 4 months of agony, which started when I was out of town for a longer period, and had to pay some bills). It wasn’t easy, and wasn’t fun, but if I’m paying for a service, I want it delivered in a usable state. Your clients want the same thing. And unless they feel so much pain, they won’t do anything themselves, they might explore around, sign up for a trial, and never sign in again. This is where you apply your sales skills, call your leads (yes, by phone), and talk to them, find out their pain, help them to quantify it, help them to use your system, on board them properly, and someone else will have a hard time taking them away.

I wanted this post to be complementary to the last one, on selling technologies, but it took it’s own course while I wrote it. This happens, don’t be afraid of pouring your thoughts to paper/any other medium, and sharing them. Who knows what might come from it?

Overcoming the pirate mentality, and starting to value things

I’ve been brought up in a country where piracy was (and probably still is) imposed to you right from the start. Software licences being really expensive, and living from pay check to pay check, my parents, and probably many others, couldn’t afford legal software for their home computers. Sadly, it’s still looked at it like that. Companies are required to have licensed software, which is enforced by the authorities, but home computers running licensed software are something to long for. So paying for software (and any other digital content), becomes something you just don’t do. If a kid next door can get you a copy of windows, maybe he can get you other stuff. What if there is something they know, that you don’t? Maybe there is a way to download stuff from the internet, without paying the author?

There are of course many reasons for this mentality. People don’t have enough money to even buy their child a computer, but you also want a couple hundred USD or for Windows and Office. Let’s see if the neighbour kid can install that for 40$ or less. After that, it a smooth downhill ride. Need a fancy photo editing software, or whatever else? Sure. We’ve got it, for 10$ or less. And when your paycheck is ~$600 you really can’t buy an proprietary software licence that runs into $200++

I see this as a two way problem. One is the small, self published authors, artists, and software businesses, which don’t have the power the other ones have, to let’s say force whole governments to use their proprietary software in the schooling system and administration, or to enforce copyright laws. And especially if you are one of those people, making software, music, writing, or teaching for a living, please show the same respect to others as you would want to be respected. Most of them offer a no questions refund, so if you really see no value in the software or service, or even a book you bought, go ask for a refund, be honest, and you will get it. If you are a bad person, you can even keep the content you bought, but that is your karma on the line. Learning to think differently, and act differently, isn’t an easy thing to do, but you can start by changing the little things. Go and support people that make your life easier, you will be happier for it. And there is no better way of showing your support to self published writer, than pulling out your credit card.

The other side of the problem are big software companies, who set the standards for you, and you can’t really move away from that path. As it’s not an easy thing to do. The solution seems self evident, using free software, like GNU/Linux, LibreOffice, Gimp, and other very good alternatives to proprietary software. But what if I told you that there is a bigger problem? What if someone is forcing you to use proprietary software, what if you can’t do the same thing with LibreOffice and with Excel. What if someone is teaching your child only to use one software, the proprietary one? Can you buy a new computer and just install Ubuntu and LibreOffice on it? Of course you can, but can your child use it for school? NOPE. Luckily there is a solution for that, at least while your child is at school. And I found about it a couple days ago. School children all have an account with which they can download free, licensed software, while their education lasts. It’s a bad solution, but beats cracks and key generators any given day. Although I don’t approve of this drug dealer mentality, because it is exactly that, it is a good thing to have licensed software on your computer.

Business users (as I am one too), have to jump through many hoops to avoid paying that toll. I had to fire my business bank because even if they claim to work on OSX, there have been so many issues with it, that I’ve lost a lot of time trying to fix them. You can’t file your taxes without paying the toll, and some reports you have to do each month, and year, also require using proprietary software. Luckily, my accountant does that for me.

In order not to sound like RMS, and rant against all proprietary software providers, because I’m not doing that here. If you are creating value with some tool, be a nice person, and pay for that tool. I use OSX, and pay the Apple toll, but I have chosen to do so, no one forced me into it, or moulded me during school to do that. Think about it, especially if you are a software company, pirating a tool with which you gain a substantial amount of your profit. Just think about how it makes you feel when someone doesn’t want to pay for your hard work. Don’t be a cheap asshole, pay for software you use, or use free software.

How to sell a new technology to coworkers (and bosses, by proxy)

Have you been doing programming for a long time, in some old and boring, non-intuitive language or technology? Have you found that new technology everyone is talking about? Maybe it is Ember.js, maybe Angular, maybe even Ruby on Rails a couple of years ago. Do you burn from desire to use that new thing every day? Well, let me tell you from the start, it is not going to be easy.

I have had the same experience, with couple technologies in the past. Always looking for the next best thing. Whether it was asp.net MVC, Ruby on Rails, or git, as it was in my previous job. I failed the .net bit, and looking back, I’m not sad at all that it happened that way. Selling Ruby on Rails was different. Although I didn’t know about marketing and sales as much as I do today, I had a totally different approach, maybe not the best one, but the field to plant those seeds wasn’t very fertile.

The thing I changed was, showing the new technology to my coworkers, getting them to love Ruby, the same way I’ve fallen in love with it. Showing them the simplicity of creating a basic CRUD web application in Ruby on Rails. Making them the main advocates of the technology.

That is the basis of any product acceptance. Teach just one person, make them fall in love with the new thing. Talk about it, make a presentation, offer to teach anyone mildly interested in it. Because you have to get a following. And if you don’t get anyone to follow you, remember what happened with my asp.net try?

Selling to your manager, while going around your coworkers won’t work from the start. Your manager has their job, and while your job is creating beautiful and fast widgets, their is making sure you, and your team, produce enough widgets each day, to fulfil the set budget for that month. And they are really strict about allowing new technologies to come into play. Also, they have managers of their own, who they report to. Maybe there is some vendor lock, and you are unable to do it. Maybe the cost of training 150 people to use the new technology, just because one person says it’s cool, isn’t a really smart thing to do, especially if they appreciate their job.

Building a following is hard, and maybe the technology you found doesn’t have a big following in the world, or maybe it’s just too soon for it (Smalltalk anyone?). But if you are prepared to advocate it, and teach anyone who is mildly interested in learning it, create smart scripts with it, to help you with your daily job, putting it in contrast with the old and ugly technology you are using now, then you will succeed. Even if you don’t, you’ll have another tool under your belt, and you can always follow many of us who went freelance, to work with the technologies we like, and forget the ones we dislike.

Weekly review: Week ending October 19, 2014

I didn’t do much beside regular work this week. I underestimated the size of Benjamin Franklin: An American Life, so I’m still reading it, and it’s great. I knew almost nothing about the US in that era, so this is a very good history lesson, and learning about the life of such great man, which Benjamin Franklin surely was. Didn’t even manage to start the other books.

I wrote more than usual, and plan to hit at it a bit more from now on. Here are the posts I wrote and published this week:

There is one more pretty large feature scheduled to go out next week, so I’ll probably be under a heavy load too. That stuff gets planned in Wunderlist, which I really love using more and more, for private and business use.

Minimum viable feature

We have all heard about the Minimum viable product, and it is a great thing to strive for, if you are doing software development (or design). What in hell are the minimum viable features then? As the MVP(Minimum viable product) is defined as a product has only the bare minimum of features that allow it to be deployed, the same can be said for the features that the project is composed of. The guys from Basecamp once said something like this: Rather build half of a product, than a half-assed product.

While creating software, we often get carried away by shiny features we can add to the project, features that we may not need at the moment, or at all. Premature architecture optimisation is one of them, adding visual junk to html is another. Of course we all love shiny, scrolly, bumpy applications, but if you are creating a let’s say business application, you probably don’t need
that super fancy ajax loading widget that refreshes every 5 seconds. Or to have all of your 27 rows that get rendered in a select field properly cached 7 times in memcached, or redis. It just doesn’t matter at the moment.

What matters is that the product works according to the user story you have received. Same as the MVP on a bigger scale, when you get a new user story, ask yourself, what is the minimum possible set of code that I need to push this feature out. Thinking like this, you will create features in less time, which leaves plenty of time to write tests for your code (which I know all of you are already doing), and more time to spot out the flaws in your code, the user story, the UX, whatever.

Before you run out and create something barely usable, while finger pointing at me, please consider some base standards on how your application, and the features should look like. You can’t just put 5 inputs on a form, stick it on the page, write “Submit” on the submit button, and be done with it. You must make it look visually pleasing. It should also work fast enough that the end user can use it in a normal way, but not faster. While having super fast applications, where everything is cached, and vertically and horizontally scalable at the blink of an eye, if you are serving maximum of 42 users from your local government office, you could say you threw valuable time into something that you really don’t need.

I’ve comprised a list of questions I ask myself, which help in trimming down each feature to bare bones, while maximizing productivity:

  1. who will be using this? (how many people, what profile)
  2. what will be the impact of the feature to the whole system? (maybe some collision)
  3. can this process be reduced even more? (optimize work flow)
  4. should this feature be split in two or more features? (maybe it’s too elaborate)

Guiding myself with these, I’ve successfully produced feature after feature, all small and isolated, working their own things in harmony with the rest of the system. Now, to be honest, I’ve also written some bad code in the past, features that had nooks and crannies that I just had to put there. Or the story owner wanted them in, but that is a different story, about a really powerful and liberating word, NO.

Try to be concise, try to add only the things the feature needs to work. And hold yourself up to the project standard. If your project doesn’t have a standard, go write one. I could bet that no one will be mad at you if you create something good for the project. When creating the standard, remember why you are creating it, and keep it short and concise, with the minimum information needed to convey the information.

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.

Taking out the trash (So you can have new, shiny stuff)

Are you like me, and have a couple ideas (blog posts, products, applications)
lingering in your head? Are you also like me, and do nothing whatsoever about
them? Well, apparently there is an easy solution to that. Get them out of your head,
and sell them. What I mean by this, write the blog posts down, create your
product, or an application (MVP will suffice) and publish them, get rid of
them, and give them to the world.

I have listened to a Ruby Rogues episode on Creativity and
Technology a couple of days ago, and I caught one really interesting thing while
they spoke about writing in particular, but it can be applied to any idea you
have in your head. It’s really easy, the bare act of writing the thing you are
holding in your head, makes it go away. David Allen talks about the same thing
in Getting Things Done: The Art of Stress Free Productivity. And
the same thing applies when you clean up your home from the stuff that has been
there for much too long. You make room for new stuff. And if you are on a
constant improvement path, the new stuff will surely be better and shinier
than the stuff you threw out.

It’s a really simple process, and you will vastly improve your skills if you
start taking things out of your head and putting them into the world. Let’s
say, for example, that you have the coolest idea in your head. Not that you
think it’s the coolest, but something for the world to see. Let’s say that
your idea is an idea for the iPhone. And you tend to keep it to yourself,
while never acting on it. What will happen? Someone will come to the same
idea, maybe not as good, but will act on it, publish it, gather feedback,
improve on it and you lose. What if I told you that the first big idea you
have in your head isn’t really that good? And there are better ones to come.
But you have to clear out your mind so it can accept new things.

I’ve been on and off with my writing for a while, and the same thing happens
to me. I started writing things down, and better ideas came to mind. I even
made one of the applications I had in my head, and saw it as not really usable.
To the trash with it. Also, with a clear mind, you can afford to explore new
things, like Rhetoric, or design, or whatever interests you at the moment.
Most of us can be creative, if we choose to be. And you can’t write your first
book to be as good as one of Seth Godin’s books. But you
have to start writing, to get the junk out of your head, so you can come to
the really valuable stuff that lies underneath all of the garbage.

I’m going to steal a quote from the Ruby Rogues show to end
this post: Terry Pratchett once famously said, “There’s no such thing as
writer’s block, only lazy writers.”

Weekly review: Week ending October 12, 2014

I’m trying to do my best in organizing myself, hence these weekly reviews I’m
planning to do more often, hopefully on a weekly basis. The posts probably
won’t be interesting to regular readers, but if you are a stalker, here is
some candy I’m throwing at ya 🙂

So without further ado, I can start with the brief overview of how my week
went.

I have read two books in the last week, both are really good and would
recommend them. The first one: Designing Web Applications by
Nathan Barry will teach you the fundamentals of web design, how you should
think about your web application (not web site), and how you should structure
the user flow. Barry goes through great examples and gives you a very good
base to start learning about web application design, and UX design.

The other book I would recommend to everyone, and if you have read it, I think
you should re-read it on a regular basis. The book is called Thank You For
Arguing
and it is by Jay Heinrichs. Heinrichs teaches us the
great art of Rhetoric, an art that
was forgotten, and is getting a small revival now. If you want to learn how to
argue better (I didn’t say fight), get what you want, while leaving the other
side also satisfied, and get vaccinated from false dogmas, whether in
advertising, politics or wherever you encounter them, go and read the book
right now. But be warned, although this skill may look like magic to some
people, it really isn’t, it’s just a better way to articulate yourself, not
get played by people trying to play you, and have a better life in the end.

As I was a bit stressed up from private issues over the last couple of weeks,
I had to ramp up work, and didn’t have much time for anything outside of the usual
“work stuff”.

Plans for next week

I have more reading planned for the next couple of weeks, my Kindle Paperwhite
is loaded with a couple new books to read:

I’ll probably be reading more about UX and design also, so if you have good
books or resources for someone starting out in that field, feel free to leave
them in the comments.
We also have a plan to migrate a part of the system to Ember.js, from the monorail
application we are using now. So that will be something thrilling to do, as I have to
figure out how to incorporate ember-cli with a our production application.