Skip to content

Latest commit

 

History

History
444 lines (321 loc) · 35.7 KB

the-passionate-programmer.markdown

File metadata and controls

444 lines (321 loc) · 35.7 KB

The Passionate Programmer: Creating a Remarkable Career in Software Development

by Chad Fowler

Introduction

  • According to the U.S. Bureau of Labor Statistics, the average American spends half their waking time at work.
  • If your life is primarily consumed by your work, then loving your work is one of the most important keys to loving your life.
  • Once we have basic human needs like food and shelter taken care of, most of our goals are geared toward finding happiness.

Failure Is Off The Radar!

  • A person who wants to be great is far more likely to become great than someone who just wants to do their job.

You Own It

  • To excel at a company, you have to understand how you fit into the business's plan to make money.
  • Your company is investing in you. Your challenge is to become an obviously good investment, and to judge your own performance in terms of the value you bring to the business.

Part 1: Choosing Your Market

  • Many of us just float down the stream of our careers, letting the current take us where it may.
  • If you think of your career as a business (which it is), then your "product" is made up of the services you have to offer.

Tip 1: Lead or Bleed?

  • The risk-reward trade-off is an important part of making intentional choices about which technologies and domains to invest in.
  • Picking a stable technology that's already widely used in production is safer, but potentially less rewarding, than picking a flashy new technology not yet deployed.
  • Old systems don't just die, but are replaced. As a technology hospice, you are the last one left to support still-critical systems, and can pretty much call the shots.

Tip 2: Supply and Demand

  • The supply-and-demand model predicts how price changes will affect the number of people willing to sell and purchase a product or service.
  • Offshore companies do work that is in high demand. So by focusing on niche technologies, you might change the focus of the competition from price (which you cannot compete on) to ability.
  • The lower price of offshore programmers drives down the overall price, thereby increasing overall demand – including a higher bracket of developers.
  • The most important lesson from the supply and demand model is that with increased demand comes increased price competition.

Tip 3: Coding Don't Cut It Anymore

  • If you want to stay relevant, you must dive into the domain of the business you're in.
  • You might be "just a programmer," but being able to speak to your business clients in the language of their business domain is a critical skill.
  • Business domains can become hot, just like technologies. Put the same care into selecting which industry to serve as you put into which technologies to master.
  • Find industry web sites you can monitor, and think about how current trends affect your company, your division, your team, and your work.

Tip 4: Be the Worst

  • Being the worst guy in the band means always playing with people who are better than you.
  • Similarly, being the worst guy or gal on the team has the same effect as being the worst guy or gal in the band. You find that you inexplicably get smarter.

Tip 5: Invest in Your Intelligence

  • Good people seek out diversity, either because they love to learn new things, or being forced into alien experiences creates more mature and well-rounded software developers.
  • Exposure to fringe technologies makes you deeper, better, smarter, and more creative.

Tip 6: Don't Listen to Your Parents

  • Your parents will give you fear-driven advice that optimizes for not losing. But winners take risks.
  • If your job isn't fun, then you won't do a fantastic job at it. Because passion leads to excellence, and without fun there won't be passion.
  • The more domains you've seen and technical architectures you've slogged through, the more prepared you are to make the right decisions on tougher projects.
  • Take calculated risks in your career, and don't let fear consume you.

Tip 7: Be a Generalist

  • Things change in a business, and businesspeople know that software is malleable and can be changed to meet changing requirements.
  • In such a rapidly changing environment, flexible people that can solve any problem that arises will excel.
  • If the programmers don't understand what a system is supposed to do, then they won't be able to create a good implementation of it – regardless of any requirements, architecture, or design documents.
  • If you want to be the last person standing after layoffs, then you had better make yourself generally useful.
  • If you want to stand out and be remarkable, then wrapping your head around The Big Picture is where it's at.
  • When it comes to hierarchical boundary crossing, it's most often not reluctance that stops people from doing it – it's ability.
  • Longevity requires that you are platform neutral in the workplace. We all have our preferences, but leave your ideals at home.

Tip 8: Be a Specialist

  • The software industry has churned out a lot of shallow specialists, who use the term specialist as an excuse for only knowing one thing.
  • Strive to be a specialist with a deep understanding of some specific area in the software field.

Tip 9: Don't Put All Your Eggs in Someone Else's Basket

  • We fool ourselves into thinking market leader is the same thing as standard. This helps us rationalize making another company's product part of our identity.
  • You can build a business that exists as a parasite of another, but it's risky for an individual. You don't have the bandwidth or surplus of cash to suddenly change career direction or focus like a company would.
  • The professional services barrier is the artificial barrier that a company erects between you and the solution to a problem you may have so that it can profit from selling you support services.

Tip 10: Love It or Leave It

  • You have to be passionate about your work if you want to be great at your work. If you don't care, it will show.
  • Many people have no idea why they are in the IT field, and their performance on the job reflects it.
  • Natural talent plays a big role in ability, but we can all take a big step away from mediocrity by finding work that we are passionate about.
  • You can fake it for a while, but a lack of passion will catch up with you and your work.

Part 2: Investing in Your Product

  • To have a great product to sell on the job market, you must invest in that product.
  • In business, ideas and even talent are a dime a dozen. It's the blood, sweat, tears, and money you pour into a product that makes it really worth something.

Tip 11: Learn to Fish

  • Education requires both a teacher and a student, and many of us are too often reluctant to be a student.
  • Don't be at the mercy of others for expertise in tools or technology. Don't take expertise of these things for granted.
  • Someone ignorant of their business domain lets mistakes slip through that should be easily caught, and will be slower than someone who understands the business.
  • Ask yourself "How does this work?" and "Why does this happen?" to learn about things. Moreover this puts you in a new frame of mind and generates a higher level of awareness about your work environment.
  • Pick a critical tool you use, and then allot yourself time each day to learn one new thing about it that will make you more productive.

Tip 12: Learn How Businesses Really Work

  • The basics of business finance is one body of knowledge that is neither technical nor domain-specific and won't be outdated anytime soon.
  • You work for a business, and your job is to contribute to either making or saving money for that business.
  • You cannot creatively help a business be profitable if you don't even understand how the business works.
  • Understand whether your organization is a cost center or a profit center.

Tip 13: Find a Mentor

  • The first and most important purpose that a mentor serves is that of a role model.
  • A role model sets the standard for what "good" means. Without a role model, there's no incentive to get better.
  • A mentor can give structure to your learning process, helping you take some of the choice out of what to focus your energies on.
  • A mentor is someone you can trust enough to ask "What should be different about me as a professional?" because they'll not only criticize you, but help you improve.
  • As a mentor, your role is to help someone, and so you become invested in that person's success. Their success is your success as well.
  • A mentor becomes a positively reinforced connection from you to his or her network, because it's not what you know, but whom you know.
  • Find a role model, and define the ten most important attributes of them. Devise concrete tasks to improve on attributes you perceive as very important but you are unskilled at.

Tip 14: Be a Mentor

  • There is no better way to crystallize your understanding of something than to make it understandable and teachable to someone else.
  • When you teach, you have to answer questions that may never have occurred to you.
  • You find a mentee not by proclaiming yourself a guru but by being knowledgeable and willing to patiently share that knowledge.
  • Mentoring is about people, and so an online mentoring relationship can never compare to one that happens between two people in the same place.

Tip 15: Practice, Practice, Practice

  • In the computer industry, it's common to find developers stretched to their limits.
  • Our industry tends to practice on the job, but like many professionals, we need to make time for practice.
  • If we're going to compete based on quality, we have to stop treating our jobs as a practice session. We have to invest the time in our craft.
  • If you sit down to practice coding and nothing elegant comes out, you're probably not near the edges of your capabilities, where a good practice session should place you.
  • To sight read code would mean to understand what you're looking at as quickly as possible.
  • To sharpen your mind and improve your improvisational coding skills is to pick a program, and to write it with self-imposed constraints.

Tip 16: The Way That You Do It

  • Take your eye off the process of developing software, and you risk delivering late, delivering the wrong thing, or not delivering at all.
  • For a software process to have any chance of being implemented successfully, it has to be embraced by the people who are using the process.
  • The best way to feel ownership of processes is to help implement them.
  • The methodology world is full of buzzwords, but you can always learn something from the study of a software process – even if it's what not to do.
  • The best process to follow is the one that makes your team most productive and results in the best products.
  • Study the available options, pick out the pieces that make sense to you and your team, and continuously refine them based on real experience.
  • It's much easier to find someone who can make software work than it is to find someone who can make the making of software work.

Tip 17: On the Shoulders of Giants

  • Studying the work of masters is an essential part of becoming a master.
  • Even more important than finding solutions to specific problems is the use of existing code as a magnifying mirror to inspect our own style and capabilities.
  • By looking at the code of others with a critical eye, you will start to develop your own tastes, just as you would for music, art, or literature.

Tip 18: Automate Yourself into a Job

  • To increase software development throughput, you can get faster people to do the work, get more people to do the work, or automate the work.
  • To provably make better software faster and cheaper than your offshore competition, automate your work.

Part 3: Executing

  • You likely work for an institution that tries to make money. Your job is to do something to help the organization meet that goal.
  • To be successful, raw ability will only get you so far. The final stretch is populated by closers – people who finish things.

Tip 19: Right Now

  • Parkinson's law states that "Work expands so as to fill the time available for its completion."
  • Even a manufactured sense of urgency allows you to double or triple your productivity. You get it done instead of talking about getting it done.
  • Always be the one to ask "But what can we do right now?"

Tip 20: Mind Reader

  • Doing what your customers ask for will satisfy them. But doing more than they ask for, or doing things before they even ask it, will delight them.
  • To hedge, only do the guesswork that you can fit in between the cracks of your normal job so the impact is little to none.
  • People who can keep a project moving in the right direction without given much guidance are highly valued and appreciated by their overworked managers and customers.

Tip 21: Daily Hit

  • Becoming a standout performer is more likely with some specific and intentional work. Ask how you can increase the visible instances of this behavior.
  • When you start to search for outstanding accomplishments, you naturally evaluate and prioritize your activities based on their business value.
  • Tracking hits, or accomplishments, at a reasonably high frequency will ensure that you don't get stuck. Moreover you get addicted to achieving them daily.

Tip 22: Remember Who You Work For

  • It's hard to align your work with the goals of the business when you're buried under so many organizational layers that you hardly know what your business is.
  • Start by aligning your team, which is small and focused enough that you can conceptually wrap yourself around it.
  • Or else ask your manager: In a well-structured environment, your manager's goals are your team's goals, and so solving your manager's problems solves your team's problems.
  • Your manager's goals are also his or her manager's goals, and so on up to the CEO – and so doing your small part helps fulfill the company's goals.
  • A job well done by the team is a job well done by the manager. Your manager may share credit for your work, but he or she reciprocates with performance reviews, raises, and promotions.
  • Understand your manager's goals for the team over the coming month, quarter, and year. Prioritize your work based on these goals.

Tip 23: Be Where You're At

  • If you spend your time mentally living in your next role or your next job, you're usually doing a mediocre job in your current role.
  • If you're a mediocre performer with a bad attitude and you're convinced you have "high potential," beware: Your company doesn't make money because of potential.
  • Furthermore, your attitude makes your managers want to stop investing in you.
  • Even if you finally land that promotion you've been dreaming about, you'll quickly grow tired and realize that it's not this job you were meant for – but the next one.
  • Keeping your mind focused on the present gets you further toward your goals than keeping your mind focused on the goal itself.
  • Focusing on the present allows you to enjoy the small victories of daily work life.
  • By focusing on the present you'll feel better, those around you will feel it as well, and it will show in your work.

Tip 24: How Good a Job Can I Do Today?

  • Boring work is usually boring for two reasons: It isn't a creative outlet, and it's not challenging.
  • To make boring work both creative and challenging, make it a goal to do the boring stuff perfectly.
  • Look at your workday and ask yourself "How good a job can I do today?"

Tip 25: How Much Are You Worth?

  • Assuming you cost your employer twice your salary, ask whether your positive impact on the company's bottom line is bigger than that number.
  • You work for a business, and unless you provide some real value, you are a waste of money. Salary increases are not an entitlement.
  • To make how much value you add concrete, ask your manager about how to best quantify it.
  • The time value of money says that a dollar today is worth more than a dollar next year, because the dollar today can be used to make more dollars.
  • Many investments have to yield an agreed-upon percentage in an agreed-upon period of time, or they aren't made. This is called the hurdle rate.

Tip 26: A Pebble in a Bucket of Water

  • In few cases does a company feel a significant impact from an employee's departure. Even in critical positions, the effect is surprisingly low.
  • If you left tomorrow, the difference would be (on the average) no more or no less impactful than if any of your co-workers left.
  • The more successful you are, the more likely you are to make a fatal mistake. You become arrogant, and with arrogance you develop blind spots.
  • Attempting to be irreplaceable is a defensive maneuver that creates a hostile relationship with your employer where one may not have already existed.
  • For any code or task where the team depends completely on you, document, automate, or refactor it so that it can be easily understood by anyone on your team.

Tip 27: Learn to Love Maintenance

  • We crave "project work" over "maintenance work" because we believe it allows us to be creative and is a chance to make steps toward a promotion.
  • When we don't have the constraints of legacy code and lack of funding to deal with, our managers and customers expect more from us.
  • If you don't deliver on project work, you've failed, and suddenly your every move is dictated from above.
  • With maintenance work, you're only expected to keep the software running smoothly and for as little money as possible.
  • As long as you're keeping things running and responding to user requests in a timely fashion, maintenance mode is a place of freedom and creativity.
  • In maintenance mode you can interact directly with customers. So you can build a larger base of advocates in your business, and learn the inner workings of your business.
  • Moreover project work is maintenance: As soon as you've written your first line of code, each additional feature is grafted onto an existing code base.

Tip 28: Eight-Hour Burn

  • Rebranding "forty-hour workweek" to "eight-hour burn" conveys that you should work so relentlessly that there is no way you could work longer than eight hours.
  • When we're tired, we can't think as effectively as when we're rested. We're not as creative and the quality of our work decreases dramatically.
  • When you have too much time to work, your work time reduces significantly in perceived value. In a longer work week, each hour is less precious.
  • With strict barriers on start and end times to your work, you naturally start to organize your tasks more effectively.
  • If you work intensely every day and set boundaries, you'll find that your work doesn't follow you home.

Tip 29: Learn How to Fail

  • A craftsperson is really put to the test when errors arise, but learning to deal with mistakes is a skill that is both highly valuable and difficult to teach.
  • We all make mistakes, so within reason, we don't judge each other on the mistakes we make. We judge each other on how we respond to mistakes.
  • When a mistake happens, follow these rules:
    • Raise the issue as early as you know it. The earlier you expose what you've done, the smaller the negative impact.
    • Take the blame. A problem needs a resolution, and lingering on who's fault it is only prolongs the issue.
    • Offer a solution. Even small and immaterial concrete and attainable goals move things from bad to good, and help rebuild credibility.
    • Ask for help. Your team members, management, and customers will look at you more positively if you can maintain a healthy attitude and set your ego aside.
  • A mistake handled well might make us more loyal customers than we would have been had we never experienced a service problem.

Tip 30: Say "No"

  • The quickest path to missing your commitments is to make commitments that you know you can't meet.
  • A can-do attitude is different from misrepresenting one's abilities: The latter causes problems for both you and your stakeholders.
  • We are programmed to want to always succeed, and saying we can't do something makes it feel like we failed.
  • We know it to be true, but fail to internalize, that "yes" is not always the right answer, and "no" is seldom the wrong answer.
  • If someone has the strength to say "no" when that's the truth, then you know that when they say "yes," they really mean it.
  • A guru in a subject area is never afraid to admit when they don't know something, because "I don't know" is not a phrase for the insecure.
  • The same courage is useful when dealing with decision from above, as people who speak up and offer better suggestions become trusted lieutenants.

Tip 31: Don't Panic

  • If you look back on every "disaster," you'll likely find that not a single one has made a lasting or noticeable impact on you or your career.
  • Panicking creates an inability to perform at your best at the times when you really need to be performing at your best.
  • When something is going wrong, we focus all of our attention on the problem. This makes the problem, no matter how small, seem more important than it is.
  • To reduce panic when something bad happens, analyze the situation from a third-person perspective, and try to laugh at yourself.

Tip 32: Say It, Do It, Show It

  • When you have too much to do, a plan can make the difference between confused ambiguity and clear-headed confidence at the start of a workday.
  • A simple plan that allows you to answer the question "What am I going to do today?" at the start of the day is a great first step.
  • To create such a plan, take time in the afternoon to list in priority order everything you want to get done on the next workday.
  • The larger the time span you're planning for, the higher level your plan should be.
  • Start communicating your plans to management after executing one cycle of the plan. And start doing it before they ask you to do it.
  • Every item in your plan must be completed, delayed, removed, or replaced. No items should go unaccounted for.
  • If items show up on a plan and are never mentioned again, people will stop trusting your plans, thereby counteracting the effectiveness of planning.
  • We all make mistakes. Differentiate yourself by addressing your mistakes or inabilities publicly and ask for help resolving them.
  • Creating and executing plans shows that you are not just a robot typing code, but a leader.
  • If you say what you're going to do and then you do it and show that it's done, you develop a reputation as a doer, and with credibility comes influence.
  • Your leaders want you to have independence and ownership. Making, executing, and communicating plans will help you attain both.

Part 4: Executing

  • A leader must develop teams that deliver maximum value to a company. A leader can't do that without knowing who is capable of doing what kind of work.
  • Manager's don't have time to keep close tabs on what each employee is doing every day. They instead focus on the big picture.
  • Don't assume management knows who you are, or that just because a leader knows your name he or she has the faintest understanding of your capabilities.

Tip 33: Perceptions, Perschmeptions

  • You should care about what other people think of you. Perception is reality.
  • There's no way to objectively measure the quality of a knowledge worker or the quality of their work, so you'll always be measured based on someone else's perception of you.
  • People in different roles and relationships to you build their perceptions based on the qualities most important to making that particular relationship work well.
  • Managing perception is practical: When you explicitly take note of the factors that drive other people's perceptions of you, you more firmly discover how to make them happy customers.

Tip 34: Adventure Tour Guide

  • It's obvious, but the most important aspect of getting the word out in the workplace is your ability to communicate.
  • Customers (or managers) are looking to you to make them comfortable about the project they're working on.
  • You must be your customer's tour guide through the unforgiving terrain of the information technology world. You will make your customers comfortable while guiding them through an unfamiliar place.
  • When promotion and staffing decisions are being made, the best advocate for you is a customer who can't live without you.
  • Don't forget that your customer represents the needs of the business, and you are paid to provide for those needs.

Tip 35: Me Rite Reel Nice

  • In one report, more than half of responding companies consider writing skills when making hiring and promotion decisions.
  • Forty percent of surveyed companies in the service sector said that a third or fewer of their new hires had the writing skills they desired.
  • Even if you're a great coder, you won't be very effective in a distributed team if you can't express yourself in words.
  • Communication, especially through writing, is the bottleneck through which all your wonderful ideas must pass. You are what you can explain.

Tip 36: Being Present

  • Being face to face with your leaders and your customers is an advantage. Don't squander it.
  • We not only see greater productivity and enhanced communication from face-to-face interactions, but we also form tighter bonds.
  • In the majority of cases, the relationship built in a remote work environment will remain strictly centered around accomplishing tasks.
  • The human tendency is to want to work with other humans – not voicemail, email, or instant messaging but actual people.
  • In a distributed environment, if making regular trips for face-to-face meetings is impractical, pick up the phone and call your bosses and co-workers instead.

Tip 37: Suit Speak

  • People who run businesses are interested in business results, so marketing your accomplishments in any language other than the language of the business is ineffective.
  • To sell a product to an audience, you must speak to that audience in a language they can both understand and relate to.
  • As a software developer, that means framing your accomplishments in the context of the business you work for.
  • To put this into practice, make a list of your recent accomplishments and write the business benefit of each.

Tip 38: Change the World

  • When you come to work without a mission, you do only what people tell you to do. And so the only ones who know what you've done are the ones who asked you to do it.
  • You must have a mission to be a good software developer in a high-cost country. You must effect visible change through your team, organization, or company.
  • You must do things you're internally driven to do. It's because you know things could be better, and so you have to change them.
  • If you don't know what your crusade is, you probably don't have one.

Tip 39: Let Your Voice Be Heard

  • Don't think of yourself as a programmer at a specific company, but as a participating member of an industry. You are a craftsperson or an artist.
  • No objective system exists for rating and employing software developers. Being good is important, but doesn't get you all the way there.
  • Publishing and public speaking are the best ways for your name to be propagated and your voice to be heard.
  • Write on the web as if you were writing a feature column for your favorite magazine.
  • More writing leads to more writing opportunities. And all of these lead to the opportunity to speak at conferences.
  • Start sooner than you think you're ready: Most people undersell themselves, and you definitely have something to teach!

Tip 40: Build Your Brand

  • Brand building has two parts: Making your mark so that people will recognize it, and then ensuring it's associated with positive traits.
  • The most potentially destructive force for your brand, or that recognition and respect, is yourself.
  • The things you choose to do and associate with yourself will have a lasting impact on what your name means to people. And Google never forgets.

Tip 41: Release Your Code

  • Open source developers are building a name for themselves, a reputation in the industry, and are marketing themselves in the process.
  • It takes skills in leadership, release management, documentation, and product and community support to foster a community around your efforts.

Tip 42: Remarkability

  • Traditional marketing curricula refer to the four p's of marketing: product, price, promotion, and placement.
  • The goal of marketing is to create a connection between producers and consumers of a product or service.
  • To be remarkable means that something is worthy of attention. You will not become a remarkable software developer by simply being better than all the other software developers you know.
  • To be remarkable, you must be significantly different from those around you.
  • You might be the smartest or the fastest software developer, but just being isn't good enough. You have to be doing something.

Tip 43: Making the Hang

  • Really good people won't mind if you want to know them, because such people like to be appreciated and like to talk about the topics they're passionate about.
  • Most of us are afraid to try and associate with smart, well-connected people who can teach you things or find work – even thought its' best for you.
  • The gurus are the supernodes in the social and professional network, and connecting with them just takes a little less humility.
  • Some of the most influential minds in software development are readily accessible via email or real-time chat.

Part 5: Maintaining Your Edge

  • In your career you must research, invest, execute, market, repeat. Spending too much time in any iteration of the loop puts you at risk of becoming obsolete.

Tip 44: Already Obsolete

  • The more successful your business, the more comfortable you are with your business model, leaving you vulnerable to others with radical ideas.
  • The more mainstream your knowledge, the greater risk you have of being left in the technology stone age.
  • If you're on the bleeding edge of today's wave, you're probably behind on the next one. Start thinking ahead with your study.
  • Learn something on the bleeding edge. Worst case you learn something enriching but not applicable later. Best case you remain ahead of the curve.

Tip 45: You've Already Lost Your Job

  • If your surroundings are changing and the context of your work is constantly moving, clinging to your work creates an unhealthy dissonance that infects your work.
  • Have ambition but don't buy too heavily into a long, imagined future. You cannot afford tunnel vision with something too far off.

Tip 46: Path with No Destination

  • We are a goal-oriented society, obsessed with the outcome of a process. But we spend all our time doing things and little time actually reaching goals.
  • The meat of your career is not promotions and salary advances, but the time you spend working regardless of the advances.
  • If this is the core of your work life – the actual work – then you've already arrived at your destination.
  • A goal-oriented mindset leads only from one goal to the next. It has no logical end, and what most of us fail to realize is that the path is the end.
  • Focusing on the ending makes you forget to make the process good. And bad processes create bad products.
  • Bad products also make bad processes: Once you have one of these products that is messy inside, your processes wrap around it.

Tip 47: Make Yourself a Map

  • Create a road map for your career like for a product, or "your personal product road map." Use it to tell whether or not you've moved in your career.
  • Throw out some markers you can see in the distance, so you'll know that you've moved when you get to them. Your product "features" are these markers.
  • Think of each new set of knowledge or capability as a single feature in an application. An application with one feature isn't much of an application.
  • Moreover, an application with a bunch of features that aren't cohesive is going to confuse its users.
  • Although it's okay to learn diverse skills – it expands your thinking – it's also a good idea to think about the story your skill set tells.

Tip 48: Watch the Market

  • As the conditions of the market change, not paying attention could result in money lost or money that could have been earned missed.
  • The same holds true for your knowledge investments.
  • If you are comfortable in your current job with your current set of skills, you might remain blissfully ignorant of the Next Big Thing as it rolls in.
  • Monitor the alpha geeks, or those super-nerds who are always on the bloodiest tip of the bleeding edge – at least in their hobby activities.

Tip 49: That Fat Man in the Mirror

  • If you're constantly exposed to something, it's hard to see it changing unless change happens rapidly.
  • There is no objective, universal scale for measuring your marketability or skill as a software developer, so you'll have to develop your own.
  • An easy way to measure your progress is to use a trusted third party, such as a mentor or a close colleague.
  • The most important thing is to ferret out your blind spots. You don't have to fix all of them, but you must know where they are.
  • Schedule time for reviews, as you won't reflect unless you make the reflection time explicit.
  • Once you have a system and have scheduled time for reviews, capture the results in writing to concretize them. Review and revise the evaluation often.

Tip 50: The South Indian Monkey Trap

  • Value rigidity is when you believe in the value of something so strongly that you can no longer objectively question it.
  • Not all rigidly held values are good ones. And many times something that is good in one set of circumstances is not good in another.
  • Since we live every day in our careers, it's easy to develop value rigidity in our career choices: We know what has worked, and we keep doing it.
  • Beware of value rigidity leading you to make poor choices in the direction your career is taking or the technologies you advocate and invest in.
  • Do a project in the technology you hate most. Best case you'll learn it isn't that bad, and worst case you'll have better fodder for your arguments.

Tip 51: Avoid Waterfall Career Planning

  • The larger and more complex a project is, the less likely it is to imagine every feature in detail well enough to create a specification.
  • Changing your direction from management to programming, or vice versa, isn't hard. Neither is finding a new company to work for, or moving to a different city.
  • Change is not only possible in your career, but necessary.
  • Set big goals, but make constant corrections along the way. Learn from the experience, and change the goals as you go.

Tip 52: Better Than Yesterday

  • We become demotivated by the complexity of bigger issues and instead turn our attention to things that are easier to measure and easier to quickly fix. This is why we procrastinate.
  • Focus on making whatever it is you're trying to improve better today than it was yesterday. This is an easier goal.
  • Making one small improvement is motivating: You can clearly see the difference in that one thing you've fixed as soon as the change is made.
  • For big, difficult goals, individual improvements won't often lead directly to tangible results. So don't think about getting closer to the goal each day, but doing better in your efforts each day.
  • Make your improvements small but daily. Small improvements also decrease the cost of failure: If you miss a day, you have a new baseline for tomorrow.
  • You can apply this approach to very tactical goals, or you can apply it to the very highest level of goals that you have.

Tip 53: Go Independent

  • The safety blanket of corporate hierarchy slows you down: When you can hide behind the shield of mediocrity in a corporate division, there is less incentive to excel.
  • Becoming an independent contractor is an ultimate test: It's only you, your expertise, and your ability to execute.
  • Going independent also forces you to learn how to market yourself and at the same time tests your choices in domain and technology to focus on.
  • A startup gives you a full-time salary and the challenge of being pitted directly against the unfiltered problems of your business.