Book Summary: The Passionate Programmer

Part I — Choosing Your Market

Lead or Bleed?

You make the risk-reward trade-off when you’re late for a meeting and trying to decide on the right route to work.
The risk-reward trade-off is an important part of making intentional choices about which technologies and domain to invest in.
Both ends of the technology adoption curve might prove to be lucrative

Act on It!

  1. Make a list of early, middle, and late adoption technologies based on today’s market. Map them out on paper from left to right; the left is bleeding edge, and the right is filled by technologies that are in their sunsets. Push yourself to find as many technologies in each part of the spectrum as possible. Be as granular as possible about where in the curve they fall in relation to one another. When you have as many technologies mapped out as you can think of, mark the ones that you consider yourself strong in. Then, perhaps in a different color, mark the ones that you have some experience with but aren’t authoritative on. Where are most of your marks on the adoption curve? Do they clump? Are they spread evenly across? Are there any technologies around the far edges that you have some special interest in?

Supply and Demand

You can’t compete on price. In fact, you can’t afford to compete on price.
When choosing a technology set to focus your career on, you should understand the effects of increased supply and lower prices on your career prospects.
Offshore companies are doing word that is in high demand. So, focusing on niche technologies is a strategy that, although not necessarily making the competition less fierce
Exploit market imbalances — going where the offshore companies won’t go.

Act on it

  1. Research current technical skill demand. Use job posting and career websites to find out which skills are in high demand and in low demand. Find the websites of some offshore outsourcing companies (or talk to employees of those companies if you work with them). Compare the skills available via these companies with the high-demand list you compiled. Make note of which skills appear to be in high demand domestically with little penetration offshore. Do a similar comparison between leading-edge technologies and the skills available via offshore outsourcing firms. Keep your eyes on both sets of technical skills that are underserved by the offshore companies. How long does it take for them to fill the holes (if ever)? This time gap is the window during which a market imbalance exists.

Coding Don’t Cut it Anymore

You’re not going to be able to sit back and simply master a programming language or an operating system, letting the business take care of the business stuff. If all they needed was a code robot, it would be easy to hire someone in another country to do that kind of work. If you want to stay relevant, you’re going to have to dive into the domain of the business your’re in.
In fact, a software person should understand a business domain not only well enough to develop software for it but also to become one of its authorities.
Imaging how much easier life would be if everyone you had to work with really understood how software development works. You wouldn’t have to explain to them why it’s a bad idea to return 30000 records in a single page on a web application or why they shouldn’t pass out links to your development server. This is how your business clients feel about your: Imagine how much easier it would be to work with these programmers if they just understood what I was asking them for without me having to dumb everything down and be so ridiculously specific! It’s the business that pays your salary.
Now is the time to think about your business domains you invest your time in.
Intentional thought to which business domains your should be investing in, now is the time, Each passing day is a missed opportunity. Like leaving your savings in a low-yield savings account when higher interest rates are to be had, leaving your development on the business front in stasis is a bad investment choice.

Act on It!

  1. Schedule lunch with a businessperson. Talk to them about how they do their job. As you talk to them, ask yourself what you would have to change or learn if you aspired to have their job. Ask about the specifics of their daily work. Talk to them about how technology helps them (or slows them down) on the job. Think about your work from their perspective. Do this regularly. Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler CODING DON’T CUT IT ANYMORE 33 This may seem like an awkward or uncomfortable idea. That’s OK. I started doing this several years ago, and it made a huge difference in the way I understood and related to the business I was supporting. I also got more comfortable talking to my customers, which is a positive side effect.
  2. Pick up a trade magazine for your company’s industry. You probably don’t even have to buy one. Most companies have back issues of trade rags lying around somewhere. Start trying to work your way through a magazine. You may not understand everything you read, but be persistent. Make lists of questions you can ask your management or business clients. Even if your questions seem stupid to you, your business clients will appreciate that you are trying to learn. Look for industry websites that you can monitor on a regular basis. In both the websites and the magazines, pay special attention to what the big news items and the feature articles are about. What is your industry struggling with? What’s the hot new issue right now? Whatever it is, bring it up with your business clients. Ask them to explain it and to give you their opinions. Think about how these current trends affect your company, your division, your team, and eventually your work.

Be the Worst

Always be the worst guy in every band you’re in.
Being the worst guy in the band brought out the same behavior in me as a saxophonist. I would naturally just play like everyone else.
The people around you affect your own performance. Choose your crowd wisely.
You find that you’re unexplainably smarter. You even speak and write more intelligently. Your code and designs get more elegant, and you find that you’re able to solve hard problems with increasingly creative solutions.
You might belong in the A band but always put yourself in the B band, because you’re afraid. Even when your try to be the worst, you won’t actually be.

Act on It!

  1. Find a “be the worst” situation for yourself. You may not have the luxury of immediately switching teams or companies just because you want to work with better people. Instead, find a volunteer project on which you can work with other developers who will make you better via osmosis. Check for developer group meetings in your city, and attend those meetings. Developers are often looking for spare-time projects on which to practice new techniques and hone their skills. If you don’t have an active developer community nearby, use the Internet. Pick an open source project that you admire and whose developers appear to be at that “next level” you’re looking to reach. Go through the project’s to-do list or mailing list archives, pick a feature or a major bug fix, and code away! Emulate the style of the project’s surrounding code. Turn it into a game. Make your design and code so indistinguishable from the rest of the project that even the original developers eventually won’t remember who wrote it. Then, when you’re satisfied with your work, submit it as a patch. If it’s good, it will be accepted into the project. Start over, and do it again. If you’ve made decisions that the project’s developers disagree with, either incorporate their feedback and resubmit or take note of the changes they make. On your next patch, try to get it in with less rework. Eventually, you’ll find yourself to be a trusted member of the project team. You’ll be amazed at what you can learn from a remote set of senior developers, even if you never get a chance to hear their voices.

Invest in Your Intelligence

I haven’t been given the opportunity…? Seize the opportunity.

Act on It!

  1. Learn a new programming language. But, don’t go from Java to C# or from C to C++. Learn a new language that makes you think in a new way. If you’re a Java or C# programmer, try learning a language like Smalltalk or Ruby that doesn’t employ strong, static typing. Or, if you’ve been doing object-oriented programming for a long time, try a functional language like Haskell or Scheme. You don’t have to become an expert. Work through enough code that you truly feel the difference in the new programming environment. If it doesn’t feel strange enough, either you’ve picked the wrong language or you’re applying your old way of thinking to the new language. Go out of your way to learn the idioms of the new language. Ask old-timers to review your code and make suggestions that would make it more idiomatically correct.

Don’t Listen to Your Parents

Fear-driven advice is geared toward not losing. Thinking about not losing is not the way to win! Winner tak risks. They think about where they want to go — not where the rest of the pack is. Fear-driven career planning is more likely to land you in a cubicle farm for the rest of your life than on the path to greatness. Sure, it’s safe, but it’s no fun.
But if your job isn’t fun, as we’ve come to realize, you don’t do a fantastic job at it.
I worked on harder problems, and I was rewarded more heavily than ever before. It was scary at times, but when I decided to be less fear-driven and conservative in my career choice, the shape and tone of my career — mylife — changed for the better.

Act on It!

  1. What are your biggest career fears? Think about the last few career choices you made. They don’t have to be big decisions (after all, if you’re making fear-driven choices, your decisions likely aren’t big anyway). They could be whether you took on special assignments or whether you applied for a job change or promotion. Make a list of these choices, and, for each one, force yourself to make an honest assessment: how much was your decision driven by fear? What would you have done if fear had not been a factor? If the decision was indeed fear-driven, how can you reverse it or find a similar opportunity in which to make the less fear-driven choice?

Be a Generalist

Generalists are rare…and, therefore, precious.
Your skills should beyond technology platforms.

Act on It!

  1. On a piece of paper or a whiteboard, list the dimensions on which you may or may not be generalizing your knowledge and abilities. For each dimension, write your specialty. For example, if Platform and Operating System is one of your dimensions, you might write Windows/.NET next to it. Now, to the right of your specialty, write one or more topics you should put into your “To Learn” list. Continuing with the same example, you might write Linux and Java (or even Ruby or Perl). As soon as possible (some time this week at the latest!), find thirty minutes of time to start addressing at least one of the “To Learn” items on your list. Don’t just read about it. If possible, get some hands-on experience. If it’s web technology, then download a web server package and set it up yourself. If it’s a business topic, find one of your customers at work and ask them to go out for lunch for a chat.

Be a Specialist

Too many of us seem to believe that specializing in something simply means not knowing about other things.
Most software developers aren’t responsible for life-or-death situations. If they happen to mess up, it typically results in project overruns or production bugs that simply cost their employers money, not lives.

Act on It!

  1. Do you use a programming language that compiles and runs on a virtual machine? If so, take some time to learn about the internals of how your VM works. For Java, .NET, and Smalltalk, many books and websites are devoted to the topic. It’s easier to learn about than you think. Whether your language relies on a VM or not, take some time to study just what happens when you compile a source file. How does the code you type go from being text that you can read to instructions that a computer can execute? What would it mean to write your own compiler? When you import or use external libraries, where do they come from? What does it actually mean to import an external library? How does your compiler, operating system, or virtual machine link multiple pieces of code together to form a coherent system? Learning these facts will take you several steps closer to being an expert specialist in your technology of choice.
  2. Find an opportunity — at work or outside — to teach a class on some aspect of a technology that you would like to develop some depth in. As you’ll see in Be a Mentor, teaching is one of the best ways to learn

Don’t Put All Your Eggs in Someone Else’s Basket

This guy wanted to build his career around a specific technology created by a specific company of which he was not an employee.
Wo fool ourselves into thinking market leader is the same thing as standard.
Vendor-centric views are typically myopic.

Act on It!

  1. Try a small project, twice. Try it once in your home base technology and then once, as idiomatically as possible, in a competing technology.

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.
This was the difference between me and my overeducated, underperforming colleagues at work. Passion.
Work because you couldn’t not work.
We can’t all be Mozart or Coltrane. But, we can all take a big step away from mediocrity by finding work we are passionate about.
It might be a technology or business domain that gets your excited. Or, on the other hand, it might be a specific technology or business domain that drag your down. Or a type of organization. You’re meant for small teams or big teams. Or rigid processed. Or agile process. What ever the mix, take some time to find yours. You can fake it for a while, but a lack of passion will catch up with you and your work.

Act on It!

  1. Go find a job you’re actually passionate about.
  2. Starting next Monday, keep two weeks of a simple log. Every workday when you wake up, rate your level of excitement on a scale from 1 to 10–1 means you would rather come down with an actual sickness than go to work, and 10 means you could hardly stay in bed because you were consumed by the idea of getting the next thing done. After two weeks of keeping this log, review the results. Were there spikes? Were there trends? Was it all low or all high? What would your average grade be if this were a school test? For the next two weeks, every morning plan how you’re going to make tomorrow a 10. Plan what you’re going to do today to make tomorrow one of those workdays you can’t wait to start. Each day, log yesterday’s excitement level. If after two weeks things are looking sad, it might be time to consider a major change.

Part II— Investing Your Product

Alway wanted to be able to do it. One technique leads to the next, and one barrier-breaking practice session motivates the next.
You’re going to have to invest in that product. Inbusiness, ideas and even talent are a dime a dozen. It’s the blood, sweat, tears, and money you pour into a product that make it really worth something.

Learn to Fist

Don’t wait to be told. Ask!
Many of the best software people I’ve worked with over the years have become more expert in their domains than even some of their business clients.
Ask for a fish; eat for a day. Ask someone to teach you to fish; eat for a lifetime. Better yet, don’t ask to be taught — go learn for yourself.

Act on It!

  1. How and why? — Either as you sit here reading or the next time you’re at work, think about the facets of your job that you may not fully understand. You can ask yourself two extremely useful questions about any given area to drill down into the murky layers: How does it work? and Why does this (have to) happen? You may not even be able to answer the questions, but the very act of asking them will put you into a new frame of mind and will generate a higher level of awareness about your work environment. How does the IIS server end up passing requests to my ASP.NET pages? Why do I have to generate these interfaces and deployment descriptors for my EJB applications? How does my compiler deal with dynamic vs. static linking? Why do we calculate tax differently if a shopper lives in Montana? Of course, the answer to any of these questions will lead to another potential opportunity to ask the question again. When you can’t go any further down the how and why tree, you’ve probably gone far enough.
  2. Tip time — Pick one of the most critical but neglected tools in your toolbox to focus on. Perhaps it’s your version control system, perhaps a library that you use extensively but you’ve looked into only superficially, or maybe the editor you use when programming. When you’ve picked the tool, allot yourself a small period of time each day to learn one new thing about the tool that will make you more productive or put you in better control over your development environment. You may, for example, choose to master the GNU Bourne Again Shell (bash). During one of those times when your mind starts to wander from the task at hand, instead of loading up Slashdot, you could search the Internet for bash tips. Within a minute or two, you should find something useful that you didn’t know about how to use the shell. Of course, now that you have a new trick, you can dive into its guts with a series of Hows and Whys. Report

Learn How Businesses Really Work

We worked for a business, and our job was to contribute to either making or saving money for that business.
You can’t creatively help a business until you know how it works.

In the business world, we hear the phrase bottom line all the time. How many of us truly understand what the bottom line is and what contributes to it? More important, how many of us really understand how we contribute to to bottom line? Understanding the financial drivers — and language — of your company will give you the ability to make meaningful changes.

Act on It!

  1. Go get a book on basic business, and work through it. A trick for finding a good overview book is to look for books about getting a master’s of business administration (MBA) degree. One such book that I found particularly useful (and pleasantly short) is The Ten-Day MBA [Sil99]. You can actually get through it in ten days. That’s not a very big investment.
  2. Ask someone to walk you through the financials of your company or division and explain them to you (if this is information your company doesn’t mind sharing with its employees).
  3. Explain them back.
  4. Find out why the bottom line is called the bottom line.

Find a Mentor

It’s OK to depend on someone. Just make sure it’s the right person.
Just being able to beat the people in your immediate family might feel pretty good. But, if you played with a tournament player, you would find that chess is a much deeper game than you ever knew. If you were to play with a grand master, you’d have another such revelation. If you keep playing with, and beating, your immediate family members, you might get the idea that you’re really good at chess. With out a role model, there’s no incentive to get better.
Being more experienced and already successful, a person in such a role would have the respect of a significant network of people. The mentor becomes a positively reinforced connection from you to his or her network. It’s not what you know. It’s who you know.

Act on It!

  1. Mentoring yourself — We’d all ideally have someone to actively mentor us, but the reality is that we won’t always be able to find someone in the same location that we can place in this role. Here’s a way to proxy-mentor yourself. Think of the person in your field whom you admire most. Most of us have a short list already formulated from some stage in our careers. It may be someone we’ve worked with, or it may Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler FIND A MENTOR 73 be someone whose work we admire. List the ten most important attributes of this role model. Choose the attributes that are the reason why you have chosen this person to be your role model. These attributes might be specific areas of skill, such as technology breadth, or the depth of their knowledge in some particular domain. Or, they might be more personal traits like the ability to make team members comfortable or that they are an engaging speaker. Now, rank those qualities in order of importance, with 1 being the least important and 10 being the most important. You have now created and distilled a list of attributes that you find admirable and important. These are the ways in which you should strive to emulate your chosen role model. But, how do you choose which to focus on first? Add a column to the list, and for each item on the list, imagine how your role model would rate you on a scale of 1 to 10 (10 being the best). Try to really put yourself into the mind of your role model and to observe yourself as if a third person. When you have the attributes, ranking, and your own ratings, in a final column subtract your rating in each row from the importance level you gave it in the preceding column. If you ranked something as 10, the most important attribute of your role model, and your rating was 3, that gives you a final priority score of 7. Having filled this column in completely, sorting in descending order will you give a prioritized top ten list of areas in which you need to improve. Start with the top two or three items, and put together a concrete list of tasks you can start doing now to improve yourself.

Be a Mentor

There’s no better way to crystallize your understanding of something than to force yourself to express it to someone else so that they can understand it.
Whenever he wants to really learn about something, he writes about it. TO find out whether you really know something try teaching it to someone else.
Knowing facts is not the same as understanding their causes and ramifications. It’s this kind of deeper understanding we develop by teaching other.
When you teach, you have to answer questions that may have never occurred to you.
When you are in a mentoring relationship with someone, you form an allegiance with each other. A network of this kind is a great place to circulate difficult problems or look for work.
Mentors tend not to get laid off.
You find a mentee not by going out and declaring yourself a guru but by being knowledgeable and willing to patiently share that knowledge.

You don’t have to set up a formal mentoring relationship to get these benefits. Just start helping people, and the rest will come naturally.

Act on It!

  1. Look for someone to take under your wing. You might find someone younger and less experienced at your company, perhaps an intern. Or, you could talk to the computer science or information systems department at your local university and volunteer to mentor a college student.
  2. Find an online forum, and pick a topic. Start helping. Become known for your desire and ability to patiently help people learn.

Practice, Practice, Practice

When you practice music, it shouldn’t sound good. If you always sound good during practice sessions, it mean you’re not stretching your limits.
Athletes push themselves to the limit during workouts so they can expand those limits for the real performance. THey let the ugliness happen behind closed doors — not when they’re actually working.
If we’re going to try 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 I sat down to practice and nothing but pretty sound came out, I’d know I wasn’t practicing. Likewise, if I sit down to practice coding and nothing but elegant code comes out, I’, probably sitting somewhre near center of my current capabilities instead of the edges, where a good practice session should place me.
Practice at your limits.
Go look at the to-do list for a piece of software you’d like to practice with, and give yourself a constrained amount of time to implement the new feature. After choosing a feature, download the source code for the software, and start exploring. How do you know where to look? What tricks do you use to find your way around a significant body of code?
The real goal is to understand what you’re looking at as quickly as possible
Improvisation: Improvisation is taking some structure or constraint and creating something new, on the fly, on top of that structure.
A great way to sharpen the mind and improve your improvisational coding skills is to practice with self-imposed constraints. Pick a simple program, and try to write it with these constraints.
The important thing is to find your practice needs and to make sure you’re not practicing during your performances. Your have to make time for practice. It’s your responsibility.

Act on It!

  1. TopCoder — TopCoder.com is a long-standing programming competition site. You can register for an account and compete online for prizes. Even if you’re not interested in competing with others, TopCoder offers a practice room with a large collection of practice problems that you can use as excellent fodder for your practice sessions. Go sign up, and give it a try. Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler PRACTICE, PRACTICE, PRACTICE 80
  2. Code Kata — Dave Thomas, one of the Pragmatic Programmers (our beloved publisher), took the idea of coding practice and made something…well, pragmatic out of it. He created a series of what he calls Code Kata, which are small, thought-provoking exercises that programmers can do in the language of their choice. Each kata emphasizes a specific technique or thought process, providing a concrete flexing of one’s mental muscles. At the time of this printing, Dave has created twenty-one such kata and has made them available for free on his weblog (http:// codekata.pragprog.com/). On the weblog, you’ll also find links to a mailing list and to others’ solutions to the exercises along with discussion about how the problems were solved. Your challenge: work through all twenty-one kata. Keep a diary (perhaps a weblog?) of your experiences with the kata. When you’ve finished working through all twenty-one exercises, write your own kata, and share it with others.

The Way That You Do It

A lot of thought has been put into the process of making good software(and products in general) Much of this prior art has been codified into a group of methodologies.
If you want to feel your own a process, help implement it.
You might work in an environment where a process is passed down from on high. The practices have often been watered down and reinterpreted to the point where they’re unrecognizable from the originals.
The best process to follow is the one that makes your team most productive and results in the best products.
If you can’t do the process, you can’t do the product. 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. So, adding knowledge of the software development process to your arsenal can only help you.

Act on It!

  1. Pick a software development methodology, and pick up a book, start reading websites, and join a mailing list. Look at the methodology with a critical eye. What do you think would be its strong and weak points? What would be the barriers to implementing it where you work? Next, do the same with another. Contrast their strengths and weaknesses. How could you combine their approaches?

On the Shoulders of Giants

Mine existing code for insights.
Design patterns have formalized the study of existing code, making the practice accessible to a great number of software professionals
Even more important than finding solutions to specific problems is the use of existing code as a magnifying a mirror to inspect our own style and capabilities.
As you’re reading through code, you will find things that you would have never done. You will find thing might have never even thought of. Why? What was the developer thinking? What were his or her motivations? You can even learn from bad code with this kind of critical, self-aware exploration of an existing work.
As you look at this code with a critical eye, you will start to develop your own tastes, just as you would for music, art, or literature. Various styles and devices will amuse you, amaze you, anger you, and challenge you. You’ll find everything from tricks that make you more productive to design paradigms that completely change the way you approach a class of problems.
A positive side effect of reading code is that you will learn more about what already exists. When you have a new problem that needs solving, you might remember that “ Oh, I saw a library that implements MIME type handling in such and such project.”

Act on It!

  1. Pick a project, and read it like a book. Make notes. Outline the good and the bad. Write a critique, and publish it. Find at least one trick or pattern that you can use from it. Find at least one bad thing that you observed that you will add to your “What not to do” checklist when you’re developing software.
  2. Find a group of like-minded people, and meet once a month. Each session have someone nominate some code to study — 2 lines to 200 lines. Break it down. Discuss what’s behind it. Think of the decisions that went into it. Ponder the code that isn’t there.

Automate Yourself into a Job

Automation is part of the DNA of our industry.
So, imagine your company is in the business of creating websites for small businesses. You basically need to create the same site over and over again, with contacts, surveys, shopping carts, the works. You could either hire a small number of really fast programmers to build the sites for you, hire an army of low-cost programmers to do the whole thing manually and repetitively, or create a system for generating the sites.

Act on It!

  1. Pick a task you normally do repetitively, and write a code generator for it. Start simple. Don’t worry about reusability. Just make sure your generator saves you time. Think of a way to raise the level of abstraction of what you are generating.
  2. Research model-driven architecture (MDA). Try some of the available tools. Look for somewhere in your work to apply the concepts of MDA if not the full toolset. Think about applying MDA concepts with just the tools you use every day

From IT Consultant to Managing Director

The lesson here is that if you ever need to get in touch with a venture capitalist, work hard on getting a warm referral since it is the best ay to get one’s foot in the door.
I positioned this as a low-risk proposition for them by not asking them for a long-term commitment (analogous to a try-before-you-buy program_.

Part III — Executing

Right Now

How is that an application of similar scope to those we spend weeks working on in the office is going to get finished in a single weekend?
At design reviews and status meetings in the office, you’ve often day dreamed about taking a small team out of the bureaucratic environment and ripping through the creation of a new application in record time.
What can we do right now?
A sense of urgency, even if manufactured, is enough to easily double or triple your productivity. Try it, and you’ll see. You can do it faster. You can do it now. You can get it done instead of talking about getting it done.
If you treat your projects like a race, you’ll get to the end a lot faster than if you treat them like a prison cell.

Act on It!

  1. Look at your proverbial plate. Examine the tasks that have been sitting on it for a long time, the projects that are starting to grow mold, or the ones you’ve been just a little bit stuck on — perhaps in bureaucracy, perhaps in analysis paralysis. Find one that you could just do in between the cracks of your normal work, when you would normally be browsing the Web, checking your e-mail, or taking a long lunch. Turn a multimonth project into a less-than-one-week task.

Mind Reader

He had this uncanny ability to predict what you were going to ask him to do and do it before you thought of it.
The trick was that he was only doing things that I had already said I wanted. I had just said them in ways that were.
Mind reading not only applies to your managers but also to your customers.
The mind-reading trick, if done well, leads to people depending on you.
If you always do what your customers ask for when they ask for them, you will satisfy your customers. However, if you do more than that they ask for or your have already done things before they ask, you will delight them
Avoid mind-reading work that may force the system down a particular architectural path or limit what the system can do in someway.
Makes it less functional or desirable to the customre. Beware of guessing when it comes to user interfaces especially.

Act on It!

  1. An early reviewer for this book, Karl Brophey suggests that for your next project or a system you maintain, start making some notes about what you think your users and managers are going to ask for. Be creative. Try to see the system from their points of view. After you have a list of the not-so-obvious features that might come up, think about how you could most effectively implement each feature. Think about edge cases that your users might not immediately have in mind. As you get into the project or enhancement requests, track your hit rate. How many of your guesses turned out to be features you were actually asked to implement? When your guessed features did come up, were you able to use the ideas you came up with in your brainstorming session?

Daily Hit

Have an accomplishment to report every day.
Each day have some kind of outstanding accomplishment to report to his manager.
Simply setting a goal and tracking this type of accomplishment can radically change your behavior. When you start to search for outstanding accomplishments, you naturally go through the process of evaluating and prioritizing your activities based on the business value of you migh work on.
If you’re supposed to produce a hit per day, you can’t spend two weeks crafting the perfect task. This type of thinking and work becomes a habit rather than a major production.

Act on It!

  1. Block off half an hour on your calendar, and sit down with a pencil and paper in a quiet place where you won’t be interrupted. Think about the little nitpicky problems your team puts up with on a daily basis. Write them down. What are the annoying tasks that waste a few minutes of the team’s time each day but nobody has had the time or energy to do anything about? Where in your current project are you doing something manually that could be automated? Write it down. How about your build or deployment process? Anything you could clean up? How might you reduce failures in your build? Write all of these ideas down. Give yourself a solid twenty minutes of this. Write down all of your ideas — good or bad. Don’t allow yourself to quit until the twenty minutes are up. After you’ve made your list, on a new sheet of paper write out your five favorite (most annoying) items. Next week, on Monday, take the first item from the list, and do something about it. On Tuesday, take the second item, Wednesday the third, and so on.

Remember Who You Work For

In a well-structured environment, the goals of your manager are the goals of your team. Solve your manager’s problem, and you’ve solved a problem for the team.
If the manager’s job is to know and set priorities but not to personally do all the work, then your job is to do all the work. You are not doing the manager’s job for im or her. You’re doing your job. Your manager’s successes are your successed.
If you’re really worried about who gets the credit, remember that it’s your manager who holds the keys to your career. In most organizations, it’s the direct manager who influences performance appraisals, salary actions, bonuses, and promotions, So, the credit you seek is ultimately cashed in with your manager.
Remember who you work for. You’ll not only align yourself with the needs of the business, but you’ll align the business with your needs. If you’re going to nail the execution of your job, this will ensure that you’re executing on the right things.

Act on It!

  1. Schedule a meeting with your manager. The agenda is for you to understand your manager’s goals for the team over the coming month, quarter, and year. Ask how you can make a difference. After the meeting, examine how your daily work aligns to the goals of your team. Let them be a filter for everything you do. Prioritize your work based on these goals.

Be Where You’re At

Be ambitious, but don’t wear it on your sleeve.

Act on It!

  1. Put your career goals away for a week. Write down your goals for your current job. Instead of thinking about where you want to go next, think about what you want to have accomplished when you finish the job you’re in. What can you have produced in this job that will be great? Create a plan that is both strategic and tactical. Spend the week implementing these tactics in support of the long-term goal of “finishing” this job. During lunches and breaks with your co-workers, focus the conversation on these goals. Steer yourself and those around you away from any conversation about career advancement or office politics and gossip. At the end of the week, take stock of your progress toward meeting these job goals. How long will it be before you’ve accomplished everything you feel you need to in your current role? How will you know you’re done? Plan the next week and repeat.

How Good a Job Can I Do Today?

How much more fun would your job be if you could treat the most uninteresting and annoying tasks with the same feverish desire to do them right When we have more fun, we do better work. So, when we have no interest in a task, we’re bored, and our work suffers as a result.

Act on It!

  1. Make it visible — Turn those boring tasks into a competition with your co-workers. See who can do them better. Don’t like writing unit tests? Print out the number of test assertions for the code you checked in every day, and hang it on your cubicle walls. Keep a scoreboard for the whole team. Compete for bragging rights (or even prizes). At the end of a project, arrange for the winner to have his or her grunt work done by the rest of the team for a whole week.

How Much Are You Worth?

Ask, “Was I worth it today?”

Act on It!

  1. When companies make investments, they try to make sure they’re using their money in the best possible way. Simply calculating Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler HOW MUCH ARE YOU WORTH? 114 a return on investment (I put in $100 and get back $120) isn’t enough to make a smart decision. Among other factors, companies have to take inflation, opportunity cost, and risk into consideration. Specifically unintuitive to those of us who haven’t been to business school is the concept of the time value of money. At risk of oversimplification, it goes something like this: a dollar today is worth more than a dollar next year, because a dollar today can be used to generate more dollars. Most companies set a rate of return bar, under which an investment will not be made. Investments have to yield an agreed-upon percentage in an agreed-upon period of time, or they aren’t made. This number is called the hurdle rate. Find out what your company’s hurdle rate is, and apply it to your salary. Are you a good investment?

A Pebble in a Bucket of Water

Your presence on the job is, to the company, like a pebble in a bucket of water. Sure, the water level is higher as a result. You get things done. You do your part. Buy, if you take the pebble out of the bucket and stand back to look at the water, you can’t really see a difference.
You should never get too comfortable. He professed to walking up every day and intentionally and explicitly reminding himself that he could be knocked off of his pedestal any day: Today could be it, he’d say
Beware of being blinded by your own success.
Feeling irreplaceable is a bad sign, especially as a software developer. If you can’t be replaced, it probably means you perform tasks in such a way that others can’t also do them.
If you are replaceable, nothing is stopping you from moving up to the next big job.

Act on It!

  1. Inventory the code you have written or you maintain and all the tasks you perform. Make a note of anything for which the team is completely dependent on you. Maybe you’re the only one who fully understands your application’s deployment process. Or there is a section of code you’ve written that is especially difficult for the rest of the team to understand. Each of these items goes on your to-do list. Document, automate, or refactor each piece of code or task so that it could be easily understood by anyone on your team. Do this until you’ve depleted your original list. Proactively share these documents with your team and your leader. Make sure the documents are stored somewhere so that they will remain easily accessible to the team. Repeat this exercise periodically

Learn to Love Maintenance

Maintenance can be a place of freedom and creativity.

Act on It!

  1. Measure, improve, measure — For the most critical application or code that you maintain, make a list of measurable factors that represent the quality of the application. This might be response time for the application, number of unhandled exceptions that get thrown during processing, or application uptime. Or, if you handle support directly, don’t directly assess quality for the application. Support request turnaround time (how fast you respond to and solve problems) is an important part of your users’ experience with the application. Pick the most important of these measurable attributes, and start measuring it. After you have a good baseline measurement, set a realistic goal, and improve the application’s (or your own) performance to meet that goal. After you’ve made an improvement, measure again to verify that you really made the improvement you wanted. If you have, share it with your team and your customers. Pick another metric, and do it again. After the first one, you’ll find that it becomes fun, like a game. Measurably improving things like this gets addictive.

Eight-Hour Burn

One of the many sources of controversy around the Extreme Programming movement is its initial assertion that team members should work no more than forty hours per week.
Projects are marathons, not sprints.
You get to work and think, I’ve only got eight hours! Go, go, go! With strict barriers on start and end times, you naturally start to organize your time more effectively. You might start with a set of tasks that need to get done for the day, and you lay them out in prioritized order and start nailing them one at a time.
If your work intensely every day, you’ll find that the work doesn’t follow you home. Not only are you deliberately stopping yourself from working after-hours, buy your mind will actually allow you to stop working after-hours.
Budget your work hours carefully. Work less, and you’ll accomplish more. Work is always more welcome when you’ve given yourself time away from it.

Act on It!

  1. Make sure you sleep well tonight. Tomorrow, eat breakfast and then start work at an exact time (preferably a little earlier than usual). Work intensely for four hours. Take an hour lunch. Then work for four more hours so intensely that you are absolutely exhausted and can’t do any more. Go home, relax, and have fun.

Learn How to Fail

If you’ve never walked through a minefield before, you might not know which lumps of dirt not to step on. If your software hasn’t been complaining to your regularly, you might not know where the dangerous nooks and crannies are. You can program just so defensively when you’re coding blind.
A craftsperson is really put to the test when the errors arise. Learning to deal with mistakes is a skill that is both highly valuable and difficult to teach.
Every wrong note is buy one step away from the a right one.
Because we all make mistake, we also know that everyone else makes mistakes. So, within reason, we don’t judge each other on the mistakes we make. We judge each other on how we deal with those inevitable mistakes.
Stressful times offer the best opportunities to build loyalty.

Say “No”

The quickest path to missing your commitments is to make commitments that you know you can’t meet.
Saying “yes” to avoid disappointment is just lying.
You’ll notice that when you meet a real guru in a subject area, they’re never afraid to admit when they don’t know something. “I don’t know” is not a phrase for the insecure.

Act on It!

  1. Karl Brophey, a reviewer, suggests keeping a list of every commitment you make:
  • What was asked of you for a due date?
  • What did you commit to?
  • If you were overridden, record both what you thought and what you were told to accept.
  • Record when you delivered. Examine this daily. Communicate where you’ll fail as soon as you know. Examine this monthly — what is your hit rate? How often are you right on?

Don’t Panic

Like most skills, a great way to get good at it is to watch masters at work. Back in my Doom days, there was one such master who went by the ironic online handle “Noskill.” Noskill was the de facto reigning Doom champion. People from around North America would pay the long-distance telephone fees to try their luck against him. These matches would all be recorded with Doom’s built-in game-recording facility. I watched every one.
It didn’t take me long to learn his secret. Sure, he was generally good at the game, but there was one obvious key to his success: he never panicked. Doom was the kind of game in which a round could be over literally seconds after it started. It was really fast. I remember my first death-match game. Spawn, die, spawn, die, spawn, die. When I finally managed to stay alive more than a couple of seconds I found myself running around aimlessly, barely able to keep track of where I was.
But Noskill never acted that way. No matter how difficult the situation, you could tell by watching the recordings that he was always relaxed and always thinking about what to do next. He was always seemingly aware of how his current context fit into the overall shape of the match.
Heroes never panic.
Now I have to admit that not panicking in stressful situations is easier said than done. It’s kind of like telling someone “just be happy.” Sure, it’s good advice, but how do you do it? How do you avoid panicking when things seem to be falling apart? To answer this question, it helps to think a little about why we do panic.
We panic because we lose perspective. When something has going wrong, it’s hard not to focus all attention on the problem. To some extent, that’s a good way to solve problems. Unfortunately, it also makes the problem, no matter how small, seem more important than it is. And with the problem inflated and stress levels running high, our brains turn themselves off.

Act on It!

  1. Keep a panic journal. The key to catching panic before it happens is to develop a heightened real-time awareness of your perception and emotions as they happen. I’ve had my best luck learning to do this by analyzing my reactions to situations after the fact. I’m Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler DON’T PANIC 134 not smart enough to naturally keep a background thread running and analyzing my thoughts as they happen, but I’ve discovered that if I practice the analysis “offline,” I get better and better at doing the analysis in real time. Saying you’re going to do a better job of analyzing your reactions and actually doing it are two different things. Keeping a journal will help add structure to the process. Each day at a specific time (use a calendar with a reminder!), open up a text file and record any situation that caused you to panic, even if only a little bit. Once a week, look back on the past week’s list and take stock of the lasting impact of each panic-inducing situation. Was the situation panic-worthy? What would have been the most productive reaction to the situation? What would the hero in a dramatized movie about your life have done instead of panicking? After some practice, you’ll find the analysis to start happening while the panic sets in. As you rationally explore the reasons for your panic in real time, you’ll find that the panic itself takes a backseat and eventually dissipates.

Say It, Do It, Show It

The easiest way to never get anything done is to never commit to anything. If you don’t have a deadline, you don’t have any pressure or much incentive to finish something. This is especially true when the something that needs to get done isn’t 100 percent exciting.
Plans don’t have to be big and drawn out. A list in a text document or e-mail is perfectly fine. Plans don’t have to cover a large span of time. Being able to start the day and answer the question “What are you going to do today?” is a great first step.
Status reports can help you market yourself.
Your leaders want you to have independence and ownership. Making, executing, and communicating plans will help you attain both.

Part IV — Marketing… Not Just for Suits

As one manager told me recently, if someone does something truly fantastic and nobody knows about it, in his eyes it didn’t happen.
Pragmatically speaking, managers don’t have time to keep close tabs on what each employee is doing every day
You may have the best product in history, but if you don’t do some kind of advertising, nobody is going to buy it. We all know — especially in the software world — that the best product doesn’t always win.

Perceptions, Perschmeptions

Performance appraisals are never objective.

Act on It!

  1. Perceptions are driven by different factors, depending on who the audience is. Your mother doesn’t much care how well you can design object-oriented systems, but your teammates might. Understanding what’s important in each of your relationships is an important part of building credible perceptions with those you interact with. Think about the different classes of relationships you generally have with people in the office. For example, you probably have teammates who do the same type of job you do. You also probably have a direct manager, and you may have one or more customers and a project manager. Take these different groups (or whichever actually apply given the structure of your workplace), and list them. Next to each, write down which of your attributes is most likely to drive that group’s perception of you. Put some thought into your own list. How might you change your behavior as a result of this list? In what ways have you already been adjusting your focus as you interact with each group? In what ways have you not been appropriately adjusting your behavior?

Adventure Tour Guide

These managers and customers we’re talking about have a dirty little secret: they are afraid of you. And for good reason. You’re smart. You speak a cryptic language they don’t understand. You make them feel stupid with your sometimes sarcastic comment.
Your job is to 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. You will show them the sights and take them where they want to go while avoiding the seedy parts of town you’ve encountered in the past.

Act on It!

  1. Check yourself — Are you the grumpy old code ogre everyone fears? Are you sure? Are they afraid to tell you? Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler ADVENTURE TOUR GUIDE 151 Go through your mailbox, and find examples of e-mails that you have sent to less-technical co-workers, managers, and customers. As you read through, try to see things from the recipient’s perspective. If some time has passed since sending the messages, you’ll be able to see yourself as a third-party observer would. Even better, show the e-mails to your mom. Tell her that someone you work with sent the messages to a customer, and ask her how the messages would make her feel.
  2. Hop the fence — Find an opportunity to be flung into a situation in which you are not the expert and are thus dependent on others who are. If you have two left feet, imagine yourself on a soccer team. If you have two left thumbs, imagine that you’re part of the National Knitting Team. How would you like your teammates to communicate with you?

Me Rite Reel Nice

When you really step back and take a look at the big picture, writing skills are both necessary and are in short supply.
You may be a great coder, but if you can’t express yourself in words, you won’t be very effective on a distributed team.
The ability to shape an idea and lead a reader through a thought process to a logical conclusion is not much different from the ability to create a clear design and system implementation that future maintainers will be able to understand.

Act on It!

  1. Start keeping a development diary. Write a little in it each day, explaining what you’ve been working on, justifying your design decisions, and vetting tough technical or professional decisions. Even though you are the primary (or only — it’s up to you) audience, pay attention to the quality of your writing and to your ability to clearly express yourself. Occasionally reread old entries, and critique them. Adjust your new entries based on what you liked and disliked about the old ones. Not only will your writing improve, but you can also use this diary as a way to strengthen your understanding of the decisions you make and as a place to refer to when you need to understand how or why you did something previously.
  2. Learn to type. If you don’t already “touch type,” take a course or download some software that will teach you. You’re more likely to be comfortable and natural in your writing if you are comfortable with the input method itself. Of course, with all this writing you’ll be doing, you’ll save yourself some time by learning to type quickly.

Being Present

Face-to-face communication is incredibly effective. You can hear the other party more clearly. You can explicitly use visual aids to get points across by using hand motions or drawings on whiteboards. And, we all implicitly express a great deal of content in our facial expressions without even consciously realizing it.
Learn about your colleagues.

Act on It!

  1. One day in the next week, force yourself (within reason) not to send any e-mail. Every time you would normally send an e-mail, either call the person you would have sent it to on the phone or (better) walk to their office and speak to them in person.
  2. Make a list of co-workers, bosses, and customers who you don’t talk to enough. Put recurring appointments on your calendar to call and check in with them (either by phone or in person). Make the conversations short and meaningful. Use them to communicate something work related and also to simply make a human connection.

Suit Speak

Market your accomplishments in the language of your business.

Act on It!

  1. Make a list of your recent accomplishments. Write the business benefit for each. If there are accomplishments on the list that you can’t write a business benefit for, ask a manager or trusted acquaintance how they would frame the benefit.
  2. Make your elevator speech, and memorize it.

Change the World

Have a mission. Make sure people know it.
You need to effect change but not change within yourself or your own work (that’s a given). You need to effect visible change through your team, organization, or company.
You might be carrying the torch for unit testing, driving test practices into the hearts of the unwashed masses of your company’s programmer pool. Or, it might be something bigger, like a radical new technology introduction that will lead to cheaper, better systems made faster.
You do these things because you are internally driven to do them. You can’t stand back and watch the people in your company do things wrong. You know things could be better, and you have to change them.
If you’re out to change the world, you’re bound to make some people angry. That’s OK as long as your intentions are right.

Act on It!

  1. Catalog the crusades you’ve personally witnessed in the workplace. Think of the people you’ve worked with who have behaved as if on a mission. Think of the most driven and effective people in the places where you’ve worked. What were their missions? Can you think of any such missions that were inappropriate? Where is the line between drive and zealotry? Have you seen people cross it?

Let Your Voice Be Heard

You have to think bigger than the IT workers of yesteryear. While moving from level-23 programmer to level-24 programmer analyst might really be your short-term career goal, as a programmer today, you need to think beyond the next promotion or even your current place of employment.
Set your sights higher. Don’t think of yourself as a programmer at a specific company — after all, it’s not likely that you’ll be at the same place forever — but as a participating member of an industry. You are a craftsperson or an artist. You have something to share beyond the expense-reporting application you’re developing for your human resources department or the bugs you’ve got stacked up in your company’s issue-tracking system.
The weblog is a training ground. Write on the Web as if you were writing a feature column for your favorite magazine. Practice the craft of writing. Your skill will increase, and your confidence will grow.

Act on It!

  1. If you don’t already have a weblog, create one right now. Go to one of the many free weblog hosting sites, and set one up. Now create a new text file on your computer. In it, create a list of possible weblog topics. These are future articles you’re going to write. Don’t limit yourself to epic ideas. Shoot for ideas you can write about in ten to twenty minutes. Stop when the list is ten items long (unless you’re inspired — keep going). Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler LET YOUR VOICE BE HEARD 165 Save the file but leave it open. If you reboot, reopen the file. You have three weeks. Each day, choose an item from the list and write an article. Don’t think too hard about it. Just write it and publish it. In the articles, link to other weblogs with related articles. As you read the list to pick each day’s topic, feel free to add ideas to it. After the three weeks are over, pick your two favorite articles and submit them to user-moderated news sites such as Digg and Reddit. If you still have ideas on your list, keep writing.

Build Your Brand

Your name is your brand.
Remember that the things you choose to do and associate yourself with have a lasting impact on what your name means to people. And, now that so many of our interactions take place via the Internet on public forums, websites, and mailing lists, a lot of our actions are public record and are cached, indexed, and searchable — forever. You might forget, but Google doesn’t. Guard your brand with all your might. Protect it from yourself. It’s all you’ve got.

Act on it!

  1. Google yourself — Search Google for your full name in quotes. Look through the first four pages of results (are there actually four pages of results?). What could someone surmise about you following only the links from the first four pages of Google results? Are you even represented in the first four pages of search results for your name? Is the picture that these first four pages paints a picture that you appreciate? Do the same search again, but this time pay special attention to forum and mailing list conversations. Are you a jerk?

Release Your Code

Anyone can use Rails. Few can say Rails contributor.
Open source contributions demonstrate skill. If you’re making real code and contributing to a real project, it’s a lot better on your résumé than just saying you know a technology. Anyone can write Rails or Nant on their résumé. Very few can write Rails contributor or Nant committer.
Leading an open source project can demonstrate much more than technical ability. It takes skills in leadership, release management, documentation, and product and community support to foster a community around your efforts.

Act on It!

  1. Stuart Halloway15 does a workshop at conferences he calls “Refactotum.” If you get a chance to participate, I highly recommend it, but the gist is as follows: Take a piece of open source software with unit tests. Run the unit tests through a code coverage analyzer. Find the least-tested part of the system and write tests to improve the coverage of that code. Untested code is often untestable code. Refactor to make the code more testable. Submit your change as a patch. The beautiful thing about this is it’s measurable and can be done quickly. There’s no excuse not to try it.

Remarkability

Demo or die!

Act on It!

  1. Start small, but try to do something remarkable on your current project or job. One way to experiment is to shoot for remarkable Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler REMARKABILITY 173 productivity. Project schedules often have a lot of padding. Find something that everyone thinks is going to take a week and do it in a day. Work extra hours for it if you need to do so. You don’t have to make a habit of working extra hours, but this is an experiment. Do the work in a remarkably short time. See whether people “remark.” If not, why not? If so, in what ways? Fine-tune the variables, and try again.

Making the Hang

Fear gets between us and the pros.

Act on It!

  1. Pick one of your favorite pieces of software and e-mail its creator. Start by thanking him or her for the software. Then make a suggestion, ask a question, or make some other attempt at establishing a human connection with them. Solicit a response of some sort. If the software is free or open source, offer to help in some way.
  2. Think of someone local to you whom you admire or would like to learn from. Look for a situation where you can see the person (a users’ group meeting or speech are good possibilities), and go out of your way to start a conversation, even if it makes you uncomfortable — especially if it makes you uncomfortable.

Part V — Maintaining Your Edge

Already Obsolete

Your shiny new skills are already obsolete.

Act on It!

  1. Carve out weekly time to investigate the bleeding edge. Make room for at least two hours each week in order to research new Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler ALREADY OBSOLETE 183 technologies and to start to develop skills in them. Do hands-on work with these new technologies. Build simple applications. Prototype new-tech versions of the hard bits of your current-tech projects to understand what the differences are and what the new technologies enable. Put this time on your schedule. Don’t let yourself miss it.

You’ve Already Lost Your Job

You are not your job.

Act on It!

  1. If you’re a programmer, try a day or two of doing your job as if you were a tester or a project manager. What are the many roles that you might play from day to day that you have never explicitly considered? Make a list, and try them on for size. Spend a day on each. You might not even change your actual work output, but you’ll see your work differently.

Path with No Destination

The real meat of your career is not the promotions and salary advances. It’s the time you spend working toward those advances. Or, more important, it’s the time you spend working regardless of the advances.
Focus on doing, not on being done.
Focusing on the ending makes you forget to make the process good. And, bad processes create bad products. The product might meet its minimum requirements, but its insides will be ugly. You’ve optimized for the short-term end goal — not for the inevitable, ongoing future of the product’s development.
Not only do bad processes make bad products, but bad products make bad processes. Once you have one of these products that is messy inside, your processes adapt around it. Your product’s broken windows lead to broken windows in your process. It’s a vicious cycle.

Act on It!

  1. In his book The Miracle of Mindfulness [Han99], Thich Naht Hanh presents a suggestion: the next time you have to wash the dishes, don’t wash them to get them done. Try to enjoy the experience of washing the dishes. Don’t focus on finishing them. Focus on the act of washing them itself. Doing the dishes is a mundane task that almost nobody savors. Software developers have a lot of similar drudgery to get through in the average day, such as time tracking and expense reporting, for example. The next time you have to do a task like this, see whether you can find a way to focus on the task as you do it instead of anxiously rushing to finish it.

Make Yourself a Map

A personal product road map not only can help you stay on track, constantly evolving, but it can also Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler MAKE YOURSELF A MAP 189 show you the bigger picture of what you have to offer. It can show you that no single feature stands alone. Each new investment is part of a larger whole. Some work fabulously well together. Others require too much of a mental leap for potential employers. Is he a system administrator or a graphic designer? Is she an application architect or a QA automation guru?
Although it’s definitely OK to learn diverse skills — it expands your thinking — it’s also a good idea to think about the story your skillset tells. Without a road map, your story might look more like a Jack Kerouac novel than a cohesive set of logically related capabilities. Without a road map, you might even actually get lost.

Act on It!

  1. Before mapping out where you want to go, it can be encouraging and informative to map out where you’ve been. Take some time to explicitly lay out the timeline of your career. Show where you started and what your skills and jobs were at each step. Notice where you made incremental improvements and where you seemed to make big leaps. Notice the average length of time it took to make a major advancement. Use this map as input as you look forward in your career. You can set more realistic goals for yourself if you have a clear image of your historical progress. Once you’ve created this historical map, keep it updated. It’s a great way to reflect on your progress as you move toward your newly defined goals.

Watch the Market

Watch the alpha geeks.

Act on It!

  1. Spend the next year trying to become one of the alpha geeks. Or at least make the hang with one.

That Fat Man in the Mirror

If you sit and watch a flower bloom, it will take a long time to notice that anything has happened. However, if you leave and come back in two days, you’ll see something very noticeably different from when you left.
You’ll notice the same phenomenon with your career. Actually, you won’t notice it. That’s the problem. You might look at yourself in the metaphorical mirror each day and not see an ounce of change. You seem as well adjusted as before. You seem as competitive as before. Your skills seem to be as up-to-date as before.
Then, suddenly, one day your job (or your industry) doesn’t fit you anymore.
Developer, review thyself.

Act on It!

  1. Do a 360 review:
  • Make a list of trusted people who you feel comfortable asking for feedback. The list should preferably contain representatives from your peers, customers, and managers (and subordinates if you have any). • Make another list of about ten characteristics you believe are important measurements of you as a professional.
  • Convert this list to a questionnaire. On the questionnaire, ask for participants to rate you in terms of each characteristic. Also include the question “What should I have asked?”
  • Distribute the questionnaire to the list of people from the first step. Ask that your reviewers be constructively critical. What you need is honest feedback — not sugarcoating. When you get the completed answers back, read through all of them, and compile a list of actions you are going to take as a result. If you’ve asked the right questions of the right people, you are going to get some actionable items. Share the outcome of your questionnaire with your reviewers — not the answers but the resultant changes you plan to make. Be sure to thank them. Repeat this process occasionally.

2. Start keeping a journal. It could be a weblog, as we discussed in Let Your Voice Be Heard, on page 162, or a personal diary. Write about what you’re working on, what you’re learning, and your opinions about the industry. After you’ve been keeping the journal for some time, reread old entries. Do you still agree? Do they sound naive? How much have you changed?

The South Indian Monkey Trap

Rigid values make you fragile.

Act on It!

  1. Find your monkey traps — What are your rigid assumptions? What are those values that guide your daily actions without you even consciously knowing it? Make a table with two columns, “Career” and “Technology.” Under each heading list the values that you hold unfalteringly true. For example, under “Career,” what have you always known to be one of your strengths? Or your weaknesses? What is your career goal (“I want to be a CEO!”)? What are the right ways to achieve your goal? In the “Technology” column, list what you most value about the technologies you choose to invest in. What are the most important attributes of a technology that should be considered when making a choice? How do you make a scalable system? What’s the most productive environment in which to develop software? What are the best and worst platforms in general? When you have your list down and you feel like it’s fairly complete, go one at a time through the list and mentally reverse each statement. What if the opposite of each assertion were true? Allow yourself to honestly challenge each assertion. This is a list of your vulnerabilities.
  2. Know your enemy — Pick the technology you hate most, and do a project in it. Developers tend to stratify themselves into competing Report erratum this copy is (P1.0 printing, April 2009) Prepared exclusively for Alison Tyler THE SOUTH INDIAN MONKEY TRAP 198 camps. The .NET people hate J2EE, and the J2EE people hate .NET. The UNIX people hate Windows, and the Windows people hate UNIX. Pick an easy project, and try to do a great application in the technology you hate. If you’re a Java person, show those .NET folks how a real developer uses their platform! Best case, you’ll learn that the technology you hate isn’t all that bad and that it is in fact possible to develop good code with it. You’ll also have a (granted, undeveloped) new skill that you might need to take advantage of in the future. Worst case, the exercise will be a practice session for you, and you’ll have better fodder for your arguments.

Avoid Waterfall Career Planning

I started feeling like all I was doing was work I didn’t like. In fact, the more successful I was, the less likely I was to be in a job I enjoyed.
What I was doing to myself was the same thing heavy processes did to their customers. I was doing an excellent job at delivering a career to myself that I didn’t want.
It was unintuitive to me at first, but the solution to such a problem is to simply change your career.

Better Than Yesterday

When you’re miserably out of shape, “Just get in shape” isn’t a concept you can even grasp much less do something concrete about. And to make it harder, if you do something toward improving it, you can’t tell immediately or even after a week that anything has changed. In fact, you could spend all day working on getting in shape, and a week later you might have nothing at all to show for it.
When you’re trying to become more respected in your workplace or be healthier, the individual improvements you make each day often won’t lead directly to tangible results

Act on It!

  1. Make a list of the difficult or complex improvements you’d like to make; they can be personal or professional. It’s OK if you have a fairly long list. Now, for each item in the list, think about what you could do today to make yourself or that item better than yesterday. Tomorrow, look at the list again. Was yesterday better than the day before? How can you make today better? Do it again the next day. Put it on your calendar. Spend two minutes thinking about this each morning.