A good setup goes a long way

I’ve been limited to a 13” screen to do my work on for ages and ages, well since July 2013 at least. The only person who did the limiting was myself. One of the things that contributed to the issue was working from home, and never having proper office space. DHH also praised working from his 11” MacBook Air on the go all the time. Although that is doable, and I first went with the 13” Air, then a 13” pro, there were certain times when something was missing.
Those certain times increased in rate and frequency when I started wearing different hats, working on everything from OPS, through backend Ruby on Rails, to front-end JavaScript development. Handling complex, multi-language projects is pretty tricky on a 13” screen. It’s not impossible, because I’ve been doing this for two years now. But if you can solve the pain you are feeling by buying a screen/mouse/keyboard combo, then there is no reason to suffer that pain.
Dissecting big problems into smaller chunks can also help a lot. But that also takes a lot of time, and you need to be able to look at the big picture once in a while. Although my eyes are still serving me well, there is no sense in destroying them on purpose. It’s also nice to be able to pass the Joel Test
So I faced another of those complex issues, where you have to look at the big picture while developing something. As it happens often, the lack of top level overview caused me to follow the wrong path a couple of times. Now, I don’t suggest impulse buying, and I investigated all the equipment beforehand. Luckily the computer shop near me had everything that I needed.
After a 10 minute setup, everything was up and running, I’m still getting used to my mechanical keyboard. It differs a lot from the MacBook keyboard I’ve been using for the last few years. But as I’m writing this article, I’m liking the feedback and the writing simplicity more and more. It kinda reminds me of the IBM model M keyboard that I had ages ago. I’d use it today, if my mother didn’t throw it away.
Having a 27” screen, alongside the 13” MacBook, is awesome. It takes me back to the time when I had to buy a new video card with my own cash. Then install it in my work computer on the previous job. Then I took an old 15” lcd from the company’s service room, putting it alongside my 17” screen. It was pure awesomeness back then, more or less.
Having an awesome chair also means a lot. I know people that praise their Aerons and Embodys and I don’t know what else is cool these days. I’ve sat in both of the mentioned chairs, and they are awesome. But I just won’t pay more money for a chair than I paid for my computer. Yes, you can buy a refurbished chair, but it’s still worth a hefty amount of cash. A few friends suggested that I buy Markus from IKEA, and I didn’t regret it at all. I can buy 10 of these chairs (maybe even more) for the price of one Aeron. And it’s an awesome super adjustable, comfortable chair.
What are your pain points with your computer setup? You have something that has been itching you for a long time. It’s easy to solve, and there is often an inexpensive solution to the problem. So go ahead and do it. Pull the trigger and buy the thing you need to flourish. You will feel the benefits immediately.

Are you backup/restore procedures good enough?

So, my MacBook crashed yesterday. It didn’t really crash, just that it went black after logging in. Although I have a suspect, I won’t name it here because I don’t want to start a flame war or something. The issue is that the partition has became so corrupt that it couldn’t fix it with the Disk Utility. The only option was to do an rsync backup from the single user mode to an external USB drive, which took ages to do. Hint: to enter single user mode hold Cmd + S when powering on your MacBook. Strike one.

I do have a TimeMachine backup at home, but the laptop didn’t stay turned on long enough to backup properly. The last good backup was more than 2 months old. I found myself in a bad situation. The other thing that happened is that my brother’s laptop also stopped working the day before. His issue had something to do with the nVidia drivers on ubuntu. Good to see that nothing has changed since I last used linux and nVidia together 4 years ago. Being stupid as I am, I overwrote the macOS usb with the ubuntu image. All was fine with my MacBook, what could go wrong. Strike two.

Something happened during the restore procedure and managed to mess up the restore partition. The only option was going back to Mavericks that came installed on the MacBook when I bought it. I wasn’t planning on doing that. Strike three.

I managed to back up everything, deleted the system partition, and did a fresh install. After waiting for the macOS installer to download on my wife’s laptop, for at least 2 more hours. A day well spent, no person alive would say. But I did learn a few lessons though.

Have a backup (encrypted if you handle work/client/sensitive) stuff. It’s best to have at least 2 places with backed up data, using two different backing up solutions. TimeMachine and Carbon Copy Cloner work awesome together. You can always count on something going wrong.

Use cloud storage for the “important stuff”. Dropbox, Google Drive, iCloud, there are endless affordable solutions that all do the same thing.  They keep your valuables safe if a crisis happens. Have these things on your 2 backup locations as well, you can never know…

Have a fresh usb (or cd/dvd) installer of the OS you are currently using. I had this, 30 minutes before my computer crashed, I overwrote it, Murphy’s law in action. You got one over on me mr. Murphy, well played sir.

Having procedures like these won’t prevent situations like the one happened to me yesterday from happening. But they will surely reduce the stress caused by the situation itself. I couldn’t check if the drive was ok before backing it up and deleting partitions. Backup with rsync took 6 hours, maybe even more. If the MacBook was broken, it was at least a 4 to 5 days waiting period to get it serviced. I would be OK with this if it was holiday season, but it isn’t, and I have work to do. I could buy a new one, have it delivered the next day. I could even drive to the store and pick it up myself, but why buy a new one if the old one isn’t broken. What to restore on that machine, I have unreleased stuff that isn’t in the cloud yet? Stress levels were pretty high.

In the ideal case, I’d have a backup from the day/night before and it would take me 10 minutes to decide it’s worth killing the machine and starting fresh. The os installs in 15-20 minutes, I can restore the apps/settings from the backup, or even do a full TimeMachine restore. With an external USB 3.0 drive, it would be quite fast. I could have done some productive work yesterday. Instead I spent the day staring into rsync output, hoping it will finish soon. I like the experience though, because I’ve became sloppy, and this is a fair warning to what could have happened if the SSD decided to stop working. I was lucky that I only lost a day of my life, but I learned a valuable lesson. I hope that you can learn from my mistake.

Doing new things is hard, choose your hard

In my last post I touched on the topic of quitting, and how easy it is to take the easy path instead of the hard one and quit. Most of us quit all the time, big and small things alike. When things get a little tough, it’s really easy to drop back to a place where you feel comfortable. And while we often quit, we rarely understand the consequences of that act before it’s too late.

When was the last time that you were assigned with something you’ve never done before and it seemed easy and straightforward? If I had to guess, the answer is never. New things are hard to us for a reason, we didn’t create any patterns around the process yet. Even if it’s something that you’ve enjoyed doing in the past, it takes you time to get accustomed to it in a different environment.

Maybe this is a filter of some kind, because people who persist in their efforts are the ones you hear or read about. We all have our struggles in life, the only thing that differs is will you give up or continue fighting, will you take the easy road, or the hard road. Just bear in mind that the easy road can and probably will be harder for you in the long run.

People have different learning patterns, and different backgrounds. While new associations in our mind are easy to create, it sometimes takes time to link everything together, or to figure it out. That process is hard. If you ever tried to learn a foreign language you’ve encountered it, along another issue, you need to use the language to learn it.

The best way that I’ve experienced is using what you’ve learned from day one, it will be hard for a while, but much easier in the long run. Yes, you will go full Tarzan mode with constructs that translate to “I want go food” or something similarly funny.
The trick is not to be afraid or ashamed while you are learning something new, otherwise it wouldn’t be hard for you to do it. If you are surrounded with the right kind of people, they will encourage you and help you, even dedicate significant amounts of time into helping you, because that is something they also care about.

Same thing goes with learning new computer languages, or programming paradigms. Yes it’s hard to learn Object-Oriented programming, it is also hard to learn Functional programming. While I’m on the subject, it’s pretty hard to learn testing, and that is just the high level stuff. Everyone one of us has been an apprentice at one point or another.

Sometimes I am still an apprentice in some new technology that I’m interested in. You will always have new stuff to learn, it will (probably) be hard, maybe you even won’t succeed, but are you willing to immediately give up the benefits you could reap for your whole lifetime just because you need to suffer for a day, or a week? I’m not, when something gets too easy for me, I just have to find something new that will push me even harder in the direction I’m moving to. It’s pretty easy to figure out that most of the things that you appreciate in your life are hard. Raising children is hard, running a business is hard, competing in sports is hard, sometimes even breathing seems hard. Do you really want to spend your whole life as a couch potato, watching TV and not achieving what you might if you just put in some effort?

I’ll end this with a nice quote from a three-time Tour de France winner Greg LeMond: “It never gets easier, you just go faster.”

Automating personal and business workflows

In an average month, there is a lot of stuff you will have to do. Stuff like paying the bills, taking care of inventory for home/company, budgeting, and your day to day work.

The best thing I have found to do it is to automate as much work as possible. I’m not only talking about programming something to do the work for me, but to write down all the processes that I’m using in my work and life.

By writing everything down, you are able to generate check lists, for every process. Although this sound pretty boring and lame, the alternative is panicking when you’ve forgotten to take the health insurance card to your vacation. Or your drivers licence for example. Or kids (OK, I sincerely hope that this one only happened in that movie) :).

Having a printed out check list does wonders when I have to set up a new server environment from scratch, although everything is scripted, there is always manual work involved. Checking each box gives you confidence that everything is working as it should be. If a process fails though, you are able to retrace the steps, figure out what went wrong, and fix the step, or add a few in between.

When you document everything, it’s a great time to hire someone to do the menial work for you. You don’t have to waste your precious time by paying the bills, or ordering water, or doing anything except the one thing you do best, whatever that is. That thing got you to where you are now, but most of us have businesses to run, and that also takes it’s toll.

Tolls don’t matter here, start with pen and paper, then see if anything else fits better. I use Markdown and ia Writer Pro to accomplish my goals, to write the process down, but lately I’m experimenting with something bigger, as I want to focus on writing more.

Don't obsess with analytics too much

If you are only an occasional writer, as I surely am, you don’t have to look at the analytics screen all the time. It’s a really nice thing to look at the real time data when you publish a new post, and advertise it on Twitter and other social networks.
But that one is a waste of time. Real time data doesn’t mean anything real. The main reason is that aside from satisfying your own weird obsession, you are not accomplishing anything that will help you with your goals in life.
The way I fight with it (when I eventually write and publish something), is scheduling it to be published in the future. When I set and forget, the urge to look at real time analytics data vanishes, because if I’m not personally involved in pressing the Publish button, then I’ll most probably forget that it’s being published at the moment, and work on something else.
As the best time to publish depends on many other factors, I tend to publish when I’m even not sitting in front of the computer. I’m trying to set a dedicated time to write each day, and it will take me some time to accomplish that. But your publishing time should always be the same.
I’m not advocating on complete analytics denial, because analytics are one of the best investigation tools you have in your work. You can see what posts people are most interested in, and focus on those topics, instead of those not being read much.
In a business setting analytics and lead tracking is really crucial, but real time data won’t help you with anything. Once someone is visiting the site, then it’s too late to change anything, so relax, don’t fuss about it and have fun.
Spring is coming, go outside and catch some sun, it’s good for you. And it’s much better than constantly looking who is on your website right now.

Just Fucking Ship

Two months ago I found out that Nathan Barry has a 24 hour product contest, in which he aimed to produce a real product, in the form of an email course, in 24 hours, from start to finish. It was really interesting following the process where he created a whole product, that earned a fair amount of money, in 24 hours, from scratch. Of course, it wasn’t from scratch, because he already has a couple of design products, but his process of making something in 24 hours seemed awesome.

One of the other people that I follow, and use their products, Amy Hoy, accepted the challenge and had her own product built in 24 hours. I bought both of the products, and although I’m not a designer, I’ll be using Nathan’s exercises for learning.
The thing I’m writing about here is Amy’s book, Just Fucking Ship, which is the sum of all her knowledge on shipping products fast. She takes us through a very convenient metaphor of creating a Thanksgiving dinner, planning for it ahead, and doing only the necessary things that you need to ship the product, or finish the dinner on time. Stripped to bare essentials, the final product (after 24 hours) didn’t have nice formatting, it wasn’t edited, and had no cover. But it was a product that had a price, and a place to buy it. It wasn’t perfect, but it was just enough. I’ve read the first version when it was out, and then the last (edited) one a few days ago. It’s a very short read and intended to be re-read every time you start creating something new. The updated version is much better, with nicer formatting, and although there is no kindle or epub format yet (I really love my kindle), the PDF is very readable on the kindle.
Amy’s language might scare off some of the purists, and it’s intended to. It’s really fun to read a book that is written just as someone would explain stuff to you in person, with real language, not overinflated purist nonsense. Go  buy the book, it’s only $19, and the price will probably increase in the future.

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.

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.”