Jan 1 2010

How to achieve your New Year’s Resolutions, the Agile way

krystiano

P1010424ascs

Welcome to 2010 !

New Year’s Resolutions are a great idea…in theory. In practice however, we set ourselves to fail fast by trying to be too ambitious and too vague to know where to start. In addition, the methodology which we use to accomplish those goals is not the right one. We try to predict and plan too much up front and this is why most of us fail to keep them. If you’re an IT person then you probably heard about the Watefall model, if not, take few minutes to read this or watch this two minute video and don’t forget to come back to this blog post.

Oh great, you’re back…or you never left. So, imagine that your resolutions are software projects. Because everyone has been doing so for years, we don’t question the New Year’s Resolution methodology and we should because it is very Waterfallish. At the beginning of every January, we try to decide what are and how we will achieve our resolutions. With 12 months ahead of us, we are just setting ourselves up to fail and if even feels like lying, doesn’t it? We can try hard, but we can’t possibly predict what will happen over the course of this year. For that very reason, we need to change our thinking and apply a different methodology. While the resolutions remain the same, we need to define them better and come up with a more flexible approach to meet our goals. Such methodology already exists in the IT world. I bet you that at this point you know where this is going. That’s right, Agile, baby! Now let’s try to apply it to non-software projects, more specifically to your New Year’s Resolutions. The main rules of Agile are not plan too far ahead and to make few smaller steps while re-evaluating the situation after every step.

First thing first. Make yourself a cup of coffee, sit down in your favorite chair with a pen and some paper and write down what you would like to achieve this year. This is an important step, so take your time to think. Be realistic, but at the same time try to push the boundaries a bit. This list will be your so called product backlog. Now reorganize it by order of descending priority, then take the first item from the top and break it down into details. Enumerate your requirements, things you’ll need, people you will have to contact, etc. Order those detailed items by ascending chronological order and put an estimate next to each item. (You can do the same thing to the second item as well, but don’t go too far down the list. Chances are things will change before you even get started working on those item.)  This is an important step. What we did here, is we took a goal and we broke it down into smaller more achievable goals, which will allow us to monitor progress and adapt to the unforeseen if needed.

The objective of your mission is to arrive to the destination while having the flexibility of taking different paths along the way. People and events will get in your way. Don’t try to plan for it, rather expect it to happen at some point. Remain positive. Distractions are not necessarily a bad thing, you can learn from them and make adjustments as you go.

Here is where I hand you the ball and run with it. Even if you haven’t been exposed to Agile methodology before, you might not work out perfectly the first time, but keep trying. Once you get into it, you will definitely appreciate the outcome.

Quick tips to help you in your motivation department:

  • Make yourself an inspiration board. It’s a great way to keep yourself motivated to stick to the plan. Gather pictures, quotes, whatever reminds you of your goal and pin them somewhere where you can see them everyday.
  • Make public commitments. Let your co-workers, friends and family know about the goals you are trying to achieve. This will give you an additional boost to reach your goals. Last year I wanted to stop my coffee drinking habit. Don’t ask why. ….OK, ask why. Because I realized that too much coffee was making me irritable towards the end of the day. I asked few co-workers to spit in my cup if they see me drinking coffee. After I made it public, my additional  motivation was to not give then the satisfaction to do so. (While I’m a it, thanks Dave Mosher for inspecting my cup on a daily basis, it helped :) ) Moral of the story is, involve others, everyone needs cheer leaders.
  • Join a club to surround yourself with people with similar interests. If you like photography, join your local photography club, or join a forum on the Internet. There are plenty of people out there, to share your ideas with.

Start right here right now. Use the comment box below to share your New Year’s resolutions.


Dec 10 2009

Programmer’s career path and how to get where you want to go

krystiano

IMG_7803bs

When it comes to career choices, many IT professionals chose to just go with the flow due to so many options out there. We need to choose a programing language, operating system, industry, etc to specialize in. No wonder some just get discouraged while trying to make their next career move. After all it’s our future we’re talking about and we can’t go back in time if we make the wrong choice. Wouldn’t it be nice if someone could just show you how to be in control of your IT career by teaching you where to invest your time to become the most valuable professional in any company? …now there’s a book for that.

I’ve recently read “The Passionate Programmer” by Chad Fowler (@chadfowler). What a great book. So many valuable tips and so entertaining to read. It’s a comforting feeling when you can related to what you’re reading. In his book, Chad writes about how to stay passionate and what actions to take to have a successful career as Software Developer. Following, are some points that I’ve either already put into practice or found interesting. I hope this will be enough to persuade you to read his book:

  • Dig deeper. Don’t just use your tools, understand them. If you use ssh everyday to accomplish one specific task, take few minutes to read the ssh man page. See what else ssh has to offer. How about regex? Do you understand how to use it, or you just keep trying until you get what you want out of it? Same goes for your favorite IDE. You will be way more productive if you know your tools.
  • Practice, practice, practice. Programming is a creative process. Any creative profession requires long hours of practice. I like photography, so I’ll use that as an example. I often take my camera out just to take some practice shots. I almost never leave home without a camera, but I don’t post photos from every photo I take because a lot of them suck really bad. Which to the viewer could mean that I suck as a photographer (I hope it’s not the case). Musicians, athletes, designers, painters, writers, they all spend time practicing. So why would that be different for a programmer? If the only time you write code is at work, then you are practicing on the job. A great way to practice your programming skills is to work on some personal projects. If you have hard time coming up with an idea for a side project, you can instead do some coding exercises which can be found on sites like CodeKata.
  • Finish things. Before you move on to your next task, finish what you’ve started. I personally hate not being able to say “I did it. It’s done.”, after I’ve invested my time into something. Saying “Done” or writing a check mark next to an item on your todo list feels good, doesn’t it?
  • Deadlines are your friend. Without having a time window for your task, you will probably spend way more time on it then you should. Sense of urgency can make you more productive.
  • Make a hit list. If you acknowledge that you’re procrastinating, then write a hit list. Enumerate tasks, then pick one per day and do it. Make sure the tasks are small enough so you actually have time to do them. After that, that’s it, you got no excuses.
  • Be positive. This one made my life so much easier and much more enjoyable, so many times. Stay positive, keep your mind on the present time. That way you will enjoy small victories instead of always focusing on the big goal.
  • Stay away from whiners. Also called chronic complainers, and they can stealthy bring you down before you even realize what hit you. Try to stay away from work conversations about promotions, office politics or gossips. Here’s a tips on how to handle chronic complainers.
  • Make boring exciting again. From time to time we all have some boring tasks on our plates, so we might as well accept it. Whenever you’re working on a dull task, try to go the extra mile and do a bit more then the minimum required, this should make it at least a lit more interesting as it will make you think.
  • Don’t be a yes-man. “Yes” is a positive word, but the ramifications of what you could be committing to by saying it, could potentially be negative. Don’t be afraid to say “No” when your gut tells you so. That way you will avoid unnecessary disappointments.
  • Stay cool. Usually, when the feeling of being overwhelmed kicks in when we start to panic. Try to stay calm when fixing a last minute bug. Also remember that everyone makes mistakes, and we all forget. Even if it currently feels like it, chances are that the mistake you just made will never have any impact on your career.
  • Own it. Try to be independent and have ownership in your current projects. It will automatically make you more passionate about your work. Propose solutions to your leader or manager. Talk to them about the ideas you have, the additional functionality or performance improvements.
  • You are what you explain. I can relate to this one big time. English is my third language. There was a time when my vocabulary was rather limited and I had hard time selling the great ideas I had, during conversations with the director of IT department. I found that if I took the time to write a clear and concise email instead of struggling to explain it to him while standing in the door frame to his office, the chances of him getting excited about it and giving me a “go ahead”, were much grater. Point is, you might have an idea, but if you can’t sell it, then the idea will remain just being an idea. Communication is a skill that can be learned. Personally, I found that a good way to improve communication skills is by writing. Focus on writing clear and concise sentences and eventually you will start talking the same way.
  • Speak their language. This is an extension of the above point, but with regards to “translating” what you do, so that non-IT people can understand the benefits of your work. Say, you wrote an app which once a day goes over the records of all accounts and verifies if a credit card is about to expire. So what? How does that benefit the company or department or your client? You can say that instead of the database admin emailing results of a query to the secretary every morning, he will have an extra 30min a day to work on something else. Learn the business language of your industry. Good way to practice is while you work on a task, take a minute to think about how you would explain the business benefits of what you’re working on.
  • Share your work. Contribute to an open source project or start a new one. This is a great way to practice your programming skills, learn from other contributors and make new connections. By doing so, you will demonstrate that you’re passionate and got a nice set of skills to potentially lead a project.
  • Be a good listener. No matter what’s their title, everyone appreciates a good listener. People like to talk about their achievements and their passions. Appreciate the fact that they want to share something with you, learn from their experiences and feed of their positive vibe.
  • Focus on the process. Everyone probably heard this many times before, how maintenance cost is the biggest chunk of total cost of a project, but never tried to do anything about it. Be nice to your code and it will return the favor. Good process will lead to good code. Bad legacy code will enforce bad process. Take the available time to get it done right. Don’t burn time gold-plating, but make sure you’re satisfied with what you’re committing. Before you write a single line of code, run your architectural design by co-workers. There are (hopefully) more brains then just yours in your team, so rely on them and implement changes suggested in code reviews. Oh, and ideally…TDD everything. TDD positively affects the way you write your code, and makes both production code and test code more maintainable.
  • Seek feedback. This was always a natural thing for me to do. At any job I had, I was always curious about how am I doing from the manager’s, director’s or president’s point of view. Do they think I’m good at what I do? Do they even notice the effort I’m putting in? Do they wish I was better at something they could benefit from the most? Think of people you would like to get feedback from. Then ask those people to honestly answer few questions about yourself and your performance. Do it in writing, so that they can do it whenever they find time for it, this might also yield to more honest answers.
  • Be agile. Agile works well for software projects, but it’s applications are not necessary limited to software. Apply agile approach when planning your career. It’s a fast changing industry, and no one can predict which way it’s going. By being agile with your career, you will be able to better adapt to changes as they come.

Those are just few tips that will help you drive your career as software developer to the destination of your choice. If you do want to be in full control of where you going, then pick up Chad Fowler’s book.


Oct 24 2008

I ____ LIFE

krystiano

Life rocks! Yep, life is awesome! For me, the best thing about life is challenges. Seems like I can’t go through a day without challenging myself. The more I do, the more ideas I get about what to do next, and so on and so on and so on. Recently I found a bug in the way I live my life. I spend most of my time chasing stuff and not because I have to, but because it’s fun. I wish I would spend some time enjoying my achievements before I attack the next challenge standing in front of me.  Just looking at the last 12 months, we bought a brand new house, we got married, I worked on a lot of great projects, I made more money then I expected, I met a lot of cool and smart people, and lots more. But now that I look at it, I just took it all for granted, instead of stopping for a moment to say “WOW” or “sweet”, or whatever sounds fresh those days.

OK, the above paragraph totally sounds like I’m miserable. I’m not. No really, it’s all good. I’m just amazed with the endless pool of things that I can occupy my mind with. I don’t recall ever saying that I’m bored. There is just so many things I want to do. Now that I think of it, I don’t remember last time I brushed my hair, but that’s because I like to keep them short like my phone conversations. Perhaps a slightly different topic? …Anyways.

Recently I decided to brainwash myself by watching documentaries about the “Law of Attraction” (like “The Secret“). I came to the conclusion that it’s pretty much how I have been living my life without even knowing “the secret science” behind it. Yeah, I did have to deal with some unpleasant crap in the past, but I dealt with it and I moved on. Some might argue, but I think that one’s past doesn’t determine one’s future. There are so many different paths to chose from, that the path you chose doesn’t mater that much. That is, as long as you have a goal, a destination which you want to eventually reach and you are motivated to reach it. (The key word here is motivation). It’s sort of like driving on a highway at night. You’re driving from Saskatoon to Vancouver, and you know that you want to end up in Vancouver even if you can’t see it yet. The only thing you can see is what is few hundred feet in front of you, or whatever the headlights can reach. There is always a chance that you will take a wrong turn or you might get a flat, or the car will break down, or you will run out of gas money, or even stop along the way to enjoy the Okanagan Valley, but this might only slow you down, not prevent you from arriving in Vancouver.

So all this to say that life is awesome, and that I plan to take some tome to enjoy it. My goal is to organize myself to find time again for things that I used to have time for before. Like photography, music production, blogging, and most importantly my wife.


Oct 8 2008

Ballmer Peak

krystiano

Definition of Ballmer Peak: “The theory that computer programmers obtain quasi-magical, superhuman coding ability when they have a blood alcohol concentration percentage between 0.129% and 0.138%. The discovery of this effect is attributed to Steve Ballmer, CEO of Microsoft – who probably “discovered” it by simply monitoring his own perpetually inebriated nervous system, and deducing that programming ability “peaks” after a few drinks and then dips dramatically after full-blown drunkenness ensues. …” from Urban Dictionary

Now a graphical proof by xkcd:


Oct 8 2008

Photo competition: "Photographer's choice"

krystiano

For the fun of it, few weeks ago I submitted some shots to a local competition and I just got back the results. My scores are better then expected. Here are the shots and their scores:

J-Nice

Pictorial 7/10, Technical 8/10, Interpretation 7/10, Comments: Nice close-up. Technically well done.

Pictorial 9/10, Technical 9/10, Interpretation 8/10, Comments: Too much empty space on top, Flash is very strong. Great shot.

Pictorial 7/10, Technical 7/10, Interpretation 7/10, Comments: Nice colors and shadows. No fill light. Nice title.


Oct 1 2008

Smooth landing

krystiano

Smooth landing

I figured it was time for a change, so I moved my blog to WordPress.  Setting it up and importing previous blog went very smoothly.  I did not have much time to play with all the settings, themes and CSS, but it will happen eventually. This new blog not only looks different, but it will contain more as well. Previously it was mostly work related, but there is a lot more going on in my life so I decided to take it one level further and share more with you.  Future posts will tell.

Other then this, as usual, a lot of stuff is happening. Few weeks ago I felt like everyone wanted me to do some work for them. Me being me and constantly trying to push myself to see when will I snap, I did end up accepting them all.  For the first time, I did outsource some of them, and it was a very positive experience. I can definitely get used to outsourcing. It does take a lot of load off my back, but there is a catch. How do you know if the person will do as good of a job as you would? In my case it was simple, I did previously work with the guy and I knew he was good.

So far winter has been awesome. 25C and up, for about 2 weeks now. I’m considering planting some palm trees in my backyard.


Sep 18 2008

Road trip, the before and the aftermath

krystiano


So I took some time off. Not because I felt like I needed to, but because that’s what normal people do :) I really enjoy what I do, so I don’t really feel the need to go for holidays to get away from work. Nevertheless, there is more to life then work. Who knows, maybe visiting a new place or doing something new will give me some new ideas or different views on things.

Anyways, wife and I decide to go for a road trip to Vancouver. I love driving as I get to see a lot more and also gives me a chance to meet all sorts of people along the way. (Side note :One thing I quickly learned when I decided to leave the cubeland, is to talk to whoever I get a chance to talk to. I find socializing being a very effective marketing strategy for a freelancer.) The whole trip took 11 days and about 3500km. From the prairies, through the desert, through the forests and mountains to the ocean and back. The weather was very cooperative, except when we were approaching Vancouver that it started raining. How weird, it never rains in Vancouver :)

It was the first time I took some real time off since I started freelancing. It definitely takes more preparation when you are a doing your own thing. If you have any ongoing projects, you need to make sure that you leave your customer in a stable state so that they can survive without you during your absence. And even then, there is a chance that they will call and email you whenever they need to. You can always chose to ignore the calls and not check your emails, but if you are like me, the “missed call” will leave you wondering what is happening and why they called. I did end up being called on only two occasions. One customer had an issue not related to my contract work, but he didn’t know who to call so he called me. That is rather normal in my field, since I’m a Software Engineer or more commonly known as “The computer guy”. The second time I got called because I forgot to send my invoice. What a nice customer, I wish all of them couldn’t wait to pay me. That being said, I think I did take care of my customers, but it definitely takes more effort. As an employee, there are other employees to take care of things during your absence, as a freelancer there is no one there to have your back.

Now to the aftermath. The worst thing one can do to him/herself after coming back from holidays is to try to get the wheels in motion as soon as possible. There is no logic in taking time off and then burning yourself out in the next few days. I’ve done it before, and I learned my lesson. This time, I decided to take it easy in the first week after we came back. On each day I did a bit of work, but none of the crazy-deadline-multitasking-work. I also took some time to organize our holiday pictures, to take care of some long overdue paper work, reorganized my office room, etc. Oh yea, one thing I forgot to mention: Being an obsessive perfectionist who never stops thinking about the most efficient ways of doing things, while planning our road trip I planned to pass by IKEA to pickup some new furniture for my home office. I’ll be posting some pre and post pics of my office.

Since we came back, there has been some new opportunities and other goodies coming my way, stayed tuned.


Aug 6 2008

Future Me

krystiano


I decided not to count days anymore as I’m starting to feel like I’ve been a freelancer long enough. I’ve learned so much in the last couple of months, that I feels like I’ve been doing this for years. One cool thing that I realized just last week, is that working long hours is good for me. I actually see it as an investment. I spend most of my time writing code. Since the beginning, I kept track of my hours, what I worked on and when, etc. (Doing stats on myself is interesting.) Recently it felt like writing code got easier, and was taking me less time to do the same amount of work. Being an engineer, I had to back it up by some proofs. So I checked my time sheets from few moths ago and last few weeks and it was true. I improved my efficiency by about 25%. So by spending long hours coding, I now can spend less hours coding. Sweet.

Why stop there? That got me thinking that I should try to enhance my other skills. As a freelancer, there are other things that one needs to take care of. Accounting, marketing, documentation, research, customer relations, etc. By having to deal with the above on daily basis, I obviously got better at it, but I’m sure there is still room for improvement. I’ve always been a self-learner. (That might explain why as a kid I walked into a river and almost drowned.) I find it more rewarding when I figure out things all by myself. But the future me decided to try a different approach for once. I decided to learn new things by means that I never tried before. So I decided to read a book. I read books before, but they were all technical and related to my field of study. This time I’ll be reading a book that my wife have chosen for me. I asked for something with content but nothing too technical.

OK, let’s jump to different subject now. Salespeople. Their job is the exact opposite of a developer (me).  A good salesman can sell anything, even something that doesn’t exist. To make things even more interesting, he can promise the client that it will be ready by the end of the week. As a freelancer, I get to be the salesperson and the guy who makes it happen. Therefore I need to make sure that I don’t commit to unrealistic requests. What’s interesting is that freelancing offers way more then just more money. It gives me a chance to explore different fields and opens a lot off doors. Let’s say I’m an employee (programmer) and one day I decide to make a turn and become a marketing manager. I got no experience in marketing, so what do I do? As a freelancer, I get to explore the marketing side of business whenever I feel like. Maybe it’s not on the same scale, but still, it’s a good introduction to something new.

So basically, I decided to invest some time to learn the non-technical things and try out some new learning methods. I will let you know how it goes.


Jul 24 2008

Day 106: 73 days later

krystiano


Time flies like never before. It’s been 73 days since my last post and I have about 73 stories to tell. Yep, lots has happened, thus my excuse not to blog :)

When I started this whole freelancing adventure of mine, I sort of new what to expect thanks to many freelancing blogs and advices from family/friends and others. Well, knowing what to expect and living thought it, are two totally different things. I mean, when you know it’s going to hurt, you’re still fine. When it actually hurts, you realize that you were rather optimistic when you though you knew it was going to hurt.

In the last 73 days I managed to get quite a bit of new contracts. Short ones, longer ones, easy ones, and some shoot-myself-in-the foot ones. Sometimes customer’s expectations are very unrealistic, usually deadline wise. I can implement anything, but I need time to do it. So facing a customer like that, there are only 3 choices. Choice 1, refuse the contract and let some else commit suicide. This choice will likely lead to the customer never contacting you again (in the near future). Which is probably fine, when you have been a freelancer for some time and you have a well established clientèle and a nice fat portfolio. If you’re still new to the game, refusing a contract is not an option. I might be too optimistic, but I find that the more difficult the customer is, the more experience I gain. Choice 2, try to educate the customer. Explain the procedure and why it will take that long. If it’s a new customer, this choice will most likely lead him/her to try to get someone else to do it. If you have already done some work for him/her then the likelihood of your customer lessening to you is slightly grater. Choice 3, take the bullet. Be a hero now and suffer when you get back to your home office.

I did end up choosing 3 more often then I should, which translated to many sleepless nights. The only thing that kept me going is the challenge and new experience. By learning the hard way, and chances of me not making the same mistake are lower. Even if my social life has been close to none, I don’t regret anything. (By the way, thanks to my wife for being so understandable and patient.)

I started practicing choice 2 on customers for whom I did some work previously. It worked for some, actually it worked for most. Sidenote: I noticed that when I charge more, they pay more attention to what I say. If I charge less, I find myself being treated more like an employee. So they tell me what to do and how much time I am being given to do it.

So far, it only happen once that I actually refused a contract (choice 1). I got to admit, it’s a strange feeling, a weird feeling, but I try not to look back. Some customers might actually respect you more for being honest and have a better image of you.

OK, so besides work, I did some more work. Different kind of work though. I organized few things. I’m already an organization freak (and I’m proud of it), but there were certain things that I have been putting aside for too long. I even made myself an excel sheet…actually I don’t use Excel. Instead I use IBM Lotus Symphony, which is free, and is not bad at all. I just love IBM stuff, specially their laptops. Anyways, so I made myself a list of what I know I have to do for my customers and I tried to come up with realistic time estimates. It came close to 500 hours. So my next post will be in about 4 moths. Just kidding.

Also, one of my main servers died on me. There is never a good time for a server to go offline when it’s being used 24/7. So between juggling projects, I ended up rebuilding a new server. I decided to go virtual this time and free. I’m running VirtualBox, and so far so good. I figured, next time hardware go bye bye, I’ll just have to copy the virtual OS image to a different computer and I’ll be back in business. That will be 10min of work instead of 1 day.

Another thing, I think I’m starting to understand what others mean by “isolation”. The other day I went to pick up mail and I felt like I don’t belong outside. The sun shining on my face felt weird. For a short second I thought about getting back to the cube land, but I like being a freelancer and I like programming. I just need to find time for other things.

I got much more to write about, but I will keep it for future posts. Yes, I will write again :)

Picture of the day: “Big Mac”, probably the only fish who have seen so much code in his life and will see much more.


May 14 2008

Day 33: Since we last spoke

krystiano


I’m back. For the last 2 weeks I’ve been busy like this guy in the picture. And no, I wasn’t slacking of because GTA IV came out.

My office is starting to look like an office. We finally installed blinds which were totally worth it. One cork board was not enough anymore, and I finally framed all my certificates and diplomas to remind me what I achieved so far. Maybe I should just post some pictures of my office.

Just 2 days ago I finished an important contract (aka. “Door-opener-to-a-warehouse-of-contracts”). I did put a lot of time/effort into it and judging by the feedback I got, it was noticed.

After 33 days of me, myself and I, life is still good. It is actually getting better and better everyday. I’m starting to notice certain mistakes I made when starting this adventure. Only some minor ones, but I guess it’s a sign that I’m gaining technical experience and business skills.

Once again, thanks to “Feed the Dog” for poking me.