I used to think I was a real hot shot.
I used to think I could conquer the entire world all by myself with just an IDE and a mechanical keyboard.
I couldn’t have been further from the truth.
(Oh, and yes that really is a picture of me—don’t ask!)
All of us are stronger than one of us
Too many software developers today have that same flawed mindset that I had back when I was running around thinking I was hot stuff.
It is a limited way of thinking that prevents you from reaching your true potential. For years, my real abilities lay dormant while I pretended to be much more than I was. I thought I knew all the answers and that anyone that didn’t agree with me was wrong.
I was caught in my own trap—one I had set for myself. I was limited by my own ideas and perspective and I was filtering out anything that didn’t agree with my preconceived notions of how software should be developed.
The reason why I was caught in this trap, wasn’t because I was a big jerk—although the Perl developers that faced my wrath would beg to differ. No, it was because I was so isolated. I wasn’t part of the community. I was in my own little world.
Bad things happen when we isolate ourselves. Our thinking and perspectives are limited, but that isn’t the only thing that happens. No only do we cut off the ability for the outside world to influence us and shape our ideas, but we severely limit our own ability to influence others.
You might not think influencing others is very important to your career, but it is one of the cornerstones of building a network. People who benefit from a relationship with you, professionally and otherwise, are people who you can rely on when you need help in the future.
Many software developers severely limit their impact and influence by avoiding the community and staying holed up in their caves.
One of the biggest pains of going it all on your own is loneliness. Yes, it is lonely out there trying to conquer the world by yourself. Even if you succeed, who will you share the accomplishment with? Many otherwise fun activities lose their charm when we don’t have anyone to share them with. Victories are less sweet and defeats are far more painful.
The benefits of community
Fortunately, you don’t have to go it alone. There is a huge software development community out there waiting to welcome you.
By joining and interacting with this community you can avoid having to face all your struggles on your own. It is always nice to have someone whom with you can share the problems you are going though. Getting an outside perspective often helps you to think about a problem in a new way or to see something you didn’t see before. At the very least it validates your problem as a real one.
When you decide to participate in the community, you are suddenly exposed to a new world of opportunities. You never know what kind of connections you’ll make and how those connections will benefit you in the future. I’ve met so many people that have positively influenced my life or gave me that extra push through my involvement with the community.
But, perhaps the biggest draw to joining the developer community is the feeling of belonging to something bigger than yourself. The software development world is huge and it is easy to feel like you are just a small little voice in a room full of people shouting at the top of their lungs. When you join the community, you identify with the accomplishments of everyone in it. You go from a small little voice on your own to an integral component of a choir. Suddenly your voice individually doesn’t matter as much, but collectively it is much more important.
How to get involved
By now you might be agreeing with me that interacting with the software development community is valuable—both to your career and to your well being. But, how do you actually get involved and become part of the community?
There are many ways to get involved in the software development community, but one of the easiest ways is to just start being social.
Step outside into the fresh air and share what you have learned and the struggles you are facing. Jump on social networks like Twitter or Facebook and start a conversation. You can find groups on communities like LinkedIn and Google+ where many different developers or congregating.
You can even comment on other people’s blogs—or better yet start your own blog. If you are reading this post now, leave a comment and get involved. Instead of just reading blogs passively, start a conversation.
And don’t forget, networking events and user groups. There are plenty of user groups around most metropolitan areas that you can get involved with. If you can’t seem to find one, you can always start your own mastermind group with a couple of other developers to meet weekly and discuss problems each of you are facing.
Finding your unique gift
The most valuable members of any community are those members who can carve out a niche for themselves and provide specific guidance and advice to the community in that particular area.
Take some time to think about what your own personal brand is and what you would like to be known for. Do you have an interest in mobile development on Android? Are you a C# language guru? Perhaps, you are just comic relief for an overly stressed environment. Find something that you can do to contribute to the community in a unique way.
They key to a thriving community: giving value
There are many ways you can contribute to the software development community.
A good place to start is by creating your own blog and sharing what you know and what you learn with others there. Blogs are a very valuable resources for software developers and if you spend time writing blog posts, others will appreciate and start to recognize your contributions.
If you feel a bit more adventurous, you can create your own Podcast. Compared to many communities, there is a real shortage of podcasts in the developer community.
Writing a book, even if you just self-publish, is a way to contribute to the community and make some money while doing it—although, don’t expect to get rich from book sales alone.
And, of course there is open source. Many open source software projects need developers who are willing to put in some time and goodwill to help get them off the ground or to keep up with the maintenance associated with any large scale software effort.
The key thing to remember is that you help the community by creating value for others. A majority of it should of course be free, but not all of it has to be free to be valuable.
If you are with me so far, you agree that being actively involved in the software development community is a good thing and you know some ways to do it, but talking about it and actually doing it are two different things. So, how do you actually get started?
Well, the easiest way is to just jump right in and get involved in whatever way you can. You don’t have to be a genius or an expert on a topic to blog about, talk about it, or just share your excitement. In fact, sometimes being a beginner is a big asset.
If you want a little more help though—I know writing your first blog or trying to speak in front of an audience can be extremely unnerving—I’ve got something you might be interested in.
Next week on March 27th, I’ll be launching a brand new program called “How To Market Yourself as a Software Developer.” In this complete package, you’ll find lots of advice about how to get involved in the community by learning how to create a blog, and in other ways as well.
I think you’ll be particularly interested in my interview with Derick Bailey who is the creator of the popular open source project, Marionette.js. In that interview Derick explains exactly how he got involved in the the development community and how it benefited his career.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
— Mark Freedman (@MarkFreedman) March 9, 2014
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.
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.
Getting started in the field of software development is difficult.
No doubt, if you are just starting out as a programmer, you have already experienced how difficult it can be to get a job without having much or any experience.
If you’ve been a software developer for any amount of time, you’ve probably experienced how difficult it can be to rise up the ranks in this highly competitive industry.
I’ve talked to many developers just starting out who are frustrated because they don’t know where they should be devoting their energies to best advance their careers and secure their futures.
There are so many options. So many technologies you could learn. So many paths you could take. Which is the right one?
Thinking the right way from the start
I’ll give some concrete advice in a little bit, but before any of that advice is useful, it is important to make sure you are thinking about your career in the right way.
It is really important to think about your career as a business. A business you own which employs you. Thinking this way will help you make the right objective decisions about what you should be doing with your time and how and when you should invest money in your career.
Too many software developers think about their career in terms of their current job or the job they seek to obtain—that kind of thinking is short sighted.
Have you ever noticed how it is easier to advise someone else on a decision than to make that same decision for yourself? The reason is because when you advise someone else, you are able to be objective and not let fear and other emotions influence your advice.
By thinking of yourself as a business, you’ll be able to create that same kind of separation and objectiveness which will lead you to better decisions.
Actually start a business
In fact, why not go the extra step and start a business right from the start?
It is difficult to get experience without having experience. Most software development jobs require you to already have experience.
So, how do new software developers or developers with limited experience actually get experience?
Often, you get a lucky break and perhaps you come into an organization in a QA position or other role and eventually work your way up to developer.
That is the long way.
Here is the short way.
Just start your own business from the get go and employ yourself. It isn’t hard to start a business. You don’t even have to file any paperwork to start out. You can just do business as yourself in most places.
But what about work? I need to actually make some money.
Ah, but the point of this starting out business is not to actually make money, but to gain you experience. You can keep your current job and you can run this business on the side. You just need some projects to work on so that you can put some real experience on your resume.
It is pretty unlikely that a prospective employer is going to ask how much money your business made last year, (even if they do, you don’t have to tell them.) So, don’t worry about making money. If you are able to get some paid jobs, great, but there is no reason you can’t do jobs for clients for free in order to gain experience.
Create a website for a friend or family member’s business. Talk to local businesses and ask them if they’d like you to develop an application for them for free or very low cost. It doesn’t matter where you get the business from, the point is to get something on your resume that is real work you did—then it isn’t lying. You don’t want to lie on your resume.
Develop some mobile applications
Here is another great thing that your business can do that will not only get you some experience to put on your resume, but will also possibly generate you some extra income and give you something to show at a job interview.
I often recommend that developers just starting out build mobile applications, because mobile applications can be built by a single person and are a great way not only to learn how to build an application from end to end, but to create solid proof of your ability to write code.
One of the biggest fears that companies have when hiring developers is whether or not that developer can actually produce anything. You can completely alleviate that fear if you can show the source code for an application you created yourself, and if you have it in a mobile app store and people are actually using it, even better.
If you are looking to find out where to get started with mobile application development, I have two Pluralsight courses on the subject: Introduction to Android and Beginning iOS 7 Development. You can check those out or find a good book on the subject.
Here are a couple I’d recommend:
Besides gaining experience to put on a resume, building your own mobile application will help give you confidence in your ability to create real working code and it will help you to develop well rounded skills in software development.
Sure, it may be a bit difficult to get started and there is a decent amount to learn about mobile development, but it is a good investment regardless, because mobile devices aren’t going away anytime soon and the demand for developers that can develop for mobile platforms is only likely to increase over time.
Plan your career
I talk about the idea of marketing yourself as a software developer quite often, because it is something I truly believe can help software developers to get better jobs and earn higher incomes.
Much of this advice comes down to actually planning out your career rather than just looking for the next job.
You want to set yourself up early on in a position where you are building a brand and reputation for yourself that will benefit you later in your career.
A great way to do this is to create your own blog. Don’t wait to do this until later on. I wish I would have started this blog 5 years or more earlier in my career. Every developer with a successful blog that I have talked to has said the same thing.
Don’t just create the blog, use it. Strive to write an article each week. Even if you don’t have anything interesting to say, do it. After a few years, you’ll be a better writer, have a nice history of your thoughts and be all the better off for it.
I’m not going to go into all the details of marketing yourself in this post, but if you are interested, I do have a course that covers everything you need to know about marketing yourself as a software developer.
The key point here is to plan your career and think for the long term. Create a blog, establish a brand, do other things that will benefit you years down the road, but start doing them now.
Find the right friends (mentors)
I’d advise you to make friends with experienced software developers and utilize the wisdom they can impart on you.
It can be difficult to make friends if you come off as needy. It is unlikely that if you ask someone to be your mentor, they will accept. Being someone’s mentor doesn’t really offer much to the person doing the mentoring.
The key is to have something to offer in return so that you are providing value as well.
Here are a few ideas to make some friends in the industry:
- Offer to buy lunch. This is a good opportunity to have a conversation with someone who you otherwise might not be able to. Who doesn’t like a free lunch?
- Start commenting on software developer’s blogs that you admire. You’ll eventually gain their attention if you provide useful, insightful comments.
- Find something to trade. Do you have some knowledge in some other area that someone might be interested in? Can you trade your knowledge of fitness or diet in exchange for information about software development? The best relationships offer value to both parties.
- Go to user groups. There are many user groups all over the world that you can become a part of. If you are a regular, you will meet other regulars and build good friendships.
Read the right books
One of the best ways to really get ahead of the curve is to read the right books. Reading the right software development books can help you to understand concepts that take years to discover on your own and give you the benefits of the collective experience of many successful software developers.
Here is my personal list of books that I’d recommend all software developers start out with.
Code Complete – A classic book about the structure of code. This will make you a much better programmer and help you write clear code.
Clean Code – A great book by Bob Martin that really distills down some key concepts about writing good code. A must read book.
Design Patterns – Read through this book several times and learn these patterns. It may take some time to grasp them all, but they will show up again and again in your career.
Programming Pearls – Work through the problems in this book. They are hard, but the effort is worth it.
Agile Software Development, Principles, Patterns, and Practices – Another Bob Martin book, but also a must read.
Good luck. I hope you found this advice useful. Starting out is hard, but if you are smart about it and deliberate, you can boost yourself several years ahead of others in your same position.
If you found this post useful, don’t forget to sign up here to get more content like this delivered to your inbox.
What would you think if you were interested in buying some new product you heard about, but when you went to the company that created the product’s website you found it wasn’t there, because they didn’t have a website?
Today, we expect pretty much every reputable company to have a functioning website.
But, many developers—web developers included—don’t have any kind of online presence of their own.
Sure, you may have social networking accounts, like Facebook and Twitter, but do you have a website that you own which you can point people to as your castle on the web?
The importance of having a home base for marketing yourself
I’ve talked before about how important it is to market yourself as a software developer, but I’ve never really gone into the details of how.
I’ll be creating a series of posts dealing with the subject of marketing yourself over the next few months, starting with this post on what I believe is the cornerstone to any success software developer’s self promotion strategy, building a blog.
As you’ll see in this series, it is actually pretty easy to get started creating a blog—probably simpler than you may think. But, before we get into the details, let’s take a moment to talk about why it is so important to have a home base on the web, especially for a software developer.
It really begins with how you view yourself as a software developer and your software development career. Many, if not most, developers view themselves as a software developer who does a job. For the most part, there is nothing really wrong with this view, but it is not the best way to think about what you do.
Instead, you are better off thinking of yourself as a business. Sure, it may be a one man or one woman business, but the truth of the matter is that you are providing a service to a client, even if that client happens to be your boss.
When you think of yourself and your career as a business that you are building, you suddenly are no longer exempt from needing a web presence. Just like we might think it would be pretty bizarre for a company that we do business with to not have a website, your clients and customers will think it is bizarre if you don’t have one—especially if you are a programmer that specializes in web development.
For most developers, your blog will be your main presence, or your home base on the web. Your blog is a chance to tell the world about what you are doing and show what you can do, and to completely control the message and image you present. This is an extremely powerful concept, because it allows you to shape the way potential and present customers and clients see you and can really increase your exposure.
This really is the key to marketing yourself online.
But, I don’t have anything interesting to talk about
Hogwash. That excuse is just no good. Everyone has something interesting to talk about.
This is an excuse I hear pretty often, and it seems like a good one—until you really sit down and think about it.
As a beginner, it can seem like you are not good enough; like what you have to say isn’t important; like there are so many other people that have much more valuable advice and opinions. But, the truth is different people at different levels in their knowledge of a subject, or with different kinds of combination of subjects they have knowledge about, can reach and provide value to different sets of people.
Let me break that down a bit.
What I mean to say is that just because you are learning C++ and there are C++ gurus out there with 30 years of experience and more knowledge about C++ then you may ever have, doesn’t mean that you don’t have something valuable to offer.
Sure, Herb Sutter might know more about C++ than you, and other C++ experts may gain valuable information from his blog, but can he reach the C++ beginner, like you, that is just starting out as well as you can? Probably not.
The truth is sometimes an amateur can reach other amateurs better than a professional can.
The truth is sometimes a woman can reach other females better than a man can.
The truth is sometimes a younger 20 something person can reach other 20 something people better than a programming dinosaur can or vice versa.
Chances are if you find it interesting, someone else does to. So, stop using that excuse. You can create a blog and it can provide value. You just have to be willing to put in the work.
I’m not looking to advance my career or sell something
Again, I have to say this excuse is a bit short-sighted. You might not be looking for another job right now, or to move up the ladder, but chances are, at some time in the future, you will be.
The biggest mistake I see developers make with career advancement is waiting until they need a job to start doing things like networking or blogging.
This is a bad idea, because it reeks of desperation and building up momentum, be it with blogging, networking, or something else, requires time.
Ideally, you want to start your blog and start using it to market yourself and your skills, before you need to. Then, if the well ever dries up, you’ll have plenty of prospects.
The same goes with selling something. You may think that you’ll never have something to sell, but if you ever write a book or decide to sell some consulting hours, having a blog can bring you clients and prospects instead of you having to go out and search for them.
Ok, so hopefully, I’ve convinced you to at least consider creating a blog that will serve as your home base on the web– which will be your primary tool for marketing yourself online.
I can’t tell you how many opportunities have come to me from having this blog that I would have never expected.
But, you may be wondering how to get started with creating your blog. If you are like me, you probably want to know what options you have and how to pick the best one.
In my next post, I’ll talk about the 3 main options for creating a blog, give you the one I personally recommend, and give you one really important piece of advice that you won’t want to ignore.
Just check back next week, or you can sign up here to get updates, so I can let you now when the next post goes live or when something else interesting is happening at Simple Programmer.
And if you can’t wait till next week, take a look at this book: Technical Blogging: Turn Your Expertise into a Remarkable Online Presence. (It is from a fellow developer who gives some tips on creating a successful blog.) I really enjoyed this book and found some great tips in it.
Oh, and if you are super excited about the idea of learning to market yourself as a software developer to boost your career, I am taking limited pre-sales for my new complete course and package “How To Market Yourself as a Software Developer.” I’ll announce more about this later, when it is ready for an official launch, but if you are quick, you can get in early and help shape the course.
I’ve been seeing quite a few posts on Hacker News lately about why you should not work too hard and even saying you should work less than 35 hours a week.
(Now, don’t get me wrong. I think the authors of these articles are awesome people who have accomplished huge things. I don’t mean to disrespect anyone of these great entrepreneurs. I just think some of them have confused where they are now, with how they got there.)
Would we ever want to live in a world where working harder didn’t amount to anything more, but rather ended up returning you less?
I know plenty of people who work less than 35 hours a week, and I wouldn’t say they are doing the best work of their life.
In contrast, I know plenty of people who are working 50 to 60 hours per week and they are doing some amazing things.
You have to work hard now to reap the benefits later
At the beginning of every episode of Pat Flynn’s podcast he says
“Welcome to the smart passive income podcast where it’s all about working hard now so you can sit back and reap the benefits later.”
There is no way around this. It is the principal of sowing and reaping at work.
While many well intentioned bloggers have urged you to not put in those extra hours at night, but rather to take time to do what you want and live a life outside of your work, they have forgotten the very path they took to get to where they are today.
If you are in that season of your life, then please take their advice. They are 100% right. There is this point of diminishing returns where you don’t gain much more benefit by spinning the wheel harder.
Ever rode a bike down hill really fast?
You know how at first you can start pedaling and it will actually make you go down the hill faster, but at some point the pedals just start spinning themselves?
You reach that point where you can’t actually move your legs fast enough to make much of a difference. Every couple of seconds, your foot will hit that tiny bit of resistance which tells you that you actually did something, but most of the time you are just spinning your loose pedals, not actually adding any speed.
It’s a pretty good feeling zooming down that hill with minimal effort on your part. There is no need to pedal furiously like you did to get up the hill. If you are pedaling furiously at that point, not only are you wasting your effort, but you are missing out on taking time to enjoy the best part of the ride.
You have to climb the hill before you can sail down it
Altitude change down, requires previous altitude change up. No way around it.
Pedaling a bike up a hill is hard work.
Not only do you have to keep working to move the bike up the hill, but every time you stop pedaling, you run the risk of rolling backwards.
The faster you want to get up the hill, the harder you have to pedal and the more you risk tiring out and rolling down the hill.
There is no rest, there are no breaks when pedaling up the hill. The best you can do is get off the bike for a while and walk it up the hill, but that will surely slow you down.
And so it is with life in general.
My personal hill
I’d like to buy into the story that we can just take it easy and good things will come, but the reality of the situation is that you’ve got to put in work first—hard work.
I started buying real estate when I was 18 years old. I bought my first house, which is a rental I still have today.
Since then, I’ve been buying properties at a rate of about 1 every couple of years.
It hasn’t been easy. Huge sacrifices to be able to do it, but from when I started I knew that I was pedaling my bike up the hill.
I also had been working as a developer full time for about the past 15 years. During that time, I was working nights and weekends to handle my real estate, building apps, and most recently creating online courses for Pluralsight.
Only at the beginning of this year was I able to finally quit my regular job working for someone else and start working completely for myself.
It took a lot of extra hours on nights and weekends, week after week for over 2 years to get there.
Just within the last year have all the real estate investments that I have been making for the last 15 years started to actually put some money in my pocket.
I’m still at the point where I am working 60 hour weeks just about every week. I am still climbing up the hill.
But, the good news is I can see the crest and I know that if I keep pushing down on those pedals, I’ll reach the peak from where I can coast down.
Don’t buy into the idea that there is someway to get around hard work.
Stop running away from hard work and start embracing it. I’ve learned from experience that it takes much more effort overall to avoid hard work than it does to do it, and avoiding hard work engenders no benefits long term or short.
Make the right sacrifices.
Don’t sacrifice your marriage or family in order to get ahead. In the end, it will put you behind. Remember, there is no more costly pursuit than divorce.
Make time to be with your spouse, set aside time to play with the kids every day, if you have them. Take a day off to have a family day.
Instead, sacrifice from this list:
- Watching TV
- Hanging out with friends
- Playing games
- Goofing around
- Browsing the web
Yeah, it might suck for awhile, but if you want to climb that hill now, so that you can cruise down it later, you are going to have to make some sacrifices.
Don’t waste your time.
Here is a list of things I don’t do:
- Cut my own lawn
- Wash my car
- Clean my house
- Any kind of home improvement work
I pay for these things and instead spend that time—not sitting on the couch watching TV—but working hard at what I do best. Working at doing things that will generate me more money than it will cost me to pay someone else to do the other things I mentioned in this list.
I use a service called Fancy Hands to handle many of the time consuming tasks I can delegate out. I have saved tons of time and money by using that service. (Disclosure: that link is my referral link to that site.)
Every time I am doing something, I ask myself if I should be paying someone else to do this. And if your time is escaping you completely, start tracking it.
Lighten your load.
Want to make it easier to pedal a bike up a hill?
Good, all you have to do is carry less stuff with you.
This means, get your expenses down. Start being smart with your money.
Pay off debts, don’t go into debt. Don’t be pennywise and pound foolish, but at the same time learn to live on less.
If you learn to live on 2k a month, guess how much you need to live? That’s right 2k.
If you have saddled yourself with debt and expenses that make it so you need 10k a month to live, you are going to have to pedal a lot harder… just saying.
(If you want to read a good book that helps you learn this mindset, read Rich Dad Poor Dad by Robert T. Kiyosaki.)
It all comes down to this
Be willing to work hard now in order to have a better, more relaxed tomorrow.
Don’t try to take shortcuts or get rich quick, those roads lead to disaster and wasted time.
Instead, if you are working a full time job now for someone else, give yourself 10 hours a week of “your time,” where you work for yourself.
Put in the time now to build that business on the side. Make that sacrifice for 2 years or 5 years or however long it takes to get your bike pushed up that hill.
Don’t give up, don’t be afraid to work hard, and don’t be sucked in by any preacher that preaches a fast way to riches and leisure by doing less.
Remember, those who show up everyday eventually beat out both the faster and the smarter.
What slows down the development of software?
Think about this question for a bit. Why is it that as most software evolves it gets harder and harder to add features and improve its structure?
Why is it that tasks that would have at one point been simple are now difficult and complex?
Why is it that teams that should be doing better over time seem to get worse?
Don’t feel bad if you don’t have an immediate answer to those questions. Most software practitioners don’t. They are hard questions after all.
If we knew all the answers, we wouldn’t really have these problems to begin with.
Regardless though, you’ll find many managers, business owners, customers and even software developers themselves looking for the answers to these questions, but often looking in the wrong place.
Process is almost always the first to be blamed. It stands to reason that a degradation of process or problems with the software development process are slowing things down.
Often there is some merit to this proposition, but I’ve found that it is often not the root cause. If your team is not sitting idle and the work that is important is being prioritized, chances are your process is not slowing you down.
Now don’t get me wrong here. I am not saying that these are the only two important aspects to judge a software development process, but I am saying that if generally your team is working hard on important stuff most of the time, you can’t magically improve process to the point of increasing productivity to any considerable order of magnitude. (In most cases.)
Often questions are asked like:
- Should we pair program or not pair program?
- Should we be using Scrum instead of Kanban?
- Should we be changing the way we define a backlog?
- Should we use t-shirt sizes or story points or make all backlogs the same size?
- Do we need more developers or more business analysts?
- Do we need to organize the team differently?
Now these are all great questions that every software project should constantly evaluate and ask themselves, but I’ve found over and over again that there is often a bigger problem staring us in the face that often gets ignored.
Let’s do a little experiment.
Forget about process. Forget about Scrum and backlogs and story points and everything else for a moment.
You are a developer. You have a task to implement some feature in the code base. No one else is around, there is no process, you just need to get this work done.
It might help to think about a feature you recently implemented or one that you are working on now. The important thing with this experiment is that I want to take away all the other “stuff” that isn’t related directly to designing and implementing that feature in the code base.
You will likely come to one of these conclusions:
1. The feature is easy to implement, you can do it quickly and know where to go and what to modify.
Good! That means you don’t really have a problem.
2. It is unclear what to do. You aren’t sure exactly what you are supposed to implement and how it fits into the way the system will be used.
In this case, you may actually have somewhat of a process problem. Your work needs to be more clearly defined before you begin on it. It may be that you just need to ask more questions. It may be that half baked ideas are ending up in your pipeline and someone needs to do a bit more thinking and legwork, before asking a developer to work on them.
3. Its hard to change the code. You’ve got to really dig into multiple areas and ask many questions about how things are working or are intended to work before you can make any changes.
This is the most likely case. Actually usually a combination of 2 and 3. And they both share a common problem—the code and system do not have a design or have departed from that design.
I find time and time again with most software systems experiencing a slow down in feature development turnaround that the problem is the code itself and the system has lost touch with its original design.
You only find this problem in successful companies though, because…
Sometimes you need to run with your shoelaces untied
I’ve consulted for several startups that eventually failed. There was one thing in common with those startups and many other startups in general—they had a well maintained and cared for codebase.
I’ve seen the best designs and best code in failed startups.
This seems a bit contradictory, I know, but let me explain.
The problem is that often these startups with pristine and well maintained code don’t make it to market fast enough. They are basically making sure their shoes laces are nicely tied as they stroll down the block carefully judging each step before it is taken.
What happens is they have the best designed and most maintainable product, but it either doesn’t get out there fast enough and the competition comes in with some VB6 app that two caffeine fueled not-really-programmers-but-I-learned-a-bit-of-code developers wrote overnight or they don’t actually build what the customer wants, because they don’t iterate quick enough.
Now am I saying that you need to write crap code with no design and ship it or you will fail?
Am I saying that you can’t start a company with good software development practices and a clean well maintainable codebase and succeed?
No, but what I am saying is that a majority of companies that are successful are the ones that put the focus on customers and getting the product out there first and software second.
In other words if you look at 10 successful companies over 5 years old and look at their codebase, 9 of them might have some pretty crappy or non-existent architecture and a system that departed pretty far from the original design.
Didn’t you say something about pulling up your pants?
Ok, so where am I driving at with all this?
Time for an analogy.
So these companies that are winning and surviving past year 5, they are usually running. They are running fast, but in the process of running their shoelaces come untied.
They might not even notice the shoelaces are untied until the first few times they step on one and trip. Regardless they keep running. And to some degree, this is good, this is what makes them succeed when some of their failed competitors do take the time to tie their shoelaces, but those competitors end up getting far behind in the race.
The problem comes pretty close to after that 5 year mark, when they want to take things to the next level. All this time they have been running with those shoelaces untied and they have learned to do this kind of wobble run where they occasionally trip on a shoe lace, but they try to keep their legs far enough apart to not actually step on a shoelace.
It slows them down a bit, but they are still running. Still adding those features fast and furious.
After some time though, their pants start to fall down. They don’t really have time to stop running and pull up those pants, so as they are running those pants slip further down.
Now they are really running funny. At this point they are putting forth the effort of running, but the shoelaces and pants are just too much, they are moving quite slow. An old woman with ankle weights power walks past them, but they can’t stop now to tie the shoelaces and pull up those pants, because they have to make up for the time they lost earlier when the pants first fell down.
At this point they start looking for ways to fix the problem without slowing down and pulling up the pants. At this point they try running different ways. They try skipping. Someone gets the idea that they need more legs.
I think you get the idea.
What they really need to do at this point though is…
Stop running, tie your shoes and pull up your pants!
Hopefully you’ve figured out that this analogy is what happens to a mature system’s code base and overall architecture.
Over time when you are running so fast, your system ends up getting its shoelaces undone, which slows you down a little. Soon, your system’s pants start to fall down and then you really start to slow down.
It gets worse and worse until you are moving so slow you are actually moving backwards.
Unfortunately, I don’t have a magic answer. If you’ve gotten the artificial speed boost you can gain from neglecting overall system design and architecture, you have to pay the piper and redesign that system and refactor it back into an architecture.
This might be a complete rewrite, it might be a concerted effort to get things back on track. But, regardless it is going to require you to stop running. (Have you ever tried to tie your shoelaces while running?)
Don’t feel bad, you didn’t do anything wrong. You survived where others who were too careful failed. Just don’t ignore the fact that your pants are at your ankles and you are tripping over every step, do something about it!