Life as Code

refactoring my life

Archive for the ‘Working smart’ Category

don’t wait for chance, change

leave a comment »

“Your life does not get better by chance, it gets better by change.”

- Jim Rohn

If you don’t like what you’re doing at work… do something else.

If you can’t do something else at work, get a hobby… it will push you in the right direction.

You don’t like doing anything at all? Now that’s a big fat lie.

There’s always something else… that can make you happy.

There’s no magic fairy that is going to come along and fix everything. You’re not that lucky, nobody is.

Change, work harder, and it will pay off.

Written by Bogdan

January 24, 2013 at 12:41 AM

Posted in quote, Working smart

Tagged with

your boss… hired you to take care of things

leave a comment »

...hired you to take care of things

Written by Bogdan

January 2, 2013 at 5:00 PM

Posted in Working smart

Inbox zero heresy

with one comment

Lately I’ve seen a lot of people posting and tweeting, bragging about how zero their inbox is. This is funny and sad at the same time.

envelopes

It’s funny because they’re getting it wrong… it’s never about having an empty inbox. It’s sad because at the end of the day they have an empty inbox but they didn’t get anything done… they were too busy getting their inbox to zero :)

Maybe the name ruins it all.

Maybe people get it as “I should spend as much time as possible checking my email, cleaning it, moving it to folders or deleting it so I can get it out of my mind, because that has some sort of psychological effect, relieving me of my pains and stress”, taking it from an ongoing habit to permanent effort.

It’s ironic that something meant to help sort things out and liberate more time for creative and productive work… actually transforms into a time-consuming and stressful (“not at inbox zero yet… have to get there… omg”) activity.

Think about this: If you’re checking your email every 5 minutes, you’re checking for new email 24.000 times per year.  

What’s worse is that it turns into some sort of procrastination aid.

It feels like productive work, because you are clearing stuff out. Right? You are advancing and getting somewhere.  Right?

Well, no. Inbox zero isn’t somewhere.

Don’t set your goal to have inbox zero… set your goal to actually get more things done right, both in quantity and quality and you’ll get somewhere.

Written by Bogdan

January 2, 2013 at 4:41 PM

Change is inherent – expect it

with 3 comments

Everything changes, nothing remains without change.

- Buddha (Gautama Siddharta)

In my last post I was talking about treating everything as a project and how change is inherent. This is one of the principles that I live by, one of the simple rules that guide me.
For me, there are 2 ways to handle change:

  • believe it when people say that something is set in stone, unchangeable… fixed – and have an incredibly bad day when everything changes
  • always consider everything in flux. have a plan and try to execute it – hope for the best but expect the worst. be ready for change, and when everything goes as planned be happy that it did

 

It’s easier to embrace change when it happens if your expectations are that everything will eventually change.

It’s even easier to embrace change when change is a part of your plan.

This way, you are always ready – never surprised.

Written by Bogdan

November 29, 2012 at 12:45 AM

Comparing SaaS Cloud apps hosting and provisioning options

leave a comment »

This is what popped up while going through a thought experiment on choosing hosting and provisioning for the development of a new Software as a Service offering.

The options considered are:

  • PaaS with multi-tenancy – use a PaaS offering (think Cloud FoundryHeroku, Google App Engine and Windows Azure Compute) to host a multi-tenant system. Provisioning for a new client is zero-cost done inside the system
  • PaaS with one environment per client – use a PaaS offering (think  Cloud FoundryHeroku, Google App Engine and Windows Azure Compute) to host a regularly developed system. Provisioning for a new client means configuring a new PaaS environment, adding an instance and deploying
  • IaaS with multi-tenancy – use an IaaS offering (think Amazon EC2 or Windows Azure Virtual Machines) to run a stack of Virtual Machines configured to run your platform of choice, hosting a clustered multi-tenant application. Provisioning is zero-cost after initial setup
  • IaaS with one stack per client – use an IaaS offering (think Amazon EC2 or Windows Azure Virtual Machines) to run one stack of Virtual Machines configured to run your platform of choice, hosting a clustered (or not) regularly developed application for each client. Provisioning means creating stacks, adding virtual machines, installing OS, DB, platform and deploying application

For convenience I also added a category called UGLY, just to highlight what I consider to be the worst point of each option.

SaaS

Over PaaS with multi-tenancy

Over PaaS with one environment per client

Over IaaS with multi-tenancy

Over IaaS with one stack per client

GOOD

  • Application must comply with platform constraints
  • One version for all clients
  • Single location deployment
  • Automatic scaling
  • Simpler, faster provisioning
  • Simple monitoring at the application level
  • Looks cheaper, pay by CPU-time and resource usage
  • Application must comply with platform constraints
  • Allows for multiple versions at the same time for different clients (even deep customization)
  • Automatic scaling
  • Simpler provisioning
  • More control in choosing platform and technologies
  • One version for all clients
  • Can use farm-deployment for single location deployment
  • Simpler, faster provisioning
  • Simple monitoring at the application level
  • More control in choosing platform and technologies
  • Allows for multiple versions at the same time for different clients

BAD

  • Application must comply with platform constraints
  • One version for all clients
  • Application has to know about multi-tenancy – it should be designed to support it
  • Application must comply with platform constraints
  • Must have tight configuration management to handle different versions for different clients
  • Provisioning may be slower, depending on instance creation speed
  • Complex monitoring
  • Must handle horizontal and vertical scaling
  • One version for all clients
  • Increase in deployment architecture complexity
  • Must handle clustering and state
  • Application has to know about multi-tenancy – it should be designed to support it
  • Must handle horizontal and vertical scaling
  • Must have tight configuration management to handle different versions for different clients
  • Must handle different deployments and deployment scenarios
  • Complex monitoring

UGLY

  • Platform may enforce application architecture and technologies
  • Platform may enforce application architecture and technologies
  • Must manage operating system, storage and database configurations
  • Must manage multiple, possibly different operating systems, storage and database configurations

 

Some points are good and bad simultaneously. Examples:

  • Application must comply with platform constraints – which means that you can’t always do what you want to do, producing
    • GOOD – sometimes enforces good coding and resource-usage conventions
    • BAD – more effort in developing exotic things
  • One version for all clients – there can only be one version in production
    • GOOD – less versions to worry about, less things to manage
    • BAD – you may upgrade users that want the old version or you may have some users that want deep customizations and that are willing to pay for them

The overall conclusion is that the higher you go, the less you have to manage, the cheaper it gets.

For another good read you can check out the PaaS vs IaaS comparison on http://www.engineyard.com/paas-vs-iaas.

Written by Bogdan

October 29, 2012 at 11:35 PM

addendum: learn to answer later

leave a comment »

I refuse to answer that question on the grounds that I don’t know the answer.

- Douglas Adams

When asking somebody a question, assuming that they are even listening, you can expect them to either:

  • know the answer
  • don’t know what you’re talking about

If they know the answer they’re going to give it to you right away, and that’s fine… because they know what they’re talking about.

If they’re in the clueless gang, they’re either going to give you a “sort of correct in their own opinion” answer or they’re going to recognize the fact that they don’t know, honestly. I just hate it when people give me “their correct answer”… and I’m not the only one.

Most people don’t realize that the choice they make in that exact instance is a make it or break it deal, especially if it’s a first impression.

Appearances do matter, and somebody jumping directly to conclusions even if their knowledge of the situation or problem at hand is close to nothing will automatically get tagged as either “clueless” or just plain stupid.

On the other hand, being thorough and wanting to give the correct answer (not the first one) is highly prized, because… it’s more productive to work on facts rather than fantasy.

So, if somebody asks you a question that you should be able to answer but you can’t:

  • honestly say that you can’t answer at this time and that you’ll get back to them in a very short time
  • find the right answer and validate it – if you’re going to take your time, make sure that you are right
  • get back to them as quickly as possible - never over-promise and under-deliver

This is really important for anything related to costs (such as licensing issues and estimates), compatibility or interoperability questions (most of them are tricky anyway) and client-facing issue.

Ensuring that your answers are correct and that you had time to think things through will help you do your job better and I’ve never seen a manager say “I don’t want the right answer in 10 minutes, I want the wrong one now!”.

So don’t just get things done, start getting things right.

Written by Bogdan

October 23, 2012 at 11:30 PM

Learn to say no, your work deserves it

leave a comment »

I know it’s really difficult to say no and that you just accept things because of your inner fear of conflict and lost opportunities. You just have to get over it and just learn once and for all how to say no! You’ll do yourself a favor… and everybody else.

The next time your boss (or anybody) is trying to push down an extra task on you just say “I’m sorry but I can’t do this right now.” in a straight and non-defensive manner. In time, learning how to say no will let you focus on the tasks at hand and it will change the habits of the people you work with – they’ll be more picky about the tasks they delegate to you.

If they ask for an explanation just say the truth – that your schedule is already full and that another task will just lower the quality of your work along with actually delaying your already existing tasks.

If they don’t understand “loss of quality” and “delay”… well, it’s their problem.

Quality is a rare commodity these days and we have to fight for it, even if it may hurt some feelings or even if it pisses some people off. In the end, quality always wins.

Written by Bogdan

October 15, 2012 at 10:31 PM

Follow

Get every new post delivered to your Inbox.

Join 260 other followers