Category: Career

  • Letters to junior developers

    Letters to junior developers

    Dear Recent Graduate or Entry Level Developer,

    As someone who has been in the field you have selected for your career for some time, I hope you will allow me to offer some (completely unsolicited) advice about our industry.  I’ve been where you are: eager, motivated, and hopeful.  I’m sure you’ll encounter plenty of people who will have their own version of what I’m about to give you, but take them all together and just maybe something will carry with you in your career.

    Do this job because you love it

    Software developers like us certainly don’t corner the market on passion for our jobs.  But with passion can come great results.  I heard early on in my career the suggestion to “find something you love so much that you’ll do it for free, then become so good at it that anyone will pay you to do it.”  These days (compared to when I was in your position) being a programmer is a lot more trendy and mainstream.  Those who have passion will sustain – those who are just on the bandwagon will likely flutter off to some other interest.

    Learn to communicate

    Software is a unique product in that it reaches out to all levels of business and society.  In your job, you’re inevitably going to encounter customers, managers, and clients who may be executives and directors.  I’ve found that most of the time, particularly when things are not working as they should, these people want answers, not deep technical explanations.  Consequently, you need to learn to communicate effectively to lots of different audiences.

    One key element of learning to communicate is knowing how to balance discussion on technology and business.  Since in most cases, business rules the day (see below) you want to be able to engage with someone about their business, and also explain technology and its capabilities for them.  Sometimes this is as simple as asking “Would you like me to explain how this works?” rather than assuming they want to know.

    Additionally, effective communication comes by knowing and understanding the perspective of your audience.  If you are speaking to a business owner or department head, chances are they have a very bottom line view of the world, so you’ll need to learn how to discover those core values and then engage the person in that context.  In general, I find you’ll be much more respected, well received, and more likely to be invited back to the table when people feel like you can represent technology without making them feel overwhelmed or lost.

    Business rules the day

    With extremely few exceptions, you are going to work for an business.  That business is measured by a very simple equation:  revenues minus expenses equals profit.  Some organizations pretend that they are about other things, like serving people or changing the world.  But in truth they are measured by money.

    You will be hired to either increase revenues, decrease expenses, or facilitate both.  These two objectives will drive every decision, every meeting, and every opportunity that you will face.

    However, many of us (myself included) enter the industry without really understanding how business works.  We arrive, eager to write code and make something, never thinking that every hour we spend stuck on an issue is costing the company something.

    Therefore, I encourage you to get a basic education in business principles.  Understand the core principles of accounting.  Know how your employer keeps score, that is, what are the revenue centers, what are the cost structures, and how does your effort directly affect the bottom line.  To that point – know what the phrase “bottom line” really is talking about!

    You will inherit someone else’s code, and someone else will inherit yours

    In my parent’s generation, a worker would often stay with one company for their entire career.  In my generation, and likely for yours, this is no longer the case.  If you are on the same project or with the same company for more than 3 years, you may be the exception.  As such, the code you write and the code you are assigned will have lots of contributors to it.

    I say this because inevitably, the code you inherit will suck.  It will drive you crazy.  It won’t make sense, and you’ll long to be inside the head of the person who wrote it just to figure out what the hell they were thinking.  And then someone will feel exactly the same later on in life with the code you write.  If there ever existed an unspoken courtesy among programmers, it should be to try to make life easier for the next developer on the project.  This is at its simplest a longwinded way of saying “put comments in your code.”  But in the same way you’ll appreciate receiving those explanations, the ones who inherit the projects you have worked on will thank you.

    Learn to do things right, not just make them work

    One of the most cringeworthy statements I hear from developers on my teams when they get faced with a problem is something along the lines of “I just had to hack something together…”  Hack jobs are ticking time bombs.  A great deal of technical debt in the world is the result of hack jobs, done in a hurry, because someone didn’t want to take the time to do it right.  Resist this temptation as diligently as you can.

    If you feel caught between a problem and a deadline – go petition for more time.  Most managers and customers are reasonable enough to understand that a quick fix is often a seed that grows in to an expensive problem down the road.  Learn how to communicate that risk.

    Present a solution, not just a problem

    Finally, as a manager, you need to understand that I’m busy.  My day is full of lots of things.  So if you get stuck or have a crisis, just telling me about it adds one more thing to my plate.  Here’s the better way to do it:

    If you have a problem or are stuck on something that needs your manager’s attention, come prepared to explain the problem to them but also present your solution.  Let me know that you’ve put some thought to this.  You can ask for either my clearance to go do your plan, or a validation that your plan is reasonable and feasible.  But most importantly, demonstrate to your team or management your ability to solve the problem, and it won’t go unnoticed.

    Being a developer is a great job.  It’s fun, rewarding, and will provide you a good living. I know it has for me.  Go forth and code!

    Photo credit: Jeric Santiago

  • The Developer’s mid-life crisis – and 5 ways to overcome it

    The Developer’s mid-life crisis – and 5 ways to overcome it

    According to Wikipedia, a midlife crisis is:

    Midlife crisis is a term coined in 1965 by Elliott Jaques stating a time where adults come to realize their own mortality and how much time is left in their life.

    I particularly like this supporting thought, that during this time, “people may reassess their achievements in terms of their dreams.”

    I went to university in the late 1990s, a time when the Internet was emerging and the geek stereotype was being shaken off.  In those days, coding for a living wasn’t quite fully mainstream, but for those of us to pursued it, we had a promising and potentially lucrative career ahead of us.  Job prospects were strong, and it wasn’t unusual to have multiple opportunities to consider, with above-average pay, upon graduation.  At that time, I dreamed of being the guy who came up with new three-letter-acronyms and writing definitive works on a subject.

    A lot has changed in the past 20 years.  Coding today is mainstream, talked about in the media, promoted to children.  Tech success stories are commonplace, and we can’t possibly imagine a world without Google, Facebook, and Amazon.  And I, like many of my peers, find myself no longer on the bleeding edge of tech, but instead spending my time supporting and building run of the mill business apps.

    In this new environment, developers (I posit) have reached nearly commodity status.  There are lots of us.  The supply curve has changed, and while demand is still strong (the Bureau of Labor Statistics projects 22.8 percent employment growth for software developers between 2012 and 2022, much faster than average for all occupations. During that time period, an estimated 139,900 jobs will need to be filled) it’s harder and harder to distinguish oneself from their peer group.

    Additionally, the rise in new, more glamorous technologies such as mobile apps have pinched career developers in to choosing a path in which to invest their time, training, and focus.  Do we stick with the stable corporate job, or jump ship for the hip new startup?

    In short, we face a mid-career crisis.

    One day you wake up and suddenly feel like all the cool kids are doing fancy mobile apps and you’re stuck in the belly of the corporate beast writing TPS reports.  Or maybe you go to a Code Camp or conference and instead of getting rejuvenated you get depressed over all the tech that you’ll never be able to use in your job because the opportunities don’t present themselves.  In short, the crisis strikes, and when you reassess your achievements in terms of your dreams, you feel like you’ve come up way short.

    I know I’ve felt this way.

    And here’s how I overcome it.  It’s not quite like going out and buying a red convertible, but these things serve to give me a boost.

    Sign up to give a presentation or user group talk.

    One of the more rewarding things I have done in the past couple years is preparing talks for local user groups.  The key?  Always selecting a topic that I hardly know anything about.  In doing so, I create a condition for myself to learn with a deadline, powered by the fear of embarrassment.  This has been a great way for me to immerse myself in the tech topics I wouldn’t otherwise get to use in my day job.

    Start a side project.

    If your day job isn’t giving you the opportunities you want, then consider a hobby project that can be a sandbox for you to try things out.  For me, HomeSpot HQ is that project – and it routinely gives me a place to try and incorporate the hot new things.

    Start mentoring

    Rather than bemoan the next generation of developers and how easy they have it, why not invest in them.  Help teach them strong principles that make life as a developer better.  You know, things like SOLID and DRY. Or how to write good code comments. Many areas have tech summer camps that would love volunteers to help campers learn the ropes.

    Take a Twitter sabbatical

    The main channel by which I hear about all the things everyone else is working on is via my Twitter feed.  But sometimes there are days when having those constant reminders is downright depressing.  In that moment, fire a Ctrl-F4 or Command-W to blow that tab away, and find a moment to stop comparing yourself to everyone else.  Chances are, they have been (or will be) in the same place in their career.

    Commiserate with others

    Want to feel better about your situation?  Go talk with one of your peers and hear their story.  Again, it’s pretty likely they have been through the same crisis moments, and probably have some insight about how to cope constructively.  Or, they might have a horror story to tell that proves again the grass isn’t always greener.  Who knows, maybe that conversation will propel you to take action!

    If your achievements and your dreams aren’t matching up, remember that you can change either side of that equation.  Still, there are endless opportunities to achieve waiting out there for you. You just have to decide to go after them.

    Photo credit:https://commons.wikimedia.org/wiki/File:MX-5_Red.jpg

  • You’re going to fall behind

    You’re going to fall behind

    5725727517_f8dfc7b214_b
    https://www.flickr.com/photos/pigpilot/

    Earlier this month, I wrote about how it’s inevitable that you’re going to be distracted during the course of your workday.  Today I’m adding a second installation to the “You’re going to…” series by assuring you that You’re going to fall behind.

    What I mean by this is that as a developer, there will always be things you can’t keep up on.  Be that a new language, framework, toolkit, backlog of features, unit test coverage, or even documentation.  There simply has become too much to learn, too much to consume, too much to monitor, for any normal person with a day job to manage.  And that is okay.

    Back in the day

    When I started software development in the late 1990’s, there really were fewer options for how you did your work.  It really came down to a few languages, and those mostly supported by Microsoft, namely FoxPro, Visual Basic, and C++.  Even Java, released in 1995, was only beginning to garner some momentum.  Consequently, there were finite choices, and seemingly finite amounts of reference material to consume.  These are the days when not only would you get 25 3.5 inch floppy disks to install the product, you’d get 3 or 4 printed volumes as instructional guides.  If you were lucky enough, as I was, to have an employer who would spring for the CD-ROM based MSDN library subscription, then your reference base grew a bit more, especially with each quarterly release.

    But in the end, if I had a problem I couldn’t solve, the standard solution was at the other end of the Microsoft Support telephone number.  I have many memories of sitting on hold waiting for a support representative to pick up so I could ask a single question.

    The release cycles for new products in the late 90’s and early 2000’s were long.  And the infancy of the Internet at that stage meant that only so many new products or technologies became available each year.  I dare say it was manageable, and if you paid attention, you could reasonably stay current with the latest and greatest.

    The Internet changed everything

    In my view, the Internet has had two significant impacts on the field of software development.  The first is the amount of content available related to any given programming language, or in fact any given specific issue.  The second is the acceleration of new technology being released for developers to leverage.

    To illustrate the former point, do a simple Google search for your programming language of choice.  The results may surprise you.

    asp.net-mvc-search

    21 million results.  21 million pages that all may have something relevant to the problem you are trying to solve.  It’s no wonder we feel overwhelmed.

    How to keep up

    Just as you would if you found yourself falling behind the pack in a footrace, keeping up with the industry requires that you dig deep in to your core and put all you have towards closing the gap.  Here are some things I have found useful.

    1. Plan to give a talk

    One of the most effective ways I have found to embark on learning a new technology or method is to commit myself to giving a presentation about that topic.  This can be at a user group, a code camp, or even just as a lunch-and-learn with your team.  The risk of embarrassment in front of your peers is a giant motivator, and a deadline can help you prioritize and structure your learning.

    2. Optimize your online consumption

    With the glut of material out on the Internet, how possibly do you filter though the volume and get to the best resources.  One method I use is to always start with what I call my trusted sources.  These are individuals like Scott Hanselman, K. Scott Allen, and Randy Drisgill, who have an established reputation as reliable authors.  The next tier is material from the producers of the technology themselves.  Everything from Microsoft down to the discussion threads on CodePlex, if it’s directly tied to the people creating the technology, chances are you’ll get better quality information.  Finally, expand to the general tech blogosphere.  Every developer has their own application and experience with a language or tool, and that broad base will give you lots of insight as to what is good, bad, and ugly about the product.

    3. Online video and Podcasts

    In the last few years there has been a downright explosion of online video training materials available online.  Free sites like DimeCasts; paid sites like WintellectNow and Pluralsight; and of course, lots of user-sourced material on YouTube.  The genre of tech-focused online screencasts is maturing rapidly and gaining not just popularity, but quality.  Similarly, chances are there are dozens of individual podcasts available oriented around the topic du jour.  Online training and podcasts are great because they can be portable as well as passive.  You can listen to a podcast while on the treadmill, or watch a video while traveling.  These are great tools to help you incrementally grow in knowledge.

    4. Start a side project

    If you are like me, and I think most developers, you learn best by doing.  So if your main job doesn’t afford you the opportunity to explore and apply new technology, create your own project that does.  I started HomeSpotHQ.com in 2009, and it became the venue in which I learned MVC.  Setting off to create a product, whether or not you make it public, is a great form of focused learning.  If you’re particularly motivated, you can follow in Jennifer Dewalt’s footsteps and do 180 websites in 180 days, each implementing a specific method or tool.  The point is to not just read and watch, but do.

    Long journey, first steps

    I think being a developer forces you to be a lifelong learner.  There’s no other way to stay competitive and relevant in the marketplace.  So when you find yourself worrying or frustrated because you learn about yet another JavaScript framework that released, remember that we’re all in the same boat.  Pick up an oar, set a target, and get to work.

    Photo credit: https://www.flickr.com/photos/pigpilot/

  • Career Retrospective 2010

    One of the tenants of the Agile methodology for software development is the Retrospective.  Essentially, the Retrospective is a time when a team can look back on the last body of effort, and ask themselves the some variant of the following three questions:

    • What did we do well?
    • What did we do not so well?
    • What can we do to improve?

    I must give some credit to Ben Griswald at JohnnyCoder.com for the idea, but it seemed quite relevant at the end of the year to apply the principle of Retrospective to my career as a software developer.  Moving forward, I will try to post a Career Retrospective on at least a quarterly basis.

    What did I do well in 2010?

    My first instinctive response was simply “I stayed employed.”  I don’t mean to suggest that I have a hard time holding down a job, but more so acknowledge that in the current economic state of our country, there are a lot of software developers who do not have jobs.

    Further, in 2010, I got a new job, which means at the very least that I successfully stood out from other candidates in the eyes of my new employer.

    I started this blog. As I mentioned in my inaugural post, my hope is that this venue will let me talk about the craft of software development and the things that are important to me in that space.

    I launched a new product. The second iteration in the HomeSpot line is HomeSpot AgentPro, which went live this month.  There will (hopefully) be many posts in 2011 about the outcome of that effort.

    What did I do not so well in 2010?

    I’ve been thinking through this question a lot.  It’s always hard to find negative or imperfect patterns or trends in one’s own life.  That I am willing to be introspective at all is somewhat significant.

    In light of all my work in 2010 being as a contractor, I have found that I lacked a certain passion about the work to which I was contributing.  Contractors are by nature transient, and while I did not hold any specific fear of arriving at the office one day and being shown the door, I always held the job to be temporary.  When coupled with my own venture taking time in the evenings, I think the net result was my job became one of duty, not of passion.

    I know that I cut corners in some of the coding and design I delivered.  Sometimes it was due to time constraints.  Sometimes because the client had simply not asked for what I felt was the ‘complete’ solution to a problem.  But either way, as one who stands up to say that the craft of software development is rooted in quality and pride, taking shortcuts is not the pattern I want to find myself adopting.

    What can I improve in 2011?

    I have always considered myself a goal setter.  Perhaps not always as much of a goal achiever as I would prefer, but it is in my nature to establish a target outcome and work to move towards it.

    Thus, in identifying areas of improvement for the year ahead, I certainly look first to those spots where I didn’t do so well – namely passion and quality.

    For Passion, I need to move past thinking of a ‘day job’ as a necessary evil while I do other things.  Rather, every opportunity to get my hands on code – no matter who wrote it, what it does, or who it is for – should be embraced. I have always believed that all learning is cumulative – that we do not unlearn.  Consequently, every chance to see, critique and improve code serves me as an education.  Rather than trying to muster passion for my particular employer or client, my passion should reside in becoming the absolute best software developer I can be.  From there the excitement about some client’s particular issue will inevitably flow.

    Secondly, in as much as I have time and opportunity, I want to expand my particular skillset.  The simplest approach this can take is learning a new language, but even within my area of primary proficiency (that being the .NET platform) I know there is a great deal more I can learn and master.  One approach I have considered to this end is working towards earning a professional certification, not so much for the credential, but rather as a structured way to move towards mastery.

    Finally, in 2011 I want to be more deliberate about participating in the larger community of developers, namely through participation in my local user groups, but also through venues such as Stack Overflow, Linked In Questions and other forums.  Putting myself around other like-minded individuals will benefit me as a developer and professional in many ways.

    And so, here’s to 2011 being a new year of quality, passion, community and progress.