Category Archives: Psychology

The 4 Levels of Freedom For Software Developers

For quite some time now I’ve been putting together, in my mind, what I think are the four distinct levels that software developers can go through in trying to gain their “freedom.”

For most of my software development career, when I worked for a company, as an employee, I had the dream of someday being free. I wanted to be able to work for myself. To me, that was the ultimate freedom.

freedom The 4 Levels of Freedom For Software Developers

But, being naive, as I was, I didn’t realize that there were actually different levels of “working for yourself.” I just assumed that if you were self-employed, you were self-employed. It turns out most software developers I have talked to about this topic have the same views I did—before I knew better.

I’ve written in the past about how to quit your job, but this post is a bit different. This post is not really about how to quit your job, but the different levels of self-employment you can attain, after you do so.

The four levels

The four levels I am about to describe are based on the level of freedom you experience in your work; they have nothing to do with skill level. But, generally we progress up these levels as we seek to, and hopefully succeed, in gaining more freedom.  So, most software developers start at level one, and the first time they become self-employed, it is usually at level three—although it is possible to skip straight to three.

Here is a quick definition of the levels (I’ll cover them each in detail next.)

  1. Employed – you work for someone else
  2. Freelancer – you are your boss, but you work for many someone elses
  3. Product creator – you are your own boss, but your customers determine what you work on
  4. Financially free – you work on what you want when you want; you don’t need to make money

I started my career at level one and bounced back and forth between level two and level one for quite awhile before I finally broke through to level three. I’m currently working on reaching level four—although, I’ve found that it is easy to stay at level three even though you could move to four.

Along the way, I’ve found that at each level I was at, I assumed I would feel completely free when I reached the level above. But, each time I turned out to be wrong. While each level afforded me more general freedom, each level also seemed to not be what I imagined it would be.

Level one: employed

boss The 4 Levels of Freedom For Software Developers

Like I said, most software developers start out at this level. To be honest, most software developers stay at this level—and don’t get me wrong, there is nothing wrong with staying there—so long as you are happy.

At this level, you don’t have much freedom at all, because you basically have to work on what you are told to work on, you have to work when you are told and you are typically tied to a physical location. (Throughout this post, you’ll see references to these three degrees of freedom.)

Working for someone else isn’t all that bad. You can have a really good job that pays really well, but in most cases you are trading some amount of security for a certain amount of bondage. You are getting a stable paycheck on a regular interval, but at the cost of a large portion of your freedom.

Now, that doesn’t mean that you can’t have various levels of traditional employment. I think there are mini-levels of freedom that exist even when you are employed by someone else. For example, you are likely to be afforded more freedom about when you start and leave work as you move up and become more senior at a job. You are also likely to be given a bit more autonomy over what you do—although Agile methodologies may have moved us back in that regard.

You might even find freedom from location if you are able to find a job that allows you to telecommute. In my quest for more freedom, I actually made a trade of a considerable amount of pay in order to accept a job where I would have the freedom of working from home. I erroneously imagined that working from home would be the ultimate freedom and that I would be content working for someone else the rest of my career, so long as I could do it from home. (Don’t get me wrong, working from home has its perks, but it also has its disadvantages as well. When I worked from home, I felt more obligated to get more work done to prove that I wasn’t just goofing off. I also felt that my work was never done.)

Now, like I said before, more people will stay at level one and perhaps move around, gaining more freedom through things like autonomy and a flexible working schedule, but there are definite caps on freedom at this level. No one is going to pay you to do what you want and tell you that you can disappear whenever you want to. You are also going to have your income capped. You can only make so much money working for someone else and that amount is mostly fixed ahead of time.

Level two: freelancer

clients The 4 Levels of Freedom For Software Developers

So, this is the only other level that I had really imagined existed for a software developer, for most of my career. I remember thinking about how wonderful it would be to work on my own projects with my own clients. I imagined that as a freelancer I could bid on government contracts and spend a couple of years doing a contract before moving on to the next. I also imagined an alternative where I worked for many different clients, working on different jobs at different times—all from the comfort of my PJs.

When most software developers talk about quitting their jobs and becoming self-employed, I think this is what they imagine. They think, I like I did, that this is the ultimate level of freedom.

It didn’t take me very long as a freelancer to realize that there really wasn’t much more freedom, working as a freelancer, than there was working for someone else. First of all, if you have just one big client, like most starting freelancers do, you are basically in a similar situation as what you are when you are employed—the big difference is that now you can’t bill for those hours you were goofing off. You will likely have more freedom about your working hours and days, but you’ll be confined to the project your client has hired you to work on and you might even have to come into their office to do the work.

This doesn’t mean that you don’t have more freedom though, it is just a different kind. If you have multiple clients, you have more control over your life and what you work on. You can set your own rate, you can set your own hours and you can potentially turn down work that you don’t want to do—although, in reality, you probably won’t be turning down anything—especially if you are just starting out.

Don’t get me wrong, it is nice to have your own company and to be able to bill your clients, instead of being compelled to work for one boss who has ultimate control over your life, but freelancing is a lot of work and on a daily basis it may be difficult to actually feel more free than you would working for someone else.

Given the choice of just doing freelancing work or working for someone else, I’d rather just take the steady paycheck. I wouldn’t have said this five years ago, but I know now that freelancing is difficult and stressful. I really wouldn’t go down this road unless you know this is what you want to do or you are using it as a stepping stone to get to somewhere else.

From a pay perspective, a freelancer can make a lot more money than most employees. I currently do freelance work and I don’t accept any work for less than $300 an hour. Now, I didn’t start at that rate—when I first started out $100 an hour was an incredible rate—but, I eventually worked my way up to it. (If you want to find out how, check out my How to Market Yourself as a Software Developer package.) The big thing though, is that your pay is not capped. The more you charge and the more hours you work, the more you make. You are only limited by the limits of those two things combined.

Level three: product creator

product The 4 Levels of Freedom For Software Developers

This level is where things get interesting. When I was mostly doing freelancing, I realized that my key mistake was not in working for someone else, but in trading dollars for hours. I realized that as a freelancer my life was not as beautiful as I had imagined it. I was not really free, because if I wasn’t working I wasn’t getting paid.

I actually ended up going back to fulltime employment in order to rethink my strategy. The more and more I thought about it, the more I realized that in order to really gain the kind of freedom I wanted, I would need to create some kind of product that I could sell or some kind of service that would generate me income all the time without me having to work all the time.

There are many ways to reach this level, but perhaps the most common is to build some kind of software or software as a service (SASS) that generates income for you. You can then make money from selling that product and you get to work on that product when and how you see fit.

You can also reach this level by selling digital products of some sort. I was able to reach this level through a combination of this blog, mobile apps I built, creating royalty generating courses for Pluralsight and my own How to Market Yourself as a Software Developer package. (Yes, I have plugged it twice now, but hey this is my blog—and this is how I make money.)

You have quite a bit of freedom at this level. You no longer have any real boss. There is no pointy-haired boss telling you what to work on and you don’t have clients telling you what projects to work on either. You most likely can work from anywhere you want and whenever you want. You can even disappear for months at a time—so long as you figure out a way to handle support.

Now, that doesn’t mean that everything is peaches and roses at this level either. For one thing, I imagined that if I was creating products, that I would get to work on exactly what I wanted to work on. This is far from the truth. I have a large degree of control over what I choose to work on and create, but because I am bound by the need to make money, I have to give a large portion of that control over to the market. I have to build what my customers will pay for.

This might not seem like a big deal, but it is. I’ve always had the dream of writing code and working on my own projects. I dreamed that being a product creator and making money from my own products would give me that freedom. To some degree it does, but I also have to pay careful attention to what my audience and customers want and I have to put my primary focus on building those things.

This level is also quite stressful, because everything depends on you. You have to be successful to get paid. When you are an employee, all you have to do is show up. When you are a freelancer, you just have to get clients and do the work—you get paid for the work you put in, not the results. When you are a product creator, you might spend three months working on something and not make a dime. No one cares how much work you did, only results count.

As far as income potential, there is no cap here. You might struggle to just make enough to live, but if you are successful, there is no limit to how much you could earn, since you are not bound by time. At this level you are no longer trading hours for dollars.

To me, it isn’t worth striving for level two, it is better to just work for someone else until you can reach level three, because this level of freedom is one that actually makes a big difference in your life. You still may not be able to work on just what you want to work on, but at least at this point—once you are successful—all the other areas of your life start to become much more free.

Level four: financially free

financial freedom The 4 Levels of Freedom For Software Developers

I couldn’t come up with a good name for this level, but this is the level where you no longer have to worry about making money. One thing I noticed when I finally reached level three was that a large portion of what was holding me back from potentially doing exactly what I wanted to do was the need to generate income.

Now, it’s true that you can work on what you want to work on and make money doing it, but often the need to generate income tends to influence what you work on and how you work on it. For example, I’d really like to create a video game. I’ve always dreamed of doing a large game development project. But, I know it isn’t likely to be profitable. As long as I am worrying about income, my freedom is going to be limited to some degree. If I don’t have passive income coming in that is more than enough to sustain me, I can’t just quit doing the projects that do make me money and start writing code for a video game—well, I could, but it wouldn’t be smart, and I’d feel pretty guilty about it.

So, in my opinion, the highest form of freedom a software developer can achieve is when they are financially free. What do I mean by financially free though? It basically means that you don’t have to worry about cash. Perhaps you sold your startup for several millions of dollars or you have passive income coming in from real estate or other investments that more than provides for your daily living needs. (For some good information on how to do this or how this might work, I recommend starting with the book “Rich Dad Poor Dad”.)

At this level of freedom, you can basically do what you want. You can create software that interests you, because it interests you—you aren’t worried about profitability. Want to create an Android app, just because, go ahead. Want to learn a new programming language, because you think it would be fun—go for it.

This has always been the level of freedom I have secretly wanted. I never wanted to sit back and not do anything, but I’ve always wanted to work on what interested me and only what interested me. Every other level that I thought would have this freedom, I realized didn’t. I realized that there was always something else that was controlling what I worked on, be it my boss, my clients or my customers.

Now, this doesn’t mean that you can’t still make money from your projects. In fact, paradoxically, I believe, if you can get to this stage, you have the potential to make the most money. Once you start working on what you want to work on, you are more likely to put much more passionate work into it and it is very likely that it will be of high value. This is where programming becomes more like art. I don’t have any proof of this, of course, but I suspect that when you don’t care about making money, because you are just doing what you love, that is when you make the most of it.

Don’t get me wrong, you might be able to focus on doing what you love, even if you aren’t making any money. I know plenty of starving artists do—or at least they tell themselves they do—but, I can’t do it. I’ve tried it, but I always feel guilty and stressed about the fact that what I am working on isn’t profitable. In my opinion, you really have to be financially free to experience true creative freedom.

I’m actually working on getting to this level. Technically, I could say I am there now, but I am still influenced greatly by profitability. Although, now, I am not choosing my projects solely on the criteria of what will make the most amount of money. I am turning down more and more projects and opportunities that don’t align with what I want to do as I am trying to transition to working on only what interests me as my passive income is increasing.

What can you gather from all this?

Well, the biggest thing is that freedom has different levels and that, perhaps, you don’t want to be a freelancer, after all. I think many software developers assume working for themselves by freelancing will give them the ultimate freedom. They don’t realize that they’ll only be able to work on exactly what they want to work on when they are actually financially free.

So, my advice to you is that if you want to have full creative control over your life and what you work on, work on becoming financially free. If you want a high degree of autonomy in most of the areas of your life, you should try to develop and sell products. If you are happy just being your own boss, even if you have to essentially take orders from clients, freelancing might be the road for you. And, if all of this just seems like too high of a price to pay, you might want to just stay where you are at and keep collecting your weekly paychecks—nothing wrong with that.

If you like this post and you’d like to read more posts about topics like these, sign up here to join over 5,000 other Simple Programmers and become part of the Simple Programmer community.

You Never Really Learn Something Until You Teach It

As software developers we spend a large amount of time learning. There is always a new framework or technology to learn. It can seem impossible to keep up with everything when there is something new every day. So, it should be no surprise to you that learning quickly and gaining a deeper understanding of what you learn is very important.

And that is exactly why–if you are not doing so already–you need to incorporate teaching into your learning.

Why teaching is such an effective learning tool

When we learn something, most of us learn it in bits and pieces. Typically, if you read a book, you’ll find the material in that book organized in a sensible way. The same goes for others mediums like video or online courses. But, unfortunately, the material doesn’t go into your head in the same way.

teaching You Never Really Learn Something Until You Teach It

What happens instead is that you absorb information in jumbled bits and pieces. You learn something, but don’t completely “get it” until you learn something else later on. The earlier topic becomes more clear, but the way that data is structured in your mind is not very well organized–regardless of how organized the source of that information was.

Even now, as I write this blog post, I am struggling with taking the jumbled mess of information I have in my head about how teaching helps you learn and figuring out how to present it in an organized way. I know what I want to say, but I don’t yet know how to say it. Only the process of putting my thoughts on paper will force me to reorganize them; to sort them out and make sense of them.

When you try to teach something to someone else, you have to go through this process in your own mind. You have to take that mess of data, sort it out, repackage it and organize it in a way that someone else can understand. This process forces you to reorganize the way that data is stored in your own head.

Also, as part of this process, you’ll inevitably find gaps in your own understanding of whatever subject you are trying to teach. When we learn something we have a tendency to gloss over many things we think we understand. You might be able to solve a math problem in a mechanical way, and the steps you use to solve the math problem might be sufficient for what you are trying to do, but just knowing how to solve a problem doesn’t mean you understand how to solve a problem. Knowledge is temporary. It is easily lost. Understanding is much more permanent. It is rare that we forget something we understand thoroughly.

When we are trying to explain something to someone else, we are forced to ask ourselves the most important question in leaning… in gaining true understanding… “why.” When we have to answer the question “why,” superficial understanding won’t do. We have to know something deeply in order to not just say how, but why.

That means we have to explore a subject deeply ourselves. Sometimes this involves just sitting and thinking about it clearly before you try to explain it to someone else. Sometimes just the act of writing, speaking or drawing something causes you to make connections you didn’t make before, instantly deepening your knowledge. (Ever had one of those moments when you explained something to someone else and you suddenly realized that before you tried to explain it you didn’t really understand it yourself, but now you magically do?) And, sometimes, you have to go back to the drawing board and do more research to fill in those gaps in your own knowledge you just uncovered when you tried to explain it to someone else.

Becoming a teacher

So, you perhaps you agree with me so far, but you’ve got one problem–you’re not a teacher. Well, I have good news for you. We are all teachers. Teaching doesn’t have to be some formal thing where you have books and a classroom. Teaching is simply repackaging information in a way that someone else can understand. The most effective teaching takes place when you can explain something to someone in terms of something else they already understand.

 

(Want a great book on the subject that might make your brain hurt? Surfaces and Essences: Analogy as the Fuel and Fire of Thinking. An excellent book by Douglas Hofstadter, author of Godel, Escher, Bach: An Eternal Golden Braid. Both books are extremely difficult reads, but very rewarding.)

becoming a teacher You Never Really Learn Something Until You Teach It

As human beings, we do this all the time. Whenever we communicate with someone else and tell them about something we learned or explain how to do something, we are teaching. Of course, the more you do it, the better you get at it, and adding a little more formalization to your practice doesn’t hurt, but at heart, you–yes, you–are a teacher.

One of the best ways to start teaching–that may even benefit your career–is to start a blog. Many developers I talk to assume that they have to already be experts at something in order to blog about it. The truth is, you only have to be one step ahead of someone for them to learn from you. So, don’t be afraid to blog about what you are learning as you are learning it. There will always be someone out there who could benefit from your knowledge–even if you consider yourself a beginner.

And don’t worry about blogging for someone else–at least not at first. Just blog for yourself. The act of taking your thoughts and putting them into words will gain you the benefits of increasing your own understanding and reorganizing thoughts in your mind.

I won’t pretend the process isn’t painful. When you first start writing, it doesn’t usually come easily. But, don’t worry too much about quality. Worry about communicating your ideas. With time, you’ll eventually get better and you’ll find the process of converting the ideas in your head to words becomes easier and easier.

Of course, creating a blog isn’t the only way to start teaching. You can simply have a conversation with a friend, a coworker, or even your spouse about what you are learning. Just make sure you express what you are learning externally in one form or another if you really want to gain a deep understanding of the subject.

You can also record videos or screencasts, speak on a subject or even give a presentation at work. Whatever you do, make sure that teaching is part of your learning process.

For more posts like this and some content I only deliver via email, sign up here.

 

 

The Code Is NOT Greener On The Other Side Of The Cubicle

One of the worst traps we can fall into as software developers is discontentment.

It’s really easy to become discontented with our current situation and to want to seek greener pastures elsewhere. I’m not saying that there aren’t necessarily better situations you could seek out, but finding a better job may not be your problem.

green field The Code Is NOT Greener On The Other Side Of The Cubicle

Learn to be content with what you have first…

It may seem strange, coming from me, especially when I actually sell a product to help programmers find better jobs, that I am telling you to be content with your current job. But, I’ve found, in life, that it is impossible to be happy with something new or better until you have learned to be happy with what you already have.

It almost seems paradoxical. If you can be happy with your current job or situation, why would you seek out a new one? You are obviously discontent with your current situation, because a new situation would be better, right?

In order to answer this question, we have to go back a bit into the past and look at where we are now from the perspective of where we were.

Chances are the job you have now was a job that you were excited and enthusiastic about when you first got it. Chances are you left some other situation that was worse than the situation you are in now, searching for greener pastures.

I made many transitions in my early career, from company to company, from job to job, always trying to find a better opportunity. But, each time I drove my little dune buggy over the next sand dune, I found the oasis I had seen from afar was a mirage.

I spent a good deal of my career never really being happy with my current situation and always looking for a better opportunity that would finally give me the rewarding, fulling, job that I desired.

I always had some reason why my current job was not good enough.

Perhaps it was the technology I was working with–I want to use that latest and greatest framework, not this crufty crap.

Sometimes it was the code base itself–if only I could work on a greenfield project, then I wouldn’t have to maintain this stupid legacy code.

Once or twice it was the coworkers–these idiots are doing things all wrong. I need to work on a team that appreciates writing good code.

The list goes on and on and on…

If only I could work from home…

If only I could use ASP.NET MVC instead of Web Forms…

If only I could follow a Kanban process…

Even when I started working for myself, I started coming up with my own “if onlys.” No matter how good our present situation is, we can easily become accustomed to it and take it for granted.

If you can’t ever be content with your present situation or job, you’ll just find that when you find something “better”, you are eventually discontent with that as well. It is really easy to trick yourself into thinking that a parallel or downward movement is an upward one, because you’ve grown so discontent with your current situation.

I’m not saying don’t find a better job or don’t improve your situation, but I am saying that before you do, find a way to be content with what you already have so that you don’t ruin the next endeavor you set out on.

How to be content

The first step towards contentment is realizing that being content is a choice–just like happiness is. Your present situation doesn’t determine your contentment–you do.

Contentment comes from a positive mind that is thankful for what it has. If you want to start being more content with what you have, start “counting your blessings.”

happy man The Code Is NOT Greener On The Other Side Of The Cubicle

I know this sounds a bit silly and trite, but truly recognizing what you have that is already good and being sincerely thankful for it, goes a long way towards cranking that internal happiness gear a few rotations.

Happiness and contentment are very relative things. You are happy with your car until you see your neighbor buy a new one. You are happy with your current salary, until your brother tells you about the new job he got where he is making twice what you make.

If you are constantly looking at outward comparisons to define the worth of what you have, the value of what you have will decrease in your mind. Instead, focus on what is good about your present situation.

Chances are, if you are reading this blog post, you are already in a better situation than more than 90% of the world. If you have access to a computer and an internet connection, you are “blessed” compared to the millions of people who are living well below what we would consider poverty and working much harder for a living than you are.

There are hundreds of things to be thankful for. You just have to be willing to start recognizing them and truly appreciate them. If you want to be a happier, more content person, make it a daily habit to go over everything in your life that you are thankful for each and every day. Not only will you be happier, but so will the people around you how have to deal with you each day.

(If you are looking for a good book to help you come up with things to be thankful for, check out 14,000 things to be happy about.)

Another way to be content is to work hard

One of the most rewarding things in life is a job well done.

Your present job might not be the one you want. You may be working on a completely crappy code-base. You may not be using the technologies or frameworks that you are excited about. But, if you put your head down and start working hard at your current job, you’ll find it to be much more rewarding.

I’ve found in life that the biggest satisfaction is not what you do, but how you do it. Painting a fence can be just as rewarding as building a skyscraper, if you work hard at it and put your full energies into the task.

If you aren’t happy with your present job, try shutting down Facebook, closing down Twitter and focus on doing the best possible job you can do, each and every day.

Sure, you can still look for a better job. Sure, you can still dream of starting your own consulting business or getting out there on your own. But, in the meantime, you might as well be content with the situation you are in now. Then, when you are ready, and the next opportunity presents itself, you’ll have the ability to truly appreciate it.

The grass may look greener on the other side of the cubical wall, but that doesn’t mean it is. Be content with what you have, but always strive for more and you’ll live a much happier life and make fewer stupid mistakes.

If you liked this post and want to hear more about topics like this one, sign up here to join the Simple Programmer community, and I’ll send you a weekly email and some exclusive content that I only share with the Simple Programmer community.

What to Do When You Don’t Feel Like Writing and You Have Nothing to Say

I spend a lot of time doing two things: blogging and telling other developers the benefits of doing things like starting their own blog. (Occasionally I squeeze in a little bit of time to code as well. And my wife says I spend too much time answering emails and checking my phone—she wanted me to add that to this post.)

So, I can tell you that one of the major pains I am well acquainted with is that of writing when you don’t feel like writing or you just don’t have anything to say.

I experience this frustration myself—heck I am experiencing it right now. I decided to write this blog post because I couldn’t come up with anything else to write about. And, to top it off, I don’t feel like writing either.

tired thumb What to Do When You Dont Feel Like Writing and You Have Nothing to Say

But, let me jump ahead and give you a little secret: by the time I’m halfway through this post, not only will I know what to write about, but I will feel like writing.

I know this from experience, and it is part of what keeps me going on days like these.

Writing is difficult

Writing isn’t an easy thing to do.

It is hard to spill your brains onto a blank piece of paper and not make it look like spaghetti.

It’s difficult to constantly come up with new ideas, week after week.

But, by far, the hardest part of writing is just sitting down in front of the keyboard and typing. Even now, as I am typing these very words, a million other things are vying for my attention, calling me away from the task at hand.

Most software developers who start a blog, end up abandoning that blog, because they never learned how to grit their teeth, glue their ass to a seat and write.

Sure, it starts out fun. When you first throw up your blog on the internet, you are full of ideas. You could write a blog post each and every day—not because you are more creative when you first start, but because you are more motivated. The whole process is still very new and enjoyable.

But, fast forward a couple of months—or a couple of weeks for those of us with ADHD—and that shiny-newness of blogging wears off. That little fairy that was sitting on you shoulder telling you what to write is gone—it’s just you and the keyboard.

This is exactly when you have to search deep down inside of yourself and find the grit beneath your soft cushy exterior. You have to decide—that’s right, make a decision—that every week you are going to write a blog post and nothing is going to stop you from doing it.

You’ll want to start over and give up

Even as I write this very sentence, I want to go back to the beginning of my post and delete everything. It’s no good. My thoughts are scattered; my analogies are crap; no one cares about what I have to say on this subject.paper thumb What to Do When You Dont Feel Like Writing and You Have Nothing to Say

I’ve been writing blog posts just about every single week for over 4 years, and I am still smacked in the face with the stick of doubt just about every time I sit down to write. So, I can tell you from experience, that part doesn’t get any easier.

But, you can’t let that stop you. Your face might be swollen, some of your teeth might be missing, you might have to squint to see out of one of your eyes, but as soon as you care that what you are writing is no good, you’ll stop writing—permanently. You’ll fall right off the wagon.

By the time you’ve gotten this far into my own essay, it doesn’t matter if it is good. I’ve got your attention already. I can’t embarrass myself any further, because if you didn’t at least sort-of like what I have said so far, you wouldn’t be reading this sentence to begin with.

I’ve come to the realization that you can’t always hit homeruns. Sometimes, you write crap. Sometimes, what you think is your best blog post turns out to be so terrible that no one makes it past the first paragraph.

But, sometimes what you think is terrible, turns out to be the most popular thing you’ve ever written.

The point is, you can’t know until you hit that publish button and even if you could, it doesn’t matter, because you can’t write for other people, you’ve got to write for you.

Not because you are writing something that you’ll someday read later and say “oh, yes, that is how I solved that problem in the past”—although, that does happen from time to time. Instead, you have to write because you made a commitment to yourself and the commitment wasn’t to string marvelous words into sentence on paper, but instead just to write—it doesn’t have to be any good.

The secret is to keep going

I’m sure you’ve noticed by now that I haven’t really told you what to do when you don’t feel like writing and you have nothing to say, so, here it is: write.

Yep, that’s it. It’s that simple.

Take some duct tape, put it over your mouth, shut up, stop whining, pull up a chair, sit down at the keyboard and start moving your fingers.

You can’t sit there and type and have nothing to say. Now, what you have to say, you might think isn’t any good—and it may be utter crap—but there is no reason that has to stop you from writing. Just do it.

There are a million ideas bouncing in your head, but some of those ideas will only come to the surface when you have decided you are going to sit down and do the work.

Don’t believe me?

Try this exercise on. Right now I want you to close your eyes, and think about nothing. That’s right, think about absolutely nothing—I’ll wait.

How’d that go for you? Were you able to think about nothing?

So, don’t tell me you don’t have something to write about. Of course you do. Your problem—and my problem—isn’t writing, it’s typing it out.

P.S. – By the time this post goes live, I’ll be in the middle of launching my How To Market Yourself as a Software Developer program. If you liked this post, go check out the program. It has a whole video course on creating your own developer blog and making it successful.

Why You Are “Stuck” In Your Career

For software developers, there is no guidebook that tells you how to advance from one stage of your career to the next.

Many programmers start out quickly in their careers, advancing up the ranks, only to find that they have hit the proverbial glass ceiling which caps their earnings and gives them the choice to either jump tracks to the management career plan or stay stagnant where they are.

It doesn’t have to be this way though.

stuck Why You Are Stuck In Your Career

In this article, I’m going to tell you how you can shatter that glass ceiling and keep on advancing.

Why the glass is there

Before we talk about how to break the glass, let’s talk about why the glass is there in the first place.

The big reason most software developers hit an imaginary ceiling on their income and career advancement is because they stay with the pack.

Most people have what I call the herd mentality.  It means that you stick with the herd and you value yourself based on where you fit in the herd.  If you are at the front of the herd, you are doing good.  If you are at the back of the herd, things aren’t looking so good for you—you are in danger of becoming a hungry lion’s next meal.

The developers at the front of the herd make more money and have nicer offices, and the ones at the back make less and live in tiny cubicles, but they are all part of the herd.  So, even though there is a difference in pay from the junior developer to the senior one, there isn’t much of a difference in pay from one senior developer to another one, even if one of the senior developers is more valuable and has more advanced skills.

Now, there are a few developer animals out there that break away from the herd.  These developers have figured out that they don’t have to try and compete to be at the front of the pack, instead they can run on their own where they don’t have to worry about their position in the pack, because they can just outrun it.

This is, of course, easier said than done.  In fact, I have quite a bit to say about how to go about doing this and what exactly this means, but let’s not get into that just yet.

First, I want to break up this example a bit more and apply it to real life.

As software developers, we are acutely aware of our position within the pecking order.  We know which developers are higher up than us and which ones are lower.  We have titles at our jobs which help us to know our place.

But, it is important to remember that the rest of the world has no idea about which developers have greater skill and can do a better job, and for the most part, they don’t care—they just see a pack.  They see a pack with some developers at the front and other developers at the back.

When an employer hires you for a job, they just want to know where you are in the pack.  Are you at the front?  The back?  The middle?  They pay you accordingly based on your ranking within the pack.

If you aren’t explicitly standing out far beyond the pack, you are going to be grouped right in with the pack and paid accordingly.  And once you make it to the front of the pack, you’ve got nowhere to go in their eyes—you’re already the best.

glass ceiling Why You Are Stuck In Your Career

So, the glass ceiling isn’t there because someone mandated that software developers shall only make so much money and live in 5 by 5 cubicles.  Instead, the glass ceiling is there, because unless you are doing something extreme enough to differentiate yourself from the pack completely, you are part of the pack and the pack is always going to stick together. That means that the average salary of software developers will be used to determine what the developers at the front of the pack will be paid, as well as what the developers at the back of the pack will be paid.

Breaking away from the pack

So, if you want to increase your value as a software developer, your goal should be to break away from the pack.  But, how do you do it?

breaking away 1 Why You Are Stuck In Your Career

Let’s start by looking at an example outside of the software development world—the restaurant business.

Suppose you are a cook.  There are quite a few cooks in the world.  In fact, each restaurant in the world, whether it be a fast food joint or an elegant upscale restaurant, needs at least one cook of some sort.

Cooks run in packs.  There are low level cooks who don’t make much money at all.  Some of these cooks work at McDonalds or another fast food restaurant.  Some of these cooks work at more reputable places, and we typically call them chefs instead.

But, you’ll probably find that most high level cooks also cap out around the same level.  That is except for a few that end up having their own television shows, write books and make millions.

The same is true for musicians.  There are quite a few musicians who are really good and talented, but only a small number of them break away from the pack to become rock stars.  The rest are relegated to the pack.

If I asked you why you honestly think Gordon Ramsey, or Rachael Ray, or Wolfgang Puck make so much more money than other chefs, what would you say?

You might be first tempted to reply that it is because they are so much better than other chefs, but we both know that isn’t true.  Sure, they are probably in the top tiers of skill level, but the real reason these celebrity chefs make so much money is precisely because they are celebrities.

They are primarily being paid for their names.  There are hundreds of chefs in the world at a similar skill level, but those hundreds of chefs are relatively unknown.  The same applies for musical talent and even software development.

Now, I’m not saying you need to become a celebrity to break away from the pack and advance your career as a software developer, but what you do need to learn how to do, which most celebrities and famous people already know how to do, is to market yourself.

Marketing yourself

Unfortunately, there isn’t a guidebook for software developers on marketing themselves either.

But, that is precisely why I wrote one.

Well, more than just wrote one.  I put together a complete package on marketing yourself as a software developer.

I’ve been in the industry a pretty long time and I’ve made my share of mistakes.  I got stuck for a pretty long time at my own personal glass ceiling, until I started to notice how the developers I would read articles from and see speaking in front of thousands at conferences, had figured out a way to break away from the herd.

I talked to many of these ultra-successful developers, (I won’t use the term rock star here, since it is so overused,) and I found out how they were doing it.

I started applying what I was learning and discovering to my own career, and it didn’t take long before I was able to really break through my own glass ceiling and see that there actually was no limit to the earning potential of a software developer who knows how to market him or herself.

Since then, I’ve been hired for dream projects at my own price.  I’ve been on numerous podcasts and publications.  I’ve created a successful and popular blog that gets over 100,000 visits a month, and I’ve gotten countless other opportunities.

Now I want to share the information with you.

I’ve put together the guidebook that I said didn’t exist.  The one that will help you break away from the herd and put your head right through that glass ceiling.

Only it will be more than just a simple guidebook.  I’ve put together a complete package which includes two complete video courses; several eBooks on topics like how to market yourself, social networks, professional resume advice, networking; and even some video interviews with top developers who have already broken away from the herd themselves and will share their secrets with you.

combo image 55 Why You Are Stuck In Your Career

This isn’t a scam or some marketing mumbo-jumbo, it is real tried and tested career advice from myself and other software developers who have figured out how to make their names stand out.  The fact that you are reading this post proves that what I am offering works.

If you sign up here, I’ll send you a special discount code that will give you a nice hefty discount on the complete package when it goes live on March 27th.

I Hate My Job, I Wish I Could Work From Anywhere In The World

After talking with many software developers from all around the world, I’ve come to a pretty startling conclusion: most developers hate their jobs.

I guess it might not be all that startling to you—especially if you are one of them—but, to me, it was kind of a shocker.

I’ve definitely had some jobs I’ve hated, in the past—one in particular. I won’t name names, but I do recall one job I had where my boss was a complete a-hole. I was supposed to be a “programmer,” but he had me running all around a certain big city associated with an apple, doing tech support.

Now, I don’t mind doing tech support—when I am 16 and broke as $#!^.—but, as a kick-ass C++ programmer who just saved the company hundreds of thousands of dollars by reverse engineering some propriety binary format and writing a C++ program to interpret the data, I felt my talents were being… underutilized.

On top of that, I had to wear a tie to the office every day and he monitored—and questioned—my every move. It was like living in prison, only I didn’t get to go out to the yard and lift weights.

despair I Hate My Job, I Wish I Could Work From Anywhere In The World

Anyway, when the day came that I finally got laid off from that job, I was ecstatic. It was like I was just told that I had won the lottery or my dead dog had come back to life. (Ok, I’m not so sure about the second one, but you get my point.)

What about you? What do you dislike about your current job?

Perhaps you aren’t quite in the same position I was, but you just have some things that annoy you about your present circumstances—or, maybe you do really wish your boss would die in a horrific car accident—either way, I’m going to take a shot at guessing what’s bothering you.

Your work is not interesting—you want to do cool stuff

Let me guess. When you interviewed for the job, they promised you that you’d get to use the latest version of ASP.NET MVC and do test driven development. The only problem is when you actually started your first day of work, you ended up maintaining some legacy VB6 application that you deploy right into production every night?

Ok, so it might not be that bad, but there is a good chance that if you are unhappy with your current job it is because you are doing work that you don’t find interesting. You want to work with the latest technologies. You want to use that new-fangled Angular.js framework and run it on Node—I know, I get you. I’m with you on that one.

Your boss is a jerk

Sometimes the perfect job is ruined just by having a bad boss. What is that principle that causes a good engineer to get promoted up to an incompetent manager? Oh yeah, the Peter Principle. Let’s just pretend, the current douchebag that is barking orders at you and micromanaging everything you do got promoted because he was a brilliant engineer.

Anyway, having a bad boss sucks. And there isn’t much you can really do about it. If you are in this position, I feel sorry for you—really.

You hate the commute

Ugh. Driving. Ugh traffic. Ugh stupid inclement weather making you late.

I don’t commute anymore, but when I did, it sucked. I hated getting up every morning, getting dressed, scrambling to grab my coffee and get out the door and then driving to some dreary office building.

Sometimes the biggest detriment to job satisfaction has nothing to do with the job itself.

Forced to work too many hours

It is easy to fall into this trap. You take a job and expect to work a normal 40 hour workweek only to find this unspoken expectation that you will work 10 hour days and come in on Saturdays. You answer work email from home. You always feel like you are on the clock.

“I’m going to need you to come in on Saturday… mmmmkay?”

office space I Hate My Job, I Wish I Could Work From Anywhere In The World

Not doing something meaningful

This one is a big one. If you don’t feel like what you are doing matters, it is hard to find the motivation to keep doing it. I’ve been at plenty of jobs where it felt like the work I was doing was not appreciated and didn’t really matter.

If you work for a small company or startup, this probably isn’t the case, but all too often in the corporate world developers are absorbed into the collective and feel like their individual contributions don’t really count towards much.

No opportunity for advancement

Perhaps the worst feeling of any job is that you have nowhere to go. Maybe you are already at the top of the development track, or maybe the company you work for doesn’t really have any kind of career path laid out for technical people.

It is really easy to bump your head against that glass ceiling and feel like you are just wasting away your years grinding out project after project with no rainbow in sight.

What can you do about it?

Ok, so you might be wondering where I am going with all this. My goal isn’t to make you depressed and hate life. No, instead, I want to tell you what you can do about your situation to make it better.

Interested? Good. Read on.

The obvious solution to hating your job is to find a new one—or even strike out completely on your own. But, finding a new job is sometimes a scary proposition. Most of us would rather stick it out in a non-ideal situation than deal with the pain and fear of change.

But, if you are ready for change—or at least if you are considering it—here are some practical things you can do to help you get a better job.

Improve your skills

The first place to start is with improving your existing skills and perhaps acquiring a few new ones.

If you are stuck in a job you hate, try dedicating the first couple of hours each morning—before you head into the office—to improving your skills and learning new ones.

By paying yourself with the first couple of hours of your day, you’ll make sure you are able to devote some quality time to your own personal development, before your soul-sucking job drains you of the will to live.

wake up I Hate My Job, I Wish I Could Work From Anywhere In The World

I’ve found early morning is the best time to get some uninterrupted time to grow as a developer. Sure, you’ll have to wake up a bit earlier, but it is worth the sacrifice. Just trade a couple of hours at night for some in the morning—you’ll be glad you did.

Learn how to market yourself

If you’ve been following my blog, you probably know it is getting close to the launch date for my “How To Market Yourself as a Software Developer” package, so it probably comes as no surprise that I was going to find some way to plug the course in this post.

But, in all seriousness, and awesome courses you should definitely buy aside, you really do need to learn how to market your skills if you want to get a better job and have better opportunities. I know I beat this horse to death, but I only do so because it is so vitally important.

The truth is, most software developers have the skills they need to get an excellent job—to get the job of their dreams—but, the one thing holding them back is exposure. No one knows that they exist and no one knows the skills they posses.

Most developers aren’t good at personal branding and marketing—I know I wasn’t. I had to learn things the hard way and study quite a bit on the subject. But, guess what? It paid off big time.

Once I learned how to effectively market my skills, I was in the position of turning down job offers instead of worrying about how I would find a new job if I ever lost mine or just couldn’t take it anymore. I’ll tell you the truth, learning these skills easily quintupled my salary. Yes, that is right, quintupled, as in I make 5 times as much money now as I did when I didn’t know how to market myself.

Oh, I have your attention now?

Good.

Sign up here and you’ll be one of the first to know when I launch “How To Market Yourself as a Software Developer” on March 27th. I’ll also send you a 20% off discount code right to your inbox on the day of the launch.

combo image 53 I Hate My Job, I Wish I Could Work From Anywhere In The World

Bonus: with the right skills you can work from anywhere in the world

I thought I’d throw this one in there since so many people often fantasize about being able to work from the comfort of their own home or to travel the world working from their laptop.

One major benefit of developing your skills and learning to market those skills effectively is freedom—that’s right, freedom.

When you are in high demand, you have many options to choose from, instead of being forced into the only option that is available to you. A skilled software developer who posseses the knowledge to market those skills can find many different ways to work remotely and on their own terms.

You can get the remote, work-from-home jobs, that everyone wants. Those jobs are hard to come by, but if you have a solid reputation and know how to advertise your skills properly, all kinds of doors open for you.

You can also get out on your own and start your own consulting business. When clients are coming to you because of your name and reputation, you can literally just pick up and work wherever you want without having to worry.

So, if you hate your job, don’t despair. Help is within reach, you’ve just got to be willing to invest a little time and money to reach it.

Oh, and if you know someone who needs to read this post… share the love. wlEmoticon smile I Hate My Job, I Wish I Could Work From Anywhere In The World

My How to Market Yourself as a Software Developer Course Is Almost Ready!

If you are a regular reader of my blog, you probably know that for the past few months I’ve been working on a really big project.

I get many emails from developers wanting to know how to boost their career by either finding a new job, starting a consulting business, or even just getting a raise.

I try to help as many of these developers as much as possible through emails and Skype calls, but there is only so much of me and those types of communication don’t easily scale.

I was trying to figure out how to solve this problem

Then, I had an idea…

What if I put together a full program which teaches developers what I think is the most important skill required in boosting their career—marketing themselves?

I don’t mean the cheesy kind of marketing yourself that gives marketing a bad name. I mean the true, down-to-earth, I want to help someone and by helping them I’ll build a reputation for myself, marketing.

I found in my career, this approach to marketing—of providing value to others—was the single most impactful thing I had done to increase the amount of money I make and to open up all kinds of opportunities for me.

So, that is how the idea was born. My Pluralsight courses on all kinds of technologies were very popular, but I feel like the biggest value I could provide—more valuable than any technical course—is to show developers how to get out there and build a name for themselves in the community.

combo image 51 My How to Market Yourself as a Software Developer Course Is Almost Ready!

Here is what I created

I didn’t want to just create a normal video tutorial.  I feel like the material in this course is better served by a combination of video, books, interviews and more.

I want developers who buy the package to feel like they are getting a huge value for the price.  I want to make sure that I am not leaving out any of the advice I would have given my younger self if I had a time machine and could travel back in time.

howtomarketyourself2 My How to Market Yourself as a Software Developer Course Is Almost Ready!

I started out by writing the flagship book for the course, “Why Marketing Yourself Is Important.”  I feel this book is a good starting point for the program and gives readers an understanding of what exactly the value of marketing yourself is and what exactly it entails.

The book is designed to introduce the concepts that are covered in more detail in other parts of the program and to get a reader more familiar with these concepts so that they understand where each piece fits in.

2014 03 13 14 52 451 My How to Market Yourself as a Software Developer Course Is Almost Ready!

Next up, I created the “Building a Brand” video course. The goal of this course is to talk about the importance of building a brand and show viewers exactly how to do it. I want to cover more than just the surface level understanding of what a brand is and really dive deep into what makes a great personal brand and the value having a great personal brand can bring.

I wanted this course to be structured like you are having a real conversation with me. So, I shot a majority of the course in full HD video with me talking into the camera.  In this course I take you from the basics of understanding what makes up a brand all the way to the creation of your own brand and I answer the most common questions related to personal branding that I have received from talking about this topic at code camps and conferences.

2014 03 13 14 53 531 My How to Market Yourself as a Software Developer Course Is Almost Ready!

Since having a blog is a central part of the strategy I recommend, I created a full step-by-step course that shows you how to build a blog from scratch and gives you the tools and advice I’ve learned over the years for making your blog successful.

In this course I go over all the options for setting up a blog, including free hosting, shared hosting and using a full blown virtual private server.  But, I don’t want to just talk about building blogs, so I took the extra steps and actually show you how to create a blog using each possible option.

I end the course by giving you all the tips and tricks I’ve used to build this blog up to a blog that gets over 100,000 visitors each month—around 3 thousand per day on average.

utilimate 3d1 My How to Market Yourself as a Software Developer Course Is Almost Ready!

I feel that learning to use social networks effectively is a very important skill for getting your name out there and spreading the content you create.  So, I wrote another book called “The Ultimate Developer’s Guide to Social Networks.”

In this book, I lay out my overall strategy for gaining traction on social networks. I talk about concepts like building an audience and connecting with people. I cover my strategies for each of the major social networks.  I also give a run down of all the tools I use to manage my social networks effectively and not spend hours each week keeping up my presence in them.

2014 03 13 14 56 461 My How to Market Yourself as a Software Developer Course Is Almost Ready!

One area that I feel is sorely lacking for most developers is the area of creating a good resume.  So, I decided to write a “Resume Advice That Will Make Or Break You” in the form of: do this, don’t do that.  I included all the best resume advice I’ve gotten from recruiters and hiring managers over the years along with tips that I’ve used myself to land good jobs and negotiate higher salaries.

3d1 My How to Market Yourself as a Software Developer Course Is Almost Ready!Next, comes the big topic of getting your name out there. I decided to write “The Complete Guide to Getting Your Name Out There” to cover this topic in detail.  In this book I talk about all the different mediums you can use to get your name and brand out there where people can see it.

I start out by talking about how to get people coming to your blog. Then, I give you some advice on getting published in magazines or other blogs. I cover writing your own book and either self-publishing it or getting it published by a traditional publisher. I even talk about all the tips and tricks I use to create video tutorials and screencasts or shoot high quality YouTube videos.  I also cover the topic of getting on developer podcasts or creating your own podcast—it isn’t that hard. And finally, I give you some practical advice on getting out there in the community either by speaking or through open source. There is a ton of information packed into this book.

2014 03 13 14 58 491 My How to Market Yourself as a Software Developer Course Is Almost Ready!

I really want to make this package valuable, so I didn’t stop there. I created a list of networking do’s and don’ts and I hired a graphic designer to create a beautiful inforgraphic out of it. I am really happy with how this thing came out. In this infographic I reveal all the networking secrets I’ve learned over the years from countless books, articles and just plain old trial and error.

2014 03 13 15 00 021 My How to Market Yourself as a Software Developer Course Is Almost Ready!

Finally, I reached out and contacted the most prominent and well know software developers I could think of. I was able to get Bob Martin, Jeff Atwood, Jon Skeet, Rob Conery and a bunch of other developers to let me interview them. I feel like these interviews alone are worth the price of the course—Mark Freedman, even agrees with me.

In these interviews I dig deep into what made these famous software developers so successful. They share plenty of secrets I haven’t heard anywhere else. One interview in particular that I think you’ll find extremely valuable is the one I did with Pinal Dave. Pinal is the creator of SQLAuthority, an extremely successful blog that gets over 1.8 million views per month. That’s right 1.8 million! For the first time, he shares his secrets to success.

I’ll also be updating the package with more interviews and other content as I get feedback about the content. I want to make this package as dynamic as possible.

When does it go live?

So, you might be wondering when this course goes live. Well, if you preordered the package, you’ve already gotten most of the content I’ll be launching with.

But, if you didn’t preorder, you can get the full finished package on March 27th. If you are a subscriber to my email list, you’ll get a nice hefty discount code in your email on the day of the launch.

If you aren’t already signed up, just go here and you can register to make sure you get the discount code and get notified when the full package goes live.

Man, am I tired

I do have to say, I am exhausted from working on this package. I’ve never put so much effort into a single project in such a relatively short time-frame. I spent countless hours up late at night working on parts of the package. But, I think it was all worth it, because I am extremely happy with the way everything turned out. I am 100% confident this course will help developers learn the skills they need to market themselves and boost their careers.

The Importance of Having a Routine

In this video I talk about how important it is to build a routine for yourself.

I’ve found that having a routine, while boring at times, is really important for long term success.  I used this technique to get 30 Pluralsight courses created this year alone and 54 overall.

Watch the video to find out why I think having a routine is so important.

Not Everything Is 80-20, Don’t Blindly Follow Pareto’s Law

There is a useful observation about the world that is often applied to software development called the Pareto principle or Pareto’s law.

This principle suggests that in many situations 80% of the results come from 20% of the causes.

For example, Pareto had realized that 80% of the land in Italy, during his time, was owned by 20% of the population.

111613 0015 NotEverythi1 Not Everything Is 80 20, Don’t Blindly Follow Pareto’s Law

Since then, many people, including Pareto himself, have applied the same observation of this 80-20 rule to many other areas of life from economics, to business and even software development.

But, I’ve found that we rely on Pareto’s law just a little bit too much.

The problem with generalizations

The biggest problem I have with Pareto’s law is that is applied way too often to too many situations. In many cases, especially in software development, Pareto’s law becomes a self-fulfilling prophecy—the more you look for Pareto’s law, the more you magically seem to find it.

None of this is to say that Pareto’s law isn’t a real thing—of course it is. If you go and take a look at real hard numbers about distributions of things, you’ll find Pareto’s law all over the place in your statistical data. But, at the same time, if you go and look for the number 13, you’ll find an alarming number of occurrences of that two digit number above all others as well.

It is very tempting to force things that don’t quite fit generalizations into those generalizations. How often do we use the phrases “always” and “never?” How often do we fudge the data just a little bit so that it fits into that nice 80-20 distribution? 82% is close enough to 80 right? And of course 17.5% is close enough to just call it 20 after all.

Not only can you take just about any piece of data and make it fit into Pareto’s law by changing what you are measuring a little bit and fudging the numbers just a little if they are close enough, but you can also take just about any problem domain and easily, unconsciously, find the data points which will fit nicely into Pareto’s law. There is a good chance you are doing this—we all are. I do it myself all the time, but most of the time I am not aware of it.

I’ve found myself spouting off generalizations about data involving Pareto’s law without really having enough evidence to back up what I am saying. It is really easy to assume that some data will fit into Pareto’s law, because deep down inside I know I can make it fit if I have to.

Seeing the world through Pareto colored glasses

111613 0015 NotEverythi2 Not Everything Is 80 20, Don’t Blindly Follow Pareto’s LawYou might think there is no harm in fudging numbers a bit and finding more and more places to apply Pareto’s law. But, looking at the world and blindly assuming all data falls into a distribution of 20 percent of the causes being responsible for 80 percent of the effects, is like walking around with blinders on your eyes—you are only seeing part of reality and even the reality you are seeing tends to be a bit distorted.

Again, this doesn’t mean that Pareto’s law isn’t correct a large amount of the time, but it means that when you are just assuming that any data that appears to obey this law will, or worse yet, that all data MUST obey this law, you are severely limiting your perspective and restricting your options to those that already fit your preconceived ideals.

Sometimes I wish I had never heard of Pareto’s law, so that I wouldn’t be subject to this bias.

Let me give you a bit of a more concrete example.

Suppose you blindly assume that 80% of your application’s performance bottleneck comes from 20% of your code. In that case, you might be right, but you might also be wrong. It is entirely feasible that there are some parts of your code that contribute more or less to the performance of the application. It is also pretty likely that there are some bottlenecks or portions of code that heavily impact the performance of your application. But, if you go in with the assumption that the ratio is 80-20, you may spend an inordinate amount of time looking for a magical 20% that doesn’t exist instead of applying a more practical method of looking for what the actual performance problems are and then fixing them in order of impact.

The same applies for bugs or testing. If we blindly assume that 20% of the code generates 80% of the bugs, or that 20% of our tests test 80% of our system, we are making pretty large conclusions about how our software works that may or may not be correct. What happens when you fix all the bugs caused by the 20% of code that generates 80% of them? Does a new section of code now magically produce 80% of the bugs? If 20% of your test cases test 80% of your code, can’t you just create those ones? Why create another 80% to only test another 20%? And if you did follow that advice, then wouldn’t you have the situation where 100% of your tests tested 80% of your code?

The problem is when you start applying and assuming that Pareto’s law applies blindly, you start making all kinds of incorrect assumptions about data and only see what you expect.

So, was Pareto wrong?

In short, no. He wasn’t wrong. Pareto’s principle is a thing. In general, in many cases, it is useful to observe that a small amount of causes are responsible for a majority of effects.

But, it is not useful to apply this pattern everywhere you can. The observation of the data should guide the conclusion and not the other way around.

I find it more useful, especially in software development, to ask the question “is it possible to find a small thing that will have a great effect?”

A good book on this very subject is The 4 Hour Chef. Although I don’t always agree with Tim Ferris, he is definitely the master of doing more with less and talks frequently about concepts like minimum effective dosages.

In other words, given a particular situation, can I find a small thing I can do, or change I can make, that will give me the biggest bang for my buck?

Sometimes the answer is actually “no.” Sometimes, no matter how hard we try, we just can’t find a minority that influences the majority. Sometimes the bugs are truly evenly distributed throughout the system. Sometimes the contributions of team members are fairly equal. One team member is not always responsible for 80% of the results.

And let’s not forget about synergy. Which basically is when 1 + 1 is equal to 3 or more. Sometimes the combination of things together makes the whole and separating out the parts at all greatly reduces the function.

For example: eggs, sugar, flour and butter can be used to make cake, and you could say that 80% of the “cakiness” comes from 20% of the ingredients, but if you leave one of those ingredients out, you’ll quickly find that 100% of them are necessary and it doesn’t even make sense to try and figure out which ingredient is most important, because alone each ingredient functions much differently than they do all together.

In software development this is especially true. Often in complex systems all kinds of interactions between different components of a system combine together to create a particular performance profile or bug distribution. Hunting for the magical 20% in many cases is as futile as saying eggs are responsible for 80% of the “cakiness” of cake.

How to Become a More Valuable Software Developer

Let me ask you a question.

Why do you think Bill Clinton gets paid $200,000 to speak for an hour?

111613 1914 HowtoBecome1 How to Become a More Valuable Software Developer

Is it because he is such a good speaker that just hearing the magic words come out of his mouth will make you a better human being and drastically change your life?

Or do you think it might have something to do with the fact that he was the president of the United States of America?

I’m not doubting the Bill Clinton is a good public speaker. He is likely one of the best, but it is not his skill alone that commands such a high price. A large portion of his price tag comes from the name he has built for himself.

You might say that he has…

Style and substance

Just having style is not enough. Style is just a name without anything to back it up.

Have you ever been suckered into buying one of those products on late night TV? You know what I mean, the ones that they sell at 2:00 AM and throw in all kinds of extra things if you only act now?

That is an example of style, but no substance. You aren’t getting what is being sold. The infomercials are advertising a product much better than what you actually receive. When you open the box and try out the product, you feel like you got ripped off—and you did.

Substance alone is not enough either. I’ve known many very skilled people that couldn’t market their skills worth a dime. Often people who focus on developing their skills don’t feel that they have the ability or time to learn how to market those skills, so those kinds of people go underappreciated and never live up to their full potential. As a software developer, you are probably more likely to fall into this category.

To reach the ultimate level of success and truly increase your value, you have to have both style—the ability market yourself and make a name for yourself, and substance –the skills that pay the bills.

Whether you like Bill Clinton or not, you have to admit that he does have both; that is why he commands such a high price tag.

Skills are not as important as you think

One thing that many programmers and software developers find hard to believe is that skills are not the most important thing in advancing your career.

Don’t get me wrong, you have to have some skills and knowledge. Just like the dice-o-matic you bought at 2:00 AM and quickly discovered was actually a piece of junk, if you pretend to have skills and abilities that you don’t actually possess, your customers and clients will be just as disappointed and look for a trash can to drop you off in.

But, at the same time, most people can’t recognize the difference between someone who is in the 95% margin of skill in a field from a person who is in the 80% margin of skill in that field, unless they also happen to be an expert themselves in that field. Unless you are a doctor, or dentist or auto mechanic, you probably don’t have a way of really evaluating how good a doctor or dentist or auto mechanic is—although you can probably quickly spot a phony.

So, why is this important?

Because, if you are like me—or at least how I was—you are probably spending way too much time focused on increasing your skills and not enough time increasing your style; building a name for yourself.

111613 1914 HowtoBecome2 How to Become a More Valuable Software Developer

What I mean by this is that if you are at a decent level of skill, you will see much bigger benefits in building a name for yourself than you will in increasing your skill further.

It doesn’t matter if you are an independent software developer trying to get more clients or sell a product, or you are looking to work for someone else who will pay you more money, or you just want to get that promotion at your current job. Whatever your goal or situation is, complimenting substance with style will multiply the value of your skills much more than increasing those skills themselves.

The equation

The best way to think about this is like a mathematical equation.

(Style ^ 2) * Substance – Expectation = Value

Let’s break it down.

Style is more important than substance, because while skills are essentially capped and become harder to increase over time, style can be increased to a much larger degree—you can always build a bigger name; get a bigger audience.

Plus, the effect of having a larger audience tends to increase exponentially. That is why commercial spots for the Superbowl are so expensive.

Now, from the style and substance multiplication we have to subtract expectation to get a true sense of value.

Consider the case where you bought that dice-o-matic from a late night infomercial. The style points were pretty high. Lots of great marketing techniques were at play to get you to make that purchase, but those techniques also tend to setup some pretty high expectations of what the product should do. When you see the guy on TV using the dice-o-matic to chop an iPhone into tiny pieces, it sets a pretty high level of expectation.

Style is high, but substance is pretty close to zero and expectations are high, so in many cases value can actually be negative.

You have to consider the same thing in your career, when you are marketing yourself and your skills. Some of the marketing techniques you could use to get a quick audience would also produce a very high expectation, so if you don’t have the skills to measure up, you are going to create some negative or very low value.

On the other hand, if you have a high enough level of substance behind what you are promoting and you are able to promote yourself in a way that doesn’t build up more expectation than you can deliver, you are going to be able to bring a pretty high amount of value.

Increasing your value

So, for many of us software developers and programmers the answer is simple. The most effective way we can increase our value is to learn how to market ourselves; a skill that I have found many IT people tend to lack. Of course there are some great examples of developers who do not lack this “style.” Most conference speakers and well known authors or consultants are very good at promoting themselves and really increasing their value by carefully paying attention to the equation above.

Now, of course, this is much easier said than done. I’ve also found that most software developers don’t really know how to go about marketing themselves. I didn’t either for too long of a time—and I am still learning how to do it every day. But, I have learned some valuable techniques that I think just about anyone can apply to build some points on the style side.

If you are interested in learning about how to market yourself to really increase your value, sign up for my newsletter here, so I can keep you updated on my future posts and videos covering that topic and much more.

I am planning some pretty exciting content around all of the information I’ve gathered over the years about marketing yourself as a software developer and I’ll be sharing a large amount of that information here on this blog.