Category: Software engineering career tips
How Ben Accidentally Became a Developer
In early April I received a message from Ben, delivered to my Reddit account.
I’ve been reading /r/resumes for, well, the whole time I’ve been actively looking for another job. I’ve noticed your comments on other posts and respect your opinion. Even though I’m not a “programmer” per se, I do enjoy reading your site and appreciate the time you take to help folks like me who are trying to make the best impression possible.
Ben wanted some advice on his résumé and career prospects in technology, and he wrote a quick bio. He earned a degree in religion and worked in that field for seven years before deciding that his passion was for technology. During his tenure in the church he dabbled in web development and learned to solve basic networking and hardware issues to reduce the church’s technology expenses. He resigned his church position to pursue entry-level roles, and ended up spending a year in retail before eventually being hired as a Junior Computer Technician.
Ben, on paper
After learning about Ben’s work history, I reviewed his résumé. The two sentence profile atop his résumé mentioned troubleshooting, managing hardware and software, vendor selection and training. There was no mention of programming experience.
Below the profile was a listing for certifications. None of his certs were truly relevant to programming.
His experience section was next. The first role listed was Systems Administrator, which had descriptions of his accomplishments in that role.
I was now halfway down the page and I have seen nothing about what he saw as his most valuable professional accomplishment. And then there it was – Web Developer. He had duties in both sys admin and development, and chose to list the sys admin experience first.
His technical skills section led with several operating systems, servers, and virtualization tools. Below that, a mere two lines from the bottom of the résumé (just above his degree), he listed programming languages.
“…not a programmer, per se…”?
After I finished reading the résumé, I thought back to his comment from the original Reddit comment. “Even though I’m not a ‘programmer’ per se…” At this point it was hard to tell if Ben would be more marketable (or happier) as a sys admin or a developer, so more information was required.
Ben then sent me a random email to tell me about his blog, which he had recently converted from WordPress to Octopress and had subsequently picked up some Ruby along the way. I checked it out and saw he had a couple small GitHub repos. This was all news to me. I asked if he had any other programming experience he was hiding.
It turns out he had done some freelance front-end web development work for a bit. He added that he had also contributed to the development of a template that was adopted by WordPress as a stock theme.
Ben might not have considered himself a programmer, but I expected others would disagree.
I sent Ben an email suggesting he focus 100% of job search efforts on finding a development role, and that his experience should qualify him for intermediate level slots. Ben responded that he had been reluctant to seek programming positions because he’d been doing that work for the least amount of time, but acknowledged that he’d probably be happier (and better compensated) as a developer. We worked together over the course of a couple days to rewrite his résumé, which emphasized his coding accomplishments.
Within five days of our first contact, Ben had a couple interviews lined up for web development positions. Fifteen days later Ben accepted a new job offer as a developer, which came with a 60% increase from his prior salary.
Ben now describes himself as a “Full-stack web developer” on his blog.
How to Level Up
I regularly hear from and read about technologists in a career rut. Unless one is both lucky and adept at predicting the future, experiencing some temporary stall can happen to professionals at any career stage. It may be the feeling of being stuck in an unchallenging role, feeling burdened by an undesirable skill set, or trapped in a company that seems difficult to escape.
Career stagnation in technology could be defined as a prolonged period characterized by limited project variety, no advancement or even lateral movement, few tangible accomplishments, and little exposure to any emerging trends. Some managers are aware that workers in these situations generally leave, so the managers may proactively try to satisfy staff by shuffling teams and providing more interesting tasks. Many managers have to focus on deliverables and may give little thought to the career development of their charges, perhaps throwing money at retention problems instead of providing challenges.
To “level up” could mean a promotion into management or technical leadership, a new start at a firm with increased opportunity, a role with autonomy and decision-making responsibility, or the ability to make significant improvements to skills and marketability. People that think about the leveling up concept often know what they want (or sometimes what they don’t want), but don’t necessarily see the best paths to get there.
Leverage the skills you have to get the skills you want
Most professionals view their current skills as a means to getting new jobs, but it’s useful to also think about skills as the key to acquiring other new skills. This tactic is most relevant when a skill set is dated and a previously strong marketability level is now questionable. Some will attempt to make a clean and immediate break from their old technologies or responsibilities into the new, usually with mixed results.
As an example, many COBOL programmers tried to enter the stronger Java job market following Y2K. Some applied to jobs with no Java experience hoping their COBOL years would be deemed transferrable, while others pursued certifications and self-study to ideally be viewed as a somewhat “experienced” hire. One overlooked strategy was to approach companies that were using both COBOL and Java in some capacity, with the understanding that the candidate was willing to write COBOL if provided the ability to also work with Java.
Most job seeking technologists have at least one ability that will help them contribute immediately to any other team or organization. It could be an obscure technical skill, leadership experience, or domain knowledge. Even if the skill is not something the person wants to use forever, it could be a key component to getting hired. Try to identify companies that may be looking for some specific expertise you can provide, even if it isn’t the most attractive tool in your bag, and be transparent about your willingness to do that less desirable work in exchange for exposure to skills that are in demand.
For those in the most stagnant of technical environments, taking on independent projects or open source may be the best way to gain experience and increase marketability. It’s usually preferable to learn new things on the job (because money), but being proactive about your career and keeping abreast of current marketable technologies will also show initiative to potential employers. The level up from personal projects almost always comes from an employment change.
Sometimes to level up you need to take a step back – or sideways
Careers aren’t always linear, and the expectation that trajectory needs to follow a strict continuous and incremental level of responsibilities is perhaps naive and potentially dangerous. Job seekers are often prone to placing too much weight on a position’s salary or (gasp) title without fully considering the position’s potential opportunity as it relates to future marketability and career development. Somewhat frequent movement between jobs is accepted in our industry, so positions can be viewed as stepping stones to future opportunities.
When evaluating new roles, whether with a current employer or another firm, imagine what a three or four year tenure in that role at that company will look like on future résumés. Will the skills likely to be acquired or improved in that role be marketable and transferrable to other firms? Accepting positions that come with lateral responsibility and compensation is usually a wise long-term decision when provided a more favorable learning and growth environment.
How To Succeed in Software Without a CS Degree
This week I was approached by two individuals seeking advice on finding employment in a programming capacity, yet both lacked the traditional standard requirement for entry-level positions – the BS in CS (‘BSCS’). I get asked about entering the industry often, and each scenario has a unique wrinkle.
The most recent candidates were a fresh Ivy League liberal arts grad and a Physics Ph.D. The former had brief hobbyist programming experience and the latter gained light exposure during school. Both are immediately employable in other industries, but perhaps not in the field they now target.
Of course, both may still be able to earn a BSCS (or MS) and take the traditional route. For our purposes here, let’s take that option off the table. For a Ph.D., the thought of additional classes might be hard to swallow, while costs might serve as a barrier for many others.
Non-BSCS candidates are often at a distinct disadvantage when competing with BSCS grads for entry-level positions. It’s becoming more common for CS grads to enter the workforce with multiple internships and code samples to bolster their candidacy. It’s reasonable to assume that typical non-BSCS grads have nothing comparable, in addition to what may be considered a less attractive degree.
One important point to remember is once you’re in you’re in, meaning that the most difficult job search for non-BSCS grads should be the first one. After gaining a bit of experience, your risk factor subsides (assuming you didn’t perform horribly in your first job). After three years no one cares about your major, and after five no one cares about your degree.
What are the common approaches for a non-BSCS grad to break in?
DIY and self-study (AKA GitHub, apps, certifications, blogs, and sites) – This method is based on the philosophy that you get a shot if you have a body of work. The wealth of freely available resources makes this method attractive to both the confident and the frugal. There can be a fine line between rigorous code immersion and post-graduation idling, so it’s helpful to set tangible goals, a schedule, and practice self-discipline.
When given no direction on what to build, people usually struggle to find projects ideas. Look for suggestions like those on Martyr2’s Project list, and improvise. As for reading material, there are extensive lists of free programming books that may be helpful. All the material you need is out there and easy to find.
Bootcamps – Any conversation today about breaking in for the non-BSCS will include bootcamps, and I have mentioned thoughts on them before. Bootcamps may be regarded as a compromise, where the investment of both time and money rests between DIY and degree programs. Some view bootcamps as an accelerated BSCS, or a hybrid internship and apprenticeship with classwork included. Most bootcamps appear as preparatory schools for startups based on the skill focus and instructors. Do your homework, and use caution when discussing the value of bootcamp experience versus degrees to avoid insulting employers.
Internships, or cheap/free labor – Some organizations (think small businesses and non-profits) will let a non-BSCS perform development tasks as an intern or volunteer. This can be a clear ‘win-win’, as the organization gets productivity while you get somewhat valuable real-world experience. A combination of volunteer or internship and personal projects starts to level the playing field for a non-BSCS.
Training in – There are companies that hire non-BSCS for entry-level programming jobs, and the first months include corporate training programs designed for non-CS grads. The positions may pay less than entry-level programming jobs, with curriculum intended to produce effective employees instead of versatile engineers. For example, instruction could focus on proprietary technologies and frameworks instead of popular industry offerings.
What are some key items to consider?
Get out of the basement! – Some DIY’ers bury their head in code and books with no human interaction. Make community learning events and outside communication a part of your diet. This will help you measure your knowledge in a live setting while also providing the opportunity to make some industry contacts.
Don’t enter the job market too soon – For CS grads, the natural time to start the search is around graduation. No mystery there. For the non-BSCS, there is an instinctive rush to start applying to jobs early in order to take the temperature of the job market. Fight the urge. If you apply to a desirable company today and are subsequently deemed unready, don’t expect to be reconsidered in three months (when you are ready). Make sure you know enough to succeed in technical interviews, have your GitHub code clean and optimized, have any apps or sites tested and fully functional, and are prepared to make a strong impression.
Leverage the skills you have to acquire the ones you want – Bringing useful abilities and experience that can pay immediate dividends (no matter how small) to an employer mitigates their hiring risk. If you are able to contribute to an organization beyond just code, providing both a learning opportunity and a decent wage is easier for firms to justify.
Be realistic – Your three months of self-study or bootcamp are not likely to get you the dream job at Google. Be willing to start towards the bottom and pay your dues to move up.
Beware certifications – When faced with a choice of proving abilities with either code or certifications, always pick code. Many industry pros attach a stigma to those who focus on getting certified instead of just doing.
Make learning opportunity your #1 job search criteria for first jobs – The money will come. Trust me. If provided multiple job opportunities simultaneously, opting for a job due to an extra $2K or a commuting difference of five miles will be regretted. Find a place where you can learn and grow.
For more tips on job search for software professionals, see Job Tips For Geeks archives or my book.
Why You Are Overpaid
I wrote Why You Make Less Money in early 2013, which attempted to account for the many reasons some technology professionals make less than others with similar qualifications. Underpaying employees (defined as below market rate, which can admittedly be difficult to truly know) will cause problems for both the employee and his/her employer, but overpaying also creates some challenges on both sides that are often overlooked.
Rarely do I encounter someone in this industry who openly acknowledges being overpaid, but when it happens the conversation is not what you might expect. The realization of being overpaid is typically not met with a sense of pride or accomplishment, but rather a sense of fear. One explanation for the negative reaction is that the discovery is usually made during a job search (active or passive), where someone finds several employers are unwilling to approach their current compensation.
I am not suggesting that you should turn down job offers that are significantly above what you know is market rate, and taking advantage of market fluctuations is expected to some degree. However, there are three main dangers when it comes to being overpaid.
1. You’re locked in to your job unless you take a pay cut. Acknowledging that you are overpaid may not help.
2. You based your lifestyle on an unrealistic earning expectation.
3. You are likely first to go when rates normalize or the employer has financial difficulty.
If you are overpaid, it is vital that you recognize the anomaly and you should not base important financial or career decisions on current income.
It is useful to look at some possible explanations as to why one may be considered overpaid. (and how common it is)
Consulting or contracting dollars – In the technology world, these complicate market rate. Consulting companies and body shops charge big bucks, and they are able to hire salaried or hourly employees at levels well above what are typically paid to the client’s own staff. These premium rates and salaries are routinely explained by several contributing factors, such as the instability of contracting, the advantages of hiring temporary employees, or benefits plans. The compensation is also fairly easy to justify, as a company can easily afford to pay you 100K salary if it is known you’ll bill 2000 hours at $125 (250K).
The disparity between contractor/consultant pay and traditional employee pay primarily becomes an issue when someone makes the move from one world to the other. Most would expect to increase or maintain their compensation when changing employers, but that is usually not the case for contractors or consultants switching over. This is also why you may witness contract-to-hire employees trying to extend their contract period before conversion, as they are likely about to take a pay cut with little difference in any other aspect of the job. Very common
Unique combination of skills with unusual value to a specific company – An experience profile that is highly valued by one firm is much less valuable across the general market. An applicant with significant experience using every component of a company’s stack that also possesses highly-specific domain expertise may receive an inflated offer that won’t be matched by other employers. This situation is compounded when there are known competitors that value an identical skill set, and the cost of losing the employee will negatively impact the business. Rare
An employer early adopts and banks on a new technology – This is not dissimilar to the explanation above, with the exception that it is one particular skill that creates the variation. New hyped languages and platforms tend to cause spikes in demand that are impossible to fill with experienced workers, which temporarily raises wages above what they were and what they will likely be in the future. This creates a short-term seller’s market. Very common at any given time for certain skills
Unattractive employer – Companies that develop a poor industry reputation may resort to paying (and advertising) compensation above market in order to attract candidates. Other than promises of a brighter tomorrow, the easiest element to quickly alter is usually pay. A firm’s infamy may be the result of overworked staff, bad press, or even accumulating technical debt, and public opinion often remains negative long after the ills are repaired. Common
Poor benefits, limited perks – Job seekers tend to focus on salary and not overall value when comparing job offers. Part of this is ego-driven, as you are unlikely to brag about your firm’s high 401(k) match or insurance premium contribution at a cocktail party. Some companies recognize this and will scale back benefit offerings in order to maximize cash compensation and promote the perception that they are paying above market rate. This is not exactly overpaying when we consider the total package, but the statistics and surveys that provide market data primarily depend on cash compensation. Rare
Long employment tenure – Large organizations that schedule regular cost-of-living and salary increases into employment contracts often find themselves paying above market rate. Somewhat common for large firms
Compensated to take a chance on something risky – Startups that do not offer any form of equity or options to new hires may find themselves overpaying for talent. Employees that remain during or immediately after an acquisition will often be offered retention bonuses, which may indicate the company’s acknowledgment of uncertainty for future employment. Common
Counteroffer (upon resignation) or pre-emptive counteroffer (they knew you were looking) – Counteroffers may just be a corrective measure for long-term retention that bring an employee up to market rate, but in some instances a counteroffer is a method for only the short-term retention of an employee due to the inopportune timing of their resignation. In the latter case, compensation is often forced above market rate to ensure retention and project stability. The employee’s value temporarily spikes during key moments in a project, and a resignation with counteroffer at any key moment can result in overpayment. Once the project/goal is attained, the employee’s value returns to market rate but salary does not. Rare
Being overpaid is only a problem when you aren’t aware of it or sometimes when seeking new work. Research market rates for your skills and keep tabs on compensation trends in the industry. If you receive multiple offers below what you perceive as your market value, get some professional opinions from recruiters or colleagues.
Boot Camps, MOOC’s, and Jobs: A How To For Fresh Devs
Every year, thousands of professionals in various lines of work look to the programming world as a promising new employment option. Just in the past few months, I have spoken to attorneys, accountants, salespeople, and even a former professional athlete trying to land their first paying gigs in the industry. This isn’t the first time we’ve seen this.
A brief history lesson and cautionary tale
During the initial dot com boom of the late 90’s, millions scrambled to enter the technology industry. Naturally, some entrepreneurs looking to cash in on the movement developed accelerated training programs and boot camps designed to quickly convert blue collar workers into earning members of the IT industry. These classes and certifications were not cheap, but they usually cited high placement rates (and in some cases guarantees) and salary data for graduates.
Early on, the training programs typically had barriers to entry. Entrance exams and interviews left the least qualified applicants on the outside looking in. Time commitments made juggling a full-time job and a training program challenging for many, while cost made these programs inaccessible for others.
As you might expect, training programs with lowered admission standards and reduced prices arrived on the scene. Financial aid was made available, lecture times were adjusted to accommodate almost any schedule, and marketers flooded TV/radio/newspapers with anecdotes of auto mechanics and dental hygienists now earning double in the IT field. When qualified instructors were not available, classes were led by recent graduates who did not find employment.
Much of this training was geared towards obtaining a certification known as the MCSE (Microsoft Certified Systems Engineer), which was primarily a qualification towards Windows admin roles or desktop support. Even today, Microsoft has marketing material live on their site touting the value of these certifications.
The early graduates of the first programs probably did have high employment rates. However, the rise of the MCSE factories created a new class of applicant dubbed the Paper MCSE, defined as someone with no experience that was just able to pass the test. The MCSE certification quickly became associated with a type of get rich quick mentality, and having the letters next to your name was less indicative of knowledge and more likely someone trying to game the system.
If this story doesn’t sound at least a bit familiar, it should. Back then the message was ‘learn computers’, but now everyone from the President to Shakira (not to mention Ashton Kutcher and NFL legend Warren Sapp?) is telling us we now need to learn how to code. Today’s career changer isn’t trying to simply fill what are generally considered less glamorous jobs like help desk, but rather they want to be like those (pardon the silliness) rock stars and ninjas that they read about who are higher up the food chain.
Programming boot camps and the availability of MOOC’s has again taken learning of in-demand skills to the masses, and (regardless of your opinion on their value) the emergence of these programs impacts the hiring landscape for everyone. For now, most of these programs have some admissions criteria and may be affiliated as feeders to recruiting or consulting firms. Unlike their predecessors, the programs often boast that graduates will network with industry veterans and leave with real-world contacts to leverage in their job search.
Although it’s far too early to see how these graduates will do over time, history and basic economics indicate that new programs of reduced quality will emerge.
The difference between then and now
The major difference between the MCSE gold rush and the recent development-focused trend is that today’s career changer is often expected (and hopefully able) to demonstrate proof of their credentials. Graduates of boot camps are often very quick to point out that the classes were rigorous, had low program acceptance levels, required hours beyond typical full-time jobs, and that they built professional-grade applications before graduation. In almost every case where I’ve encountered a boot camp grad, these topics were brought up immediately by the job seeker. If the reputations of these programs become overwhelmingly positive (I’d now say they are no worse than lukewarm now), grads should become much less defensive as to the value of their education.
Being accepted into a help desk job today without experience or a relevant degree is one thing, but how willing will the programming community be to view these graduates as one of their own? This is more daunting when you consider that the community is considered to be protective of their craft’s reputation, and are sometimes known for being less-than-welcoming to their own. Will employers value the more hands-on approach of a three month boot camp over traditional lecture-based four year CS degree programs?
Keys to success
Whether you graduated from a boot camp or a four year program, I think the expectations for most new hires are similar. Employers probably won’t be expecting boot camp grads to be committing code any sooner or later than a BS in CS, and it is expected that there is inherent risk for any hire (particularly any hire without experience). There is some leap of faith for managers trying to evaluate someone for their first industry position.
For boot camp grads specifically,
You’re not being hired because of your boot camp app. Although your code portfolio may help you some, in a few years you’ll realize your app looks like it was coded by someone who learned Ruby in three months. Don’t overstate the importance or relevance of whatever app you built – it’s incredibly impressive to you because you don’t know better (yet). You are being hired almost exclusively on your perceived potential, not weeks of work.
You’re being groomed to work at startups and smaller firms. At this point HR representatives at most large firms will be less open-minded to you than to CS grads. Don’t take that personally because it’s really not about you, and big shops probably aren’t who you are trying to attract anyway. Your instructors likely came from startups, are teaching development as is done in typical startup environments, and the technologies taught are of a common startup stack. Your job search time is best spent focusing first on the firms that have a relationship with your program, and then other startups.
Your non-programming intangibles are just as relevant as the boot camp. Employers know that you can’t become highly productive in programming with a few hundred hours of learning. Conveying the smart and gets things done attribute is still the most important factor. You are still considered a risky hire, and if you are perceived as potentially damaging to the team dynamic you will be passed over for someone less risky.
Use caution if comparing boot camps to CS degrees. The two are vastly different, both with advantages and disadvantages. The quality and quantity of time for each are difficult to compare, and those that invested four years are more likely to be swayed by your knowledge than by diminishing the value of their degree.
To both CS and boot camp grads,
You’re not an expert. In my experience, the word expert gets bandied about more often among the inexperienced with something to prove than it does by industry vets with project history. Expertise takes time. Once you’ve been in the business a few years, you will meet people who know twice as much as you do yet still consider themselves novices. Whether in interviews or on résumés, choose your words very carefully to prevent the appearance of overconfidence (and to prevent what seems an open invitation for technical grilling).
You’ll do best if you show respect to the industry veterans. The people you are interviewing with have likely paid their dues during times when learning and information wasn’t as readily available. It’s probably difficult to envision being a programmer in 2001, where those in the field had far fewer tools or resources. They probably think you’ve had it easier in a lot of ways (and harder in others), so temper confidence with some humility.
Job Tips For Geeks: The Job Search DRM-free ebook reduced to $6.99 for the holidays. A great gift for the tech pro in your life, or for the annoying co-worker that you wish would find a new job.
How and Why to Backdoor Into Jobs
When I read anecdotes from frustrated job seekers in the tech industry, they usually start out the same way.
“I applied to dozens of jobs
but I am not getting any response.”
Sometimes the low response is warranted due to lack of qualifications or less obvious factors, but often the problem is simply that the job seeker never got access to the person/people who matter most in the hiring of technical professionals. Hiring bottlenecks start with the traditional application process (submit résumé blindly) and can be further complicated by HR reps that are hiring for disparate skills and business units. At a smaller company with no recruiters, the task of screening résumés may go to junior employees and administrative personnel with no background or training in hiring.
When you like a company and want to get an interview, the ideal entrance is very rarely the front door. The front door is the advertised entrance that HR wants you to take, crowded with active job seekers with varying qualifications that will be culled or herded through the process by the people manning the door.
After many years in the business I’ve learned that if you ask privately (meaning not within earshot of HR), most technical managers don’t want candidates to come through the front door either. They would rather you came through a back door, and if necessary to hiring protocol they will later introduce you to the front door guardians to ensure passage. HR mans the front door, but the geeks own the back doors. This is how it works at many employers.
What are the more common back doors?
Salary Negotiation For Geeks
Advice on salary negotiation is abundant, but material written for the general public may not always be applicable to a technology sector where demand is high and the most sought after talent is scarce. There is quite a bit of misinformation and the glorified mythology of negotiation is often mistaken for the much less interesting reality where little negotiation actually takes place.
Let’s start by going over a few “rules” that are often thrown around in these discussions.
Using absolutes is never a good idea (see what I did there?), and there are definite situations when you should not negotiate an offer. For example, entry-level candidates who are considered replaceable with other entry-level candidates often do more harm than good by negotiating, particularly when the job being offered is among the most desirable. We will cover when you should and should not negotiate a bit later, but there are clearly some conditions when it’s not a great idea.
There’s no harm in asking for more/Doesn’t hurt to ask
Actually, sometimes it does. When you propose a counteroffer, there are only a few realistic outcomes.