Interview/Hire Great Devs: Part 1

Hiring great technical people starts and ends with making a great impression on the best people. This means you have to get the best people in the door.  Once you have hired some of “the best”, your team will attract more of the same but starting out can be difficult. This post focuses on what to do once you’ve attracted their initial interest. I’m specifically covering interviewing and hiring awesome developers, but much of this is applicable across technical disciplines and other skilled positions.

Initial Phase: Resume/Profile Screening

Know What You Are Looking For

NYSpyglassStart the process by knowing what kind of great technical people you are looking for. Are you looking for great young talent that is unafraid of making mistakes? Or tried and tested people who account for exceptions before they arise? Are you looking for teachers or learners (or both)? Do they need certain specific skills or only the great desire and ability to learn, grow, and improve? What is the near, mid, and long term composition of your team?

Many questions should be asked and those questions don’t always have a clear answer. Do you need a consultant or full-time hire to help determine what you are looking for?

Be able to narrow your search quickly based on your must-have criteria and let the rest be discussion points during later phases of the hiring process. Don’t spend more than 5 minutes per resume, LinkedIn profile, or StackOverflow Careers profile weeding out the “No Call” people. It should be obvious because you already know what you are looking for.

I recommend creating two Top 5 lists to assist with knowing what you are looking for. The number of items on the list isn’t the focus. Use 3 or 7 or whatever suits you. It’s the exercise that is important. Write down 5 must-have attributes and 5 must-not-have attributes. Use these lists during initial screening. Pass on anyone with less than 4 must haves or more that 1 must-not-have.

Second Phase: Phone/Online

Personality First

Phone screen or Skype/Hangout for personality and team fit first. I prefer to see people face to face but this isn’t always possible. If you are starting a new team, this phase is even more important. The person you are screening should be someone you can see yourself having an interesting conversation with over lunch. You will be spending a lot of time together building a team. Getting along well is vitally important.

Split PersonalityThe personality screen doesn’t need to be long. Maybe 15-30 minutes. If it goes well, move on to the next phase without hesitation. If is doesn’t, this is the end of the road for this candidate regardless of their other credentials. This may seem extreme or harsh but honestly it saves your time and effort as well as the candidate’s.

On the flip side of this is the importance of representing the culture and personality of your group as accurately as possible. Talk about your goals and aspirations as a team and as a company. This gives the candidate an opportunity to self-select out of the hiring process as well. You don’t want to hire people who won’t be happy in your environment. Honesty is definitely the best policy.

If you are looking for a leader (or emerging leader) this is also the time to make a early assessment of the candidate’s ability to fill this role. Confidence and charisma matter more here that they might otherwise.

The Learning/Knowing Equation

A technical (and partly cultural) phone/online screen of the people you think might be a good personality fit is the logical next step. The interview should be performed by a trusted technical member of your team. This phase is going to go back to the first section because you must know what you are looking for. Rank candidates based on that knowledge.

That said, don’t hold out for a “unicorn”. For our purposes, a unicorn is a developer who knows your tech stack inside-out, knows your business, and knows what you need to do to solve all your current and future problems. I believe unicorns can be developed if you hire people with the right potential, but they cannot be found and hired. At some point the mask comes off.

unicornDeveloper

With this in mind, your focus should be on the candidate’s ability to learn and on gauging what they already know and their ability to teach it. These traits are and probably always will be vital for a technology employee. Of course you’d like someone with experience in some of your technology. The point here is not to miss out on someone who is a fantastic learner/teacher and doesn’t check all of the other boxes on your checklist.

teaching LearningI describe this second screening as partly cultural for a reason. Your interviewer should be verifying that the candidate not only can learn and adapt quickly, but also if they enjoy learning and adapting quickly. When going through the things they do know, the interviewer should look for something they are personally less familiar with. They then can encourage the candidate to teach it to them.  Remember to discover if the candidate is not only capable of teaching but also if they enjoy it. The collaboration component is important.

There are great tools to help with this phase. A good screen-sharing app like GoToMeeting, Skype, or Screen Hero is the best way to do some quick pairing on a simple problem. The problem should be something the candidate may not be wholly familiar with so that their capability of dealing with the unknown can be assessed. That said, this should still be fairly short and sweet. 30-45 minutes tops.

If it seems like this is a good possible fit, personally invite the candidate to visit your facility. If you don’t have a facility, invite them to lunch. If you are looking at remote or relocation hires and the position is permanent, you should arrange transportation/lodging. Under no circumstances should you ever make an offer at this point in the process.

The candidate should have a clear and concise understanding of the next steps at this point. If you are unsure if you should move on to in-person contact, the answer is no.

Part 2 Coming Soon

I will cover the particulars of the types of things you should be doing to “Hire Awesome” in the in person interviews. No specific date, but stay tuned. In the meantime, I’d love to see your thoughts and comments here or on Twitter.

Tagged with: , , , , ,
Posted in Career, Software Career, Software Development, Software Engineering, Team, Technology Career

2014 Developer Learning Guide: Part 1

Background

I originally wrote on the subject of developer training in 2010. It was with the idea that I would convince management of the importance of training technical employees. I wrote an internal document for my boss and we implemented a couple of the ideas. My boss was understanding although his boss was less so and that limited some of our options. One year (and one move to Texas) later and I was back in the same boat; I was handing a document off to my boss and trying to convince him of its validity and importance. We eventually started some great traditions at that company and I ended up publishing my Guide To Developer Training For Managers on my blog around the same time. As I started looking into moving back to Utah in late 2012, I was despairing that I would forever have to sell leadership on the value of developer training every time I came to a new company… can you say facepalm?

facepalm

It occurred to me that I might be taking the wrong approach. As I ramped-up  on interviews I noticed that a couple of companies stood out because they already had begun to establish a culture of learning. I’m happy to say that I chose one of those companies and today I enjoy a work environment where leadership not only “gets it” but is an active promoter of learning and training. Ideas that are brought up to improve training are not only appreciated but are also seriously considered. And I don’t even have to write a long and windy proposal first.

What a difference!

I’m still going to talk briefly about a few of the reasons developer and technology employee learning is important. Convincing managers will no longer be the major focus of the article. As you may have noted from the updated title, I’m refocusing to list learning options that are possible, valuable, and current. I’ll also post an updated list each year.

Importance

The anecdote I’ve heard several time goes like this:

Decision Maker 1: What will happen to our company if we train our technology employees and they leave to find better jobs elsewhere?
Decision Maker 2: What will happen to our company if we do not train our technology employees and they stay?

Two varying points of view obviously.

On a team where learning is not important, developers tend to stagnate or move on. Will the best talent stay in an environment like this? I’ll spare you the A, B, and C-Player talk. It should be sufficient to say that a lack of learning isn’t healthy for development culture.

Ultimately, it is the responsibility of the developer to seek learning and the best developers know this. Are the best developers going to be working for companies without a great learning culture? That scenario seems unlikely to me.

Learning Options

What if I told you that a classroom isn't always the best learning environment?

Developer training doesn’t necessarily begin or end in the classroom.

There is a wide spectrum of cost among differing methods of learning. A good mix assures plenty of coverage without completely breaking the bank.

This list is meant to be only as inclusive as I could make it given my current knowledge. Please leave a comment or contact me if you know of options I’ve missed.

Online/Print

Videos

This is usually one of the best places to look for technology-specific and implementation-specific training. There are multiple options and they are growing all the time.

Free – YouTube, Vimeo, Egghead.io, Channel9, etc.
The quality of free videos varies. The only advice I can give, is to avoid wasting time with something that doesn’t seem valuable pretty quickly.

Subscription – Pluralsight, Wintellect Now, Lynda.com
Subscription-based video training tends to be pretty well curated by the company selling the subscriptions. They rely on ongoing subscriptions for revenue so new high quality content is constantly being released (or the model is not successful). Pluralsight (http://pluralsite.com/) in particular has an enormous and constantly updated library… and no, we aren’t affiliated. Pluralsight has purchased several of the smaller players to help build out their library over the past couple of years. Subscription may cost as much as $499 per year, and is a good return on investment if you learn well this way.

Purchase – Udemy, Cleancoders.com, etc.
These tend to also be of higher quality than the free options in my experience. There are some great sources out there… but you may have to hunt for them. Word of mouth has been valuable to me here.

Social Media/Blogs/Podcasts

If you enjoy this blog, follow me on Twitter.

If you enjoy the blog, follow @dubmun on Twitter.

There are a wide variety of options here. Find people who talk about things you are interested in and subscribe to their blogs or follow them on Twitter/Google+. In my experience, many of the thought leaders in the developer community are on Twitter. This has the added benefit of allowing interactions if you have a question about someone’s latest tweet or blog post.

Podcasts can also be very, very good as long as they aren’t too sales/technology focused. Choose wisely. I find them particularly useful for long commutes. HerdingCode (http://herdingcode.com/), Ruby Rogues (http://rubyrogues.com/), and Writing Excuses (my SF/Fantasy writing guilty pleasure) are among my personal favorites. A good podcast app is a must as well… downloading all the episodes manually can get tedious.

This is where the cutting edge lives and breathes. If you want to know what is really happening you should be reading and hopefully contributing to this kind of content.

Open Source Repositories

This is the section for Github, Codeplex, Google Code, and Sourceforge. Github is definitely the current leader and you can find awesome and interesting code in any of these repositories.

Looking at how other people code is a great resource for learning. Additionally, submitting a pull request to an open source project can be the fast track to learning (albeit a potentially humbling one). Humility is a good thing, it lets us know where we can improve.

Books

I’ve heard a lot of varying opinions on books as a training resource. Yes, technology-specific books are often outdated before they are printed. I generally avoid the latest C#, Java, Clojure, Javascript, etc. books (with a few exceptions). The flip side of this is… if you do choose to read tech-specific books, be sure to get the latest version.

What a library!

Some options here…

My thought is that when you are really looking to deepen your knowledge on something specific, books are a great resource.

There are also many classics that are as close to timeless as you can get in this industry. I highly recommend books like The Pragmatic Programmer, Clean Code, The Art of Unit Testing, Design Patterns, and Domain Driven Design as examples of excellent resources for learning practices and patterns or as reference material.

Books are available in several formats as well: hard-copy, ebook, and subscription.

Hard-copy and ebooks are basically just a matter of preference. I find that I like having a hard copy of books I might lend to others, but nothing beats the convenience of an ebook that you can read on multiple devices. When I have the option, I get both.

Subscription to a service that provides ebooks can be really handy as well. Particularly if you find yourself reading a lot of technology-specific books. Safari Books (http://www.safaribooksonline.com) offers hundreds of titles on technical subjects for $199 or $460 annually.

Part 2 Coming Soon

In the second part of this post I will cover in person options for learning. This is a broader topic than Online/Print. Some of the possibilities may surprise you.

I’d love to see your thoughts and comments below or on Twitter.

Tagged with: , , , , ,
Posted in Software Career, Software Development, Software Engineering, Technology Career, Training

When To Quit Your Job

A friend asked for my advice on this subject recently:

I’m kind of thinking about changing jobs. I’m doing good at [COMPANY] so no concerns there. I would honestly rather be working in the software and technology space, instead of the financial industry. [...] The other factor is that I’m not in an area where I can attend conferences and be involved in a good development community. I’ve only been at [COMPANY] for [less than 12] months. What do you think?

While I was flattered to be asked for such personal advice, I’m not really qualified to say what’s best for anyone. Maybe not even myself. Remember this.

The following is the philosophy that I try to follow in terms of changing jobs in case helps anyone.

When To Leave

First, as anyone I’ve talked with about this will tell you, I’m a big proponent of changing jobs at least every 3-4 years.

Departures

In our profession, this helps us remain fresh and exposes us to new tech/architectures/ideas in a way that is hard to ignore. This is a good thing. My general rule holds unless there are special circumstances. For example: vesting concerns, when nearing retirement, or another important life event. I’ll also interview every year or two in order to keep my interviewee skills honed and because it helps me to be a better interviewer when I’m performing interviews at my current company.

When To Stay

As for a shorter end of the tenure spectrum, I usually will stay a minimum of 1-2 years.

Again, this is a rule of thumb. I’m not going to cover all of the exceptions here. If circumstances like a hostile work environment or an amazing new opportunity came up, I would consider breaking it. I have a friend who left a company after a couple months once because it ended up being hostile. I can’t imagine any decent future employer who would fault him for this. However, it is the only instance like this in his career. An established pattern of “hostile” work environments is a read flag all by itself.

If you are making an immediate decision, sleep on it. One more night can help organize your thoughts and shouldn’t hurt anyone involved.

Regrets

Don’t make a hasty decision you might regret.

As for my recommendations, the first year is basically for resume purposes… taking a full-time employee position and then quitting before a year is up might make some employers question the value of going through the cost and effort of bringing you on. It may even be “interview prohibitive”.

The second year and beyond is often when I find that I learn the most about a business, can contribute the most (due to knowledge, trust/influence earned). It is also when I solidify relationships with people I work with.

Contracts

MercenaryAll of this is basically thrown out the window for contract positions. Contractors are expected to be mercenaries, to an extent, and might switch companies/projects every month without much scrutiny. I think there are some interesting things to be learned from that as well but I don’t have a lot of personal experience. I’ve considered joining a firm similar to Catapult or StG that sends contractors out to multiple companies and has a bench program for downtime. I believe it would be a valuable experience.

Summary

So the short version is: except for contracts, aim for a 1-4 year stay whenever starting a new job. Commit to this mentally, or don’t accept the offer. An exception could definitely be made in either direction under the right circumstances, but don’t plan on it. In practice, I have stayed at each of my gigs for 2-3 years without exception.

In my friend’s case, his company/team doesn’t match the values he wished they had and isn’t working on anything terribly interesting. Also, he is considering leaving the area. Not an emergency per se, but not great either.

My advice to him was to stick it out until a year is up while doing his best to influence change at the company. If things don’t start to improve in that time-frame, (i.e. if he felt he wasn’t having a positive impact) start looking.

Again, I’m not really qualified to advise anyone on their particular situation. I do believe these ideas have value and should be discussed.

 

Tagged with: , , ,
Posted in Career, Software Career, Technology Career

Legacy Dependency Killer

As promised, here are the slides for my hands-on coding session at Utah Code Camp. Thanks to everyone who attended the session. I had a lot of fun and I hope you did as well.

Also, the code is on Github: https://github.com/KatasForLegacyCode

I’d love to get it translated into Java, C++, and any other language that would be reasonable. I could probably do either of those myself, given past experience, but it’s been so long I couldn’t guarantee that the code I produced wasn’t legacy as well. If anyone is interested in helping out here I’d be very appreciative.

Hopefully, I’ll be creating other katas for legacy code in C# using other common patterns and publishing them here as well.

Tagged with: , , , , , , ,
Posted in Software Development, Software Engineering

I Like Food

Hopefully this article isn’t as banal as the title suggests. “I like food” is what I say when someone in the office asks me to join them for lunch (usually).

Why?

food-question-mark-628x363

 

Because I like my teammates? Sure.

Because I’m hungry? Usually.

Because I like food? Also true.

Because want to enhance my relationship with my coworkers and build camaraderie among the group? Getting warmer but not quite. The familiarity that comes from knowing someone outside of work does tend to humanize them and help with relationships and camaraderie (and all those touchy-feely things we engineers aren’t supposed to care about because we’rerobotswhoonlyknowhowtowritecodeanddrinkmountaindewandurinateinemptybiggulps).

In my experience, the real benefit is in improvements to communication and cohesiveness. It’s in the ability we gain to understand each other as people, to know our strengths and weaknesses, to use shorthand in communication, to avoid causing or taking offense, and to just be more effective working together. Whenever possible, I like to participate in non-work activities with my brothers-and-sisters-in-code (and sometimes with others at the company as well) because it makes us more effective. Good companies/managers understand this concept and go out of their way to engage teams in “teambuilding”. This can be a dirty word in the wrong environment. Don’t work in that environment!

ready_to_eat

So unless I have an important errand to run or previous plans, invite me to lunch. I like food.

Tagged with: , , , , ,
Posted in Career, Random, Software Career, Software Development, Software Engineering, Team, Technology Career

Software Prototyping: Please Throw This Away

I believe in the value of prototypes.

So do manufacturers, designers, and silicon valley. New hardware concepts at large coprorations like Google, Apple, and Microsoft are accompanied by many prototypes (for example Google Glass).

prototypes

User interface prototypes are key to discovering usability and are commonly used by designers. Often this starts with pen and paper before a single mouse is clicked or keystroke registered.

uiprototype

One similarity shared by all prototypes I want to mention before continuing is this: prototypes are never meant for use by the end user. In the case of Agile software development, we may have a select group of users work with prototypes with the knowledge that they will never see production usage in their current state. Additionally, if a piece of software serves some purpose in a production environment, it must be developed as such.

Opinions will vary on this subject, but here are the most important traits of a software prototype in my opinion.

  • A software prototype is developed in isolation. No (or absolute minimum) interaction with existing code.
  • A software prototype follows coding standards. We write clean code regardless of its final use. Perfect practice makes perfect results.
  • A software prototype is written by people who are constantly learning and training to hone their craft. More on this later.
  • A software prototype is written by people who will be responsible for writing the finished product.
  • A software prototype is discarded. I repeat. Throw it away after demoing it.

When the above specifications are followed, we gain some specific benefits.

  • We are provided the opportunity to experiment with a few of the myriad different solutions to a given problem.
  • We have the opportunity to learn from mistakes before creating a production-worthy solution.
  • We have the opportunity to use the best design possible based on first-hand knowledge when creating the final product.
  • Product/business people see their concepts in action earlier in the software development lifecycle.
  • Other groups/departments aren’t paying people to learn to develop software they aren’t ultimately going to create.
  • The company enjoys faster overall development times as technical debt remains low.

everyoneWins

My continued belief is that many companies have a large disconnect between technical and business people on the purpose and value of software prototypes. Prototypes are as much for developers and engineers as they are for business and product people. Technical teams should own prototype implementations.

Tagged with: , , ,
Posted in Software Development, Software Engineering

C# Little Wonders: An Introduction

csharplogoI’ve mentioned C# Little Wonders to engineers on various teams in recent years and several had expressed interest in the URL (when I successfully remembered/found it). I thought I would share it here and save some time.

James Micheal Hare (the series author) has added multiple posts to his blog over the past 3-4 years after switching from being a C++ engineer to C#. Given his background, Mr. Hare is very focused on efficiency. His concise approach and thoughts on why to use certain language features (or not) are very valuable.

If you are new to writing C# or have been doing so for many years, you’ll agree that it is a complex language. I have found and continue to find in C# Little Wonders much that I either didn’t know, had forgotten, or didn’t realize the value of.

C# Little Wonders

http://blackrabbitcoder.net/archive/2011/09/26/c.net-little-wonders-the-complete-collection.aspx

I hope you enjoy it as I do!

Posted in Uncategorized

Movies: Physical Or Digital Media (Legally?)

The Problem: Physical Versus Digital Media

Let me begin by saying I’m a programmer and we are, by definition, lazy. I despise physical media for its inefficiency and general in-the-way-ness. DVDs, CDs, cassette tapes, VHS, etc. The only real exception here is books. Something about holding a dead tree… but I digress.

digital media

I’ve gone out of my way to digitize everything possible for many, many years and it hasn’t always been easy. Recently, laws have been passed that say you can’t even make a copy of your own physical media for backup or viewing on your computer or media device. I’m certainly as willing to pay for digital content as the next guy. You just have to make the value proposition worthwhile. That’s all I ask.

Why Is Getting A Copy Of Digital Media So Hard?

The first time I tried to redeem a copy of a Blu-ray in digital media format via UltraViolet (http://www.uvvu.com/) was a couple years ago. It was some movie we had bought and I’m not sure I even remember why… probably just because we wanted so badly to support the people who made it. I get that way sometimes. Great work should be encouraged with cold hard cash.

Frankly, the UltraViolet process was TERRIBAD. Account creation was a joke and once I finally made it through that travesty, I couldn’t get the movie to register in the system. I tried again at some point not too far in the future (due to an unrealistic sense of optimism) and was again devastated by the total lack of anything resembling working software from UV. I downloaded a copy of the movie through alternative means at this point and forgot about the whole thing.

A New Experiment

Fast forward to last week… I am in the unique position of having my electronics infrastructure spread around the United States and I find myself buying DVDs/Blu-Rays more frequently than I normally would given the lack of available alternatives. Couple that with the fact that the missus had a flight to California scheduled and wanted to watch the copy of The Hobbit we just purchased on her Kindle Fire. Staring down the possibility of shelling out cash for a digital copy direct from Amazon, and paying AGAIN, I found myself gazing upon the UltraViolet sticker on the dragon-hoard pilferer’s Blu-ray and thinking to myself:

There is no possible way this will work, but I have to try.

The digital rights for the movies are kept by UltraViolet but it turns out that I can actually redeem them through Vudu (http://www.vudu.com). Vudu also works on iOS, Android, PC, and a ton of other devices as well. I’m vaguely familiar with Vudu because there is an app for it on my PS3 so I figure, “cool, I’ll be able to watch it there as well if by some freak chance it actually happens to work”.

I begin the registration process on Vudu and… it. is. surprisingly. simple. It asks me to link my UltraViolet account OR it will go ahead and create one for me if I don’t have one. I choose life:

It lets Vudu do the work so it doesn’t get the hose again.

This seems to be going okay but I’ve yet to enter the code for the movie. I search for the movie regarding the adventures of the esteemed Mr. Bilbo Baggins, click the button to redeem my UV copy, and presto-chango! I now have a digital copy of the movie that I can either download or stream through Vudu… apparently at will! I click play and the movie queues up as fast as anything on Netflix. No complaints there.

Next I navigate to “My Collection” on Vudu and find that they have gifted me with 10 other random movies that are now synced to my  UltraViolet account as well. Some of them are even good!

Now, some of you may see the problem that I ran into next… there doesn’t appear to be a Vudu app on the Kindle Fire.

Facepalm.

Some quick Googling reveals that I could sideload the Vudu app from Google Play but that doesn’t seem to be confirmation that this will actually work. The alternative is to create a Flixster (http://www.flixster.com/) account, attach the UltraViolet account to it, and watch the movie through that app which IS available on the Kindle. My sense of foreboding returns as I can only imagine that using the UV account with more than one movie vendor is going to cause a giant charlie foxtrot… if you take my meaning.

Strangely the process is pretty smooth. To my delight, the Flixster account now has access to not only the short, round, furry-footed fellow from The Shire, but also all of the free movies I received from the Vudu signup process. IT’S LIKE MAGIC THAT ACTUALLY WORKS WHERE IS THAT WIZARD HIDING AND WHAT IS HE UP TO?!

digital media

Now my wife has plenty of entertainment for her trip and I’m kinda stoked about this whole thing. I grab the few other movies I have laying around my temporary residence and find that they are added to both Vudu and Flixster with ease as well.

This is giving me warm feelings because I’m generally happy to pay for media that I love as long as it isn’t more trouble than the alternative. I’ve long since traded in my mp3 collection for a Spotify Premium membership and generally watch anything and everything available on Netflix before looking for another source. It seems I may actually have a viable way to own the movies I really enjoy without the hassle of living on the edge of the law. If only the Television industry would make shows instantly available and do something about the prices of their series I could get behind that as well.

One final thing: Vudu and Flixster are both offering another tempting option. You can purchase digital media copies of every physical movie you own for 2-5 dollars each. This is making me pretty glad I still have that considerable DVD collection!

Tagged with: , , , , , , ,
Posted in Random

Guide To Developer Training For Managers

Developer training often neither begins or ends in the classroom.

Developer training often neither begins or ends in the classroom.

First things first, why on earth would you want to train developers? Isn’t that just an added expense? This is a fallacy for a several reasons including the fact that:

DEVELOPER TRAINING DOESN’T HAVE TO COST ANYTHING

More on that part later!

Development training and continuing education is vital to companies that want to maintain a healthy and satisfied development group. When we opt to invest in training, we are choosing to ­­retain valuable specialist employees and to teach them to be more effective at what they do. This has multiple benefits for the company and the employee:

Efficiency/Simplicity – Employees become faster, more efficient, and make fewer mistakes when they have hands-on training in best practices. This also results in a simpler and more easily maintained code-base.

Hiring – A great training program for development is an excellent selling point when looking to attract new development talent. Top tier developers want to surround themselves with others who are as good or better than themselves. A great training program is a good way to develop that talent and is something top talent looks for.

Preparation – Developers with training in upcoming technologies are quicker to see how they can implement them in their organization to the good of the company. These developers are better able to see industry and social trends which can give your company an ongoing competitive advantage. Also, they will be able to point to reasons why a new technology choice may not be right for the company. When the company’s bottom line is healthier, everyone wins.

Teamwork – Developers who train together work well together. They tend to develop camaraderie and work more effectively at solving problems as a team. Training together also helps expose developers to each other’s strengths.

Job Satisfaction – Well trained developers are are learning developers and let’s face it… if we didn’t like learning we wouldn’t be in this profession. When developers begin to feel stagnant they may start looking for work where they can grow or they may also become careless and write poorly thought-out code.   A good training program will help to keep developers satisfied and satisfied developers don’t go out of their way to look for other employment. This allows the company to retain their existing workforce longer and save the money and overhead involved in hiring (training, recruiting fees, bonuses).

——-

Potential Technology Training Topics

Topics should be chosen based on their applicability to the needs of the business. No responsible developer would expect otherwise. Also, real business problems should be given to help teach theoretical concepts through workshops (more on this below).

Methods of Training

Technology training can be very expensive if allowed to be. Hiring outside training companies, attending seminars, and certifications should be supplemented with sessions presented by internal experts, videos freely available online, and book discussions.

Valuable employees should be encouraged to train on their own time in addition to being given training on company time. This give and take approach will help your company realize the best gains by encouraging a knowledgeable and proactive culture among developers.

Online Videos
1-2 Hours – Daily/Weekly/Monthly
Free
These can be held during lunch or outside normal work hours. If a developer misses the presentation they can catch up on their own. A great resource for Microsoft related videos is http://channel9.msdn.com/

Developer Presentations
1-2 Hours - Weekly/Monthly
Free
Could be held any time. Presenters should be by volunteer only. Topics should be in line with the current curriculum.

Workshops
2-4 Hours - Monthly
Free
A workshop should follow a series of videos and/or developer presentations that cover the same or similar topics. No specific homework but the implementation should be something of value to the company at least as a prototype. Sessions held during business.

Workshop Follow-up
30 Minutes - Monthly
Free
Developers present their solutions to the workshop problems. Should take place a few days after the initial workshop.

Book Discussions/Club
1 Hour - Weekly
Cost of Books (Free-$80 per participant)
Developers vote on and read a technical book each month and discuss it for an hour during lunch or work hours. Books could be purchased by the company or by the developers. There is a lot of great free material for discussions available online as well.

Onsite Training Seminars
1-N Days - As Needed
Varies: $1000-5000 for up to 25 attendees
An inexpensive, onsite training. The internet is your friend… do a little research and you can find many companies offering this type of service.

On-Demand Video Training
1 Year - Annually
$100-500 per user
This type of training can be handy because is is available at any time and the people who produce/present are professionals who are not only experts in the field but can also give great presentations. There are several providers of this kind of content including Tekpub, PluralSight, and Peepcode. **
http://pluralsite.com/
http://tekpub.com/
https://peepcode.com/ 

**Tekpub and Peepcode have been purchased by Pluralsight since this was written. Looks like we’re going with Pluralsight!

Safari Books Online
1 Year - Annually
$199 or $460 per user
Safari Books offers hundreds of titles on technical subjects related to the development profession and Microsoft specific technologies.
http://www.safaribooksonline.com

Offsite Development Conferences
2-5 Days - Annually
$500-5000 per attendee
These are the conferences that really get the creative juices flowing in developers. Most major tech companies have at least one developer conference per year (Google, Apple, Facebook, Microsoft). Most companies with a decent training budget send their developers to one per year (almost never 2+). Estimated cost includes hotel and transportation.

developer training

Offsite Developer Training

Certifications
Varies - Varies
Varies
Some companies pay for developers to train for and take development certification tests.

Graduate Degrees/Tuition Reimbursement
Varies - Varies
Varies
Many companies offer to reimburse employees engaged in higher learning. This is another great opportunity. Encourage your employees/coworkers to take advantage of this benefit if it already exists!

——-

As you can see, the options for training developers run the full gamut of price, time, and commitment. The great news is, even if your company has little or no budget for training, all you need is a couple committed developers to get started with the less expensive (free) types of training. Now is the time to start training so that your company will attract, retain, and benefit from more highly trained and competent developers!

Tagged with: , , , ,
Posted in Training

SassAndCoffee Is Not A Smutty Romance Novel

SassAndCoffee !=

 Not SassAndCoffee

So what IS SassAndCoffee? From the author’s (Paul Betts) blog post:

SassAndCoffee is a library for ASP.NET (both MVC and old-school WebForms) that adds drop-in support for two new languages: Sass and SCSS, a language that allows you to write reusable, more structured CSS, as well as CoffeeScript, which is a JavaScript dialect that is much more syntactically elegant, but still preserving 100% compatibility with regular JavaScript.

I’ll go into more detail about the features of SassAndCoffee momentarily, but lets start with getting it into your project in Visual Studio.

You could grab the project form GitHub and compile it yourself but the simplest way to include the assemblies needed is through NuGet

SassAndCoffee’s NuGet project also adds some entries in your web.config:

 <system.web>  
     <httpModules>
       <add name="CompilableFileModule" type="SassAndCoffee.AspNet.CompilableFileModule" />
     </httpModules>
 </system.web>

 

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="CompilableFileModule" />
      <add name="CompilableFileModule" type="SassAndCoffee.AspNet.CompilableFileModule" />
    </modules>
</system.webServer>

 

Once this is complete, just create a .scss or .coffee extension file in your project and reference it from your HTML as if it were already interpreted as .css or .js respectively. We’ll go into more detail on this.

The main features you get from SassAndCoffee are as follows:

  • Easy setup: No need to install Ruby or node.js or anything else. Everything that is required is included in the NuGet project.
  • Automated compilation: simply add .scss or .coffee files to your project and reference them in HTML as you normally would (as .css or .js files) and SassAndCoffee handles the compilation and output linking at runtime.
  • Automated minification: minify your output files as well as other .js and .css files in your application with a simple naming convention.

Now let’s check out an example with Sass using the file SassAndCoffeeDemo.scss:

@mixin customDivText($size){
    font{
        weight: bold;
        size$size;
    }
    text-align: right;
}
 
div.big{
    @include customDivText(70px);
}

div.bigger{
    @include customDivText(150px);
}

Index.cshtml:

<div class="big">Big</div>
<div class="bigger">BIGGER</div>

_Layout.cshtml:

<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" 
type="text/css" />

Now our output looks this in the browser:

And SassAndCoffeeDemo.css contains:

 

div.big {
  font-weight: bold;
  font-size: 70px;
  text-align: right; }

div.bigger {
  font-weight: bold;
  font-size: 150px;
  text-align: right; }

Let’s try a “Hello World” in Coffeescipt. I’ll add the following code to a file named SassAndCoffeeDemo.coffee.

helloCoffeeScripters = (name) -> 
alert("Welcome to Coffeescript, "+ name)
 
$ ->
	helloCoffeeScripters ("World")

And refrence it in my _Layout.cshtml master page:

<script src="@Url.Content("~/Scripts/SassAndCoffeeDemo.js")" 
                        type="text/javascript"></script>

When we run our app we should see the following:

When we view the source of our .js file we see that the Coffeescript compiler has emitter the following javascript:

var helloCoffeeScripters;
helloCoffeeScripters = function(name) {
  return alert("Welcome to Coffeescript, " + name);
};
$(function() {
  return helloCoffeeScripters("World");
});

Now lets consider the other SassAndCoffee feature that tends to get overlooked, Minification. If we change the Coffeescript file name in our _Layout.cshtml file to include “.min” like so:

<script src="@Url.Content("~/Scripts/SassAndCoffeeDemo.min.js")" 
type="text/javascript"></script>

Then when we compile and view the source of our file we will see:

var helloCoffeeScripters;helloCoffeeScripters=function(a){return alert("Welcome to Coffeescript, "+a)},$(function(){return helloCoffeeScripters("World")})

The beauty of SassAndCoffee is in the amount of attention that you DON’T have to pay to it. It just works! Import the NuGet project and you can get to the business of learning how to use Sass and Coffeescript right away.

Refrences:
https://github.com/xpaulbettsx/SassAndCoffee
http://nuget.org/List/Packages/SassAndCoffee
http://sass-lang.com/
http://jashkenas.github.com/coffee-script/

Thanks to @alamocoders for letting me present this topic at their last .NET meeting. I had a blast. Here are the materials from the presentation if anyone is interested. It includes the source code and my slide deck.
http://dubmun.com/projects/SassAndCoffeeDemo.zip

Tagged with: , , , , ,
Posted in Web Development

WHAT IS YOUR FAVORITE INANIMATE OBJECT?

Easy answer for me… but first a tiny touch of background. I am a self-proclaimed CGFWB (Computer Geek From Way Back) according to my profile on http://www.dubmun.com :)

So, my favorite inanimate object?

TRS-80ii

Clearly I’m going with a computer! These days I would prefer one a little more modern, but you get the picture!

Tagged with: , , , ,
Posted in Random

Thermonuclear War: Or How To Make Recruiters Behave

If you’ve ever posted a technology-related resume on Monster, Dice, LinkedIn, or any number of job board sites, you know that tech recruiters/headhunters can be a huge time sink. We spend time building an online reputation and sometimes it seems that our only reward is to be bombarded by calls and emails from people who barely grasp computer basics let alone the complex work that we do.

Recruiters Want You!

My take on recruiters varies. Some are spambots (or just as annoying) and many don’t understand our industry very well having only memorized a few buzzwords so they can “sound” knowledgeable. These are the emails and calls we get regarding positions for project management, that esoteric language we had 6 months of experience with 8 years ago, or some other equally random position.

The trouble is, when you’re looking for work (or worse, out of work), recruiters can be something of a necessary evil. Also, in the current job market, I’ve had the occasion to point several unemployed friends to specific jobs that had been forwarded to me by recruiters.

There are also an elite few technical recruiters who have worked in the tech industry and ACTUALLY GET IT. These recruiters can be valuable allies and will only work with quality positions/professionals/companies. Having a few in your email and LinkedIn contact lists is highly recommended. They can advise you on preparing for your interviews and help negotiate acceptable salaries. Most importantly, they point you to positions that are exactly what you are looking for in every respect.

My advice is to start building a list of recruiters you feel comfortable working with now and filtering out those who spam you or merely fail to stand out from the crowd. I know that networking is distasteful to many technical people, but it is worth the time it takes in terms of finding interesting, meaningful, and lucrative work with people and companies that you like.

Here are a few tips to get you started:

Thermonuclear War

  1. Unsubscribe from automated emails. This will save many hours of headaches reading job descriptions that are barely related to your skills. If this does not have the desired effect, filter them to spam.
  2. Be direct with recruiters. Tell them exactly the kind of positions you are interested in. Include background, preferred companies, technologies, and locations. See Example 1.
  3. Don’t be a complete jerk. Like everyone else in the world, technical recruiters are trying to earn their paychecks… Also, if you make a name for yourself as being difficult to work with, the best recruiters will avoid you.
  4. Proactively manage your recruiting contacts. Let recruiters know your policy of not working with them if they aren’t useful and nuke the ones that have been ineffective. See Example 2.
  5. Follow through. This probably goes without saying, but stick to your guns! There are plenty of recruiters out there, choose to work only with the best!

EXAMPLE 1: An approach I took when looking for work (but not too urgently).

Subject: Opportunity Search and New Resume/CV

As may you know, my current employer has recently performed layoffs. I still work for the company but I’m seriously entertaining other options at this time.

Management has always interested me and my experience has grown in this area so I will be focusing my search on leadership roles (Software Development Manager and equivalent). I am willing to relocate to make this career jump and am searching far and wide but I am particularly interested in opportunities in the states of Utah, Texas, Oregon, and Washington. I am mainly interested in permanent positions but contract-to-hire could be acceptable as well.

I’m attaching two recently updated copies of my resume for your review. Please note that one is management focused and the other is software engineering focused. All of the differences between the two resumes are on the first page. As always, I welcome any and all feedback: positive or negative.

Sincerely,

William Munn

EXAMPLE 2: Clearing out ineffective recruiters now that I am settled in my new position.

Subject: Recruiters/Talent Sourcers

Friends,

You may not have noticed, but I’ve recently trimmed my LinkedIn contacts to remove people I have little connection with and that includes about half of the recruiters who were connections. I’m trying to keep the list more clean and will continue to blow the cobwebs out of the corners occasionally.

The point of this email: If you and I have ever worked together and it resulted in my being offered an opportunity with a company, GOOD NEWS! I probably won’t be removing you… ever (but don’t let that stop you from writing a recommendation for me)  Those of you who haven’t, you should consider this notice that you might want to find a good reason to stand out in my mind from time to time or I will likely drop you as a connection in the next 6 to 12 months. This will be even more difficult because I’m happy with my job and not currently looking for a change of any kind. Most of you have already done this to an extent or I would have cleaned you out with the recruiters who made no impression on me at all. You are the cream of the crop. The best of the best. Insert more Top Gun references here!

I know this is very blunt and probably a bit brash as well but I feel it needs to be done. Remember, I’m still more than happy to stay in contact with professionals who I feel can bring something to the table that might be interesting to myself or my large pool of talented former/current work colleagues. I know I’ve alternated the tone of this message between serious and lighthearted but I assure you I am very committed to working with people who have something serious to offer. Just keep in mind that this is an ongoing initiative for me and my memory is short!

All the best!

Sincerely,

William Munn

Please email or tweet me your comments and suggestions on how you manage recruiters and I will update this post with the best of them. My contact details are available on my profile website http://www.dubmun.com

P.S. Special thanks to my proofreaders: Dwayne, Kelly, and Jeff!

 

Tagged with: , , ,
Posted in Career

Technology Internships: Paid or Unpaid?

I recently tweeted the following:

Devs/Designers: did you have a paid internship when you were in college? If so how much did you make? #howtechnologyinternshipspay

My goal was to get some perspective for a friend who was considering various options for his upcoming college career. He was hearing conflicting information on getting a paid internship while going through a Computer Science program and had only my own experiences to go by.

Once I started reviewing the results, I found very them interesting so I thought I would share with anyone who cares to know. Namely you: my friends and tweeple.

Now the facts. First, most of the responders interned at some point during the past 15 to 20 years. The range of pay during that time was between $8-$22 per hour with the majority falling between $12-$15 per hour. Of the those that responded who are currently interns or were interns between 2010-2011, the common range seems to be $15-$20 per hour.

It is also worthwhile to note that many respondents also received other perks that I did not attempt to monetize. Examples of perks range from free food to tuition assistance to free rent.

The reality of the situation seems to be that future technology interns should not be asking if you should take a paid or unpaid internship. The real question is: “How MUCH should you be paid?” I’m certainly not suggesting that you should avoid creating a class website for your professor or a quick shopping cart or inventory app for your mom’s side business for free. These experiences are good and valuable… I did many projects like this and learned a lot!

If you are looking for an internship doing software or web development in the current market what should you be looking for in terms of compensation? I would probably suggest you hold out for a minimum of $15 an hour. Also, consider asking prospective employers for additional benefits once it is clear that they want you on staff. These figures may vary from market to market. I highly recommend checking with your college or university’s career guidance counselors for the going local rates. Some schools even publish expected rates (eg. Waterloo in Ontario, Canada http://www.cecs.uwaterloo.ca/employers/salary.php ).

Whatever you decide to do, get out there and create some experience for yourselves! You will be more prepared for work in the field and have a much easier time finding it. Don’t be afraid to ask for compensation for your efforts. You are in a high demand field where your talents are needed. There is no time like the present to start paying off those student loans!

P.S. Much thanks to @shanselman and @mayhemstudios for the retweets! The exposure of my question was much broader thanks to you. Also thanks to @nshirazie for the link to Waterloo’s salary guide.

Tagged with: , , , ,
Posted in Career