The Wrong Problems

Developers spend most of the day working on one, or maybe two, codebases. They run into the same day-to-day problems that all other developers do. They come up with solutions that most other developers will also come up with. They implement these solutions, and try to publicize them. If they are lucky, their solution will be the one that the community rallies around.

This is why every language has a ton of web frameworks. Every language has lots of options for devops tools. There are dozens of websites with video tutorials on Python, Ruby, Java, AngularJS, Node, Go, and everything else. More and more will emerge. Even though we all try to avoid reinventing the wheel, we only see so many problems a day. Those are the problems we try to solve.

But what if they’re the wrong problems. What if people in the offices right next door would pay lots of money to automate some Windows tasks. What if independent shops in the warehouse district would pay for a small scale inventory tracker. What if we could make real differences in the live’s of people surrounding us. What if we didn’t have to scale, or count eyeballs, or have traction, or raise money, or show growth in order to have a business with a positive affect on the community.

What if Process Management Consulting is the most interesting field, because you see the widest range of problems to solve?

Note: This post originally appeared on Ryan’s blog here  You can check out Ryan Day‘s blog Here.

  
Add Comment Register



Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

How To Hire Top Programmers For Your Startup

This post originally appeared on the staffmagnet, LLC blog (HERE).  If you ask many recruiters and executives, the question of how to recruit top programmers is like a war for talent.  I am here to tell you that this is not the case at all even though sometimes it feels like it is.

4 Keys To Recruiting Top Programmers
1. Set reasonable objectives based on your circumstances, not the objectives of Google or Microsoft size companies.
2. Determine the current market salary range.
3. Assess whether or not your company is a desirable place for developers or if developers would be immediately turned off or tempted to bounce after they take a job on your team.
4. Recognize that developers people in your local community and not a commodity that you can juts pick up off the job board shelf.
5. Recognize what makes a top programmer.


Setting Reasonable Objectives

This is the most critical part of your developer recruiting game plan so plan on investing some time into researching before you formulate your plan.

I often get asked by executives who have just raised tens of millions of dollars from venture capitalists if I can help them take people out of Google and other large companies.  My answer is always that it is possible to do so.  Right after that I ask them why and there is usually one of two responses: silence, or something along the lines of …they hire the best people so if Google hired them they must be good.

Over lunch at the Googleplex several years ago a friend who works at Google told me that Google is a great place to work.  The only trouble is that it is also a place where good developers get put out to pasture to graze.  I asked him to explain what he meant.  He told me that while there are a lot of really smart people working at Google, many of them work on teams where they just mail it in.

My friend was an early hire at a company that IPO’d long before he left.  He told me that he felt a little guilty leaving the founder he worked for, but he felt like he made the right decision.  He is one of the really smart and talented programmers working at Google.  I have met plenty of people who work for Google who are the exact opposite.  They were hired because they could pass a Google style interview, but they could not hold their weight in other companies.  Google also hire tons of people who are sub par to work as contractors (think long term temps).

A better idea would be to invest in building a distinct company culture for your company and investing in your people.  I should also point out that to pursue out of state programmers at a company like Google is no short term proposition.  If someone can be had on a moment’s notice they are probably not going to be very good.  Additionally, you are going to have to face the fact that they might leave you and go back to Google.

Beyond where you look to hire from, you should consider how quickly you want to hire.  You could probably hire someone really fast who is not that good or you could plan a recruiting campaign over 2-3 months to identify, entice and hire people who are really good.  There are plenty of other factors that can affect your timeline including how in demand the skill set you are looking for is.

For example:
A search for someone who is using Golang or Go on a full time basis might not be a quick search.  It could be, but it might be a lot quicker if you tried searching instead for someone who is programming in Python that would be interested in picking up go or who has played around with Go in their spare time.


Determine The Current Market Salary Range

Often the biggest mistake the managers that I have worked with make is talking to a few developers and taking their preferences as the real time market conditions.  Most of the time this is a costly mistake, but it can even be a fatal one if your business depends on developers.

The Indeed Salary Tool (www.indeed.com/salary) is a great way to look for real time market conditions.  To get most accurate data you have to experiment a bit.

For example:  

A search for four related job titles shows today’s salary range for programmers in Washington, DC. (Source)
salarycomparison

Adding “Ruby on Rails” to the job titles helps refine the range a bit.  Notice the blue bar under the average salary changes. This is an indication of how many jobs there are for this particular skill set.  (Source)
salaryrangerubyonrails

Unfortunately, the Indeed Salary Tool can get it wrong too as evidenced by swapping out “Ruby on Rails” for “Python” or “Java” which takes the overall base from $94,000 to a level that is not accurate: the Python base range rises $132,000  (Source) and the Java base range rises to $109,000 (Source).

Subtract $15,000 to $20,000 from the low numbers and add $15,000 to $20,000 to the high numbers you you get from the Indeed Salary Tool and you should have the high and low salary watermarks in the current market.  I have been tracking salary information for nearly a decade now and while I can’t say that the Indeed Salary Tool is holds up for every category of job, it is can be fairly accurate for programmers.

It is important to recognize that hiring developers is not like buying something from a retail store.  Programmers have human factors to consider.  If you talk to someone who is the sole bread winner in a family of four they are going to have different considerations than someone similarly situated who lives in a different zip code.  You should not make hiring decisions based on factors like this, but you should understand that things are different for different people.

One really good example of how human factors enter into salary discussion is paid time off.  So many companies that I Know offer a stripped down paid time off plan and never consider the value of an employee being able to take time off to recharge after a really stressful or intense period.  This is especially true for programmers who are more prone to burnout than many other categories of worker.  By offering your employees an extra 5 or 10 days per year of paid time off per calendar year you might actually be able to entice workers to take a $5 or 10k less in pay.  This may seem like a huge loss in productivity, but to someone who is a coder it can actually lead to a boost in productivity. It can also boost your bottom line.

For example:
A programmer salaried at $105,000 per year is earning around $53/hr.  5 days of pay is around $2,120      before benefits.  10 days of pay is around $4,240.  If you provide an extra 5-10 days of paid time off in        exchange for $5-10k, you save $2,880-$5,760 and your employee will be more productive and have a        higher quality of life.  A smart employer could use that extra cash and turn it into additional employee benefits, training, conference budget, employee perks like free lunches and snacks or bonuses.


Company Desirability Considerations

There are a lot of things you can do or that you could do as an executive or manager, but you know that there is something better that you should do or that you might not think to do.  Think of this as a recruiting cookie jar discussion or better yet as your own personal marshmallow challenge.

1. If you are a startup or a small company, don’t hire people looking for logos.  A “logo” is a company that is so far ahead of you in the employer branding space that you will never catch up no matter what you do.  If someone has it in their mind that they need to work at Google or Microsoft right away to satisfy their ambitions then let them.  This is true for recruiting entry level talent and mid to senior career professionals.  Instead, focus on finding people who have are looking for a job where you are and who is local to you.  If they come to you then by all means, talk to them.  Just don’t waste your effort.

2. You could budget some extra money for more expensive hires or for other things that are not necessary.  Instead, set aside some funds to help make your workplace more attractive for potential job seekers and employees.

Some examples: Buy a couch and coffee table for a break area., upgrade the desks in your office, upgrade the chairs in your office, provide a weekly company meal where employees talk to each other, buy t-shirts for your employees that have a nice design, add a fresh coat of paint that is a warmer color to make the office brighter, buy some nicer monitors, or take the team out for a company event so they have fun together.  Take a camera along to take a few photos if you take the team out or when you provide the weekly meal.

3. Host a Meetup event in your office and get your employees involved in the event.  If you are a startup it could be a marketing Meetup or a developer meetup.  If you have a slightly nicer office or a nice conference room this is something that can go a long way to getting the word out about your office.  Do not expect to hire someone from the event, but expect to get some kudos and good karma from the community for doing it.  Hint: you do not have to be the organizer of an event to host one.  You can also buy pizza or a round of drinks at a Meetup that your team attends.

4. Stop listing your company’s jobs like they are a grocery list and humanize your career page.  People work at your company so show them off. If you don’t have group photos of people having fun or participating in something that looks like a happy team in the act of being one then read the examples from #2 (above).  Don’t stop there, your career page is a canvas not a file folder containing jobs.  Get some help designing your career page and make some positive changes to it.  If you want to hire someone you should imagine that they want to work with some people like you.  If your career page does not show who you and your team are then how will they know? Exactly.  Leave the guess work to someone else.

Think of it another way, you could waste your time chasing people who look at you as their level two backup option or target people who are more likely to prefer joining your team and create a more compelling experience for them.


Local Community

If you know there are good hires out there go out and meet them or hire someone to help you do this.  One of the cornerstones of community centric recruiting is word of mouth marketing.  You have to get out there and let people know who you are.  People talk to their friends so one way or another you are going to reach the right people.  Be patient, this stuff takes time.

For example:
A few weeks ago I attended the DC Golang Meetup held a nearby co-working space.  I had a really good conversation with someone who is very happy in his current job. He really liked what I shared with him about the client of mine that has a job opening.  The next time he has a bad day at work or the next time he is looking, he might apply for a job with my client.  In the mean time, he referred a friend and co-worker who IS looking right now to me within a week of our conversation.

Community engagement is really powerful.


Recognize What Makes A Top Programmer

I could write an entirely separate article on this subject.  Heck, I could write a book or several.  The basic idea here is that you should not be looking to clone your existing developer or the resume of someone who just left.  Every person is different.  You need to make sure that you set your sights on people who a) have the capabilities required to do the job (and not a bit more), and b) will be great contributing members of your team.

Don’t get too academic about it either. I can’t tell you how many times an over zealous white board interviewer armed with text book puzzles or questions unrelated to job has crushed a potential good hire by being over the top or by not talking to the person being interviewed like a human.

Whatever you do, treat people better than you expect to be treated based on your own experiences.

  

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

What Is The Best Git GUI?

What Is The Best Git GUI?
A few years ago I gave up my Windows laptop and bought a Mac Book Air. Ever since then I have been spending an increasing amount of time writing code.  The Mac makes it a lot easier to be a programmer without living an awkward dual existence between GUI and terminal windows.  Sticking to using the terminal when I am doing development has made things a lot easier, but I still prefer Sublime Text over vi or similar options.  A few people that I have paired with like using Git GUI’s, but it seems like these either slow things down or cause problems.  Yesterday I had an issue with Git that I could not figure out immediately so I decided to take a closer look at the options.  Here is my attempt to answer the question of What is the best Git GUI? for myself.

Before yesterday I had spent some time using GitX-dev (the rowanj fork) (a few hours) and SmartGit (very little).

One suggestion based on my experiences installing and trying out these tools is that you probably want to start with clean project directory and clone your repository to that new location instead of trying to import an existing one. I tried importing an existing one for each of these tools, but ultimately had to start from scratch to get things to work. This may have been a local issue with my environment, but it took up a bunch of time and I would rather not waste yours.

GIT GUI Tools Evaluated

GitX-dev (the rowanj fork) was straight forward enough that I could use it to a few things, but there were some problems that it introduced that I ultimately had to go back to the command line to resolve.  I don’t love it, but I don’t hate it.  So I guess it is a backup option.

SmartGit comes across as a tool that is a lot more powerful.  I immediately felt like I needed to take an class just to use it the first time that I tried to use it, but after taking a deeper dive into the tool I found it to intuitive and preferable to the others.   I really do like the SmartGit UI and found that getting started with it was intuitive.

SmartGit does the best job of all of these tools when it comes to comparing things. I also like the clean, uncrowded set of buttons across the top.  Some mouseover tips or a tutorial link would be nice, but of what I encountered was clear without too much research, etc.

SourceTree by Atlassian looks very impressive and has a smooth UI so I am going to try it out as well.  I also really like the fact that I was able to download and install SourceTree through the Apple App Store.  That is until I opened the app and received a message telling me that it was not so I was going to have to download and reinstall it.
sourcetree_nolonger

 
Once this was done, I was able to drag my project folder into SourceTree and get started right away.

Tower looks interesting, but I would prefer something less expensive or open source if possible so I am going to pass on it for now.

 

GitHub Mac looked interested and emphasized simplicity so I gave it a try.  My initial concern was that it might not work with Bitbucket which I am using for the web architecture course that I am taking right now.  I don’t know that many people who use Bitbucket and outside of this class I don’t either so this is a minor concern.  I like the simplicity and overall navigability of the GitHub Mac GUI in general, but I think this is a tool that is not ready to use yet.

I got off to a slightly bad start because it is not really clear what you should do if you have already cloned a repo to your local environment.  So my initial impression is that this is really intended as a client for Github.com which is not bad per say, but I host my own repo so this isn’t at the top of my list of priorities.
githubmac_new

 

It turns out that the GitHub Mac app actually allows you to drag your project folder and get started that way, but they did not bother to point this out for some reason.

Overall, the GitHub Mac app feels like an MVP, not like a production grade app.  I found that it was a too unintuitive and that the documentation for it was lacking.

 

Tower 2 is another option that I checked out, but I stopped short of downloading it after reading a bunch of reviews that suggested that it was not the best tool out of the gate. I may find some additional time and re-visit things with Tower.

The Winner?
I really liked SmartGit and will continue using it for the remainder of the free trial period.  After that I will most likely pay for a license and keep using it. If budget was a consideration, I might choose to use GitX-dev which is sufficient.  SourceTree is a nice tool, but I do not like the user interface as much as SmartGit’s and found it to be a bit more difficult to use.

I would love to hear your thoughts and experiences.

Update: 
There is no place like the command line.  None of these tools were or are problem free.

  

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

The DC Growing Code for Social Good Crowd

DC’s Growing Code for Social Good Crowd
The DC Growing Code for Social Good Crowd is something to pay attention to.  I find myself running into more and more people who are a part it.  Yesterday I finally made it out to the the Learn Ruby in DC! Meetup’s Weekend Hack Session hosted by Maggie Epps, Chris Hoffman and several others who I have not met yet.  I was not quite sure what to expect, but it was worth the trip and I plan to go back.

This one was hosted down around Gallery Place in DC. Around 13 people showed up.  Chris is the resident Rails expert. He did a really good job of explaining various things to participants as questions about Ruby on Rails popped up.  Maggie and I had a long chat about how she made the transition into doing development after being a social worker.  She is working on PHP by day and Ruby on Rails by night.

One of the things that Maggie and I talked about was apps. She built an app to help social workers that she wants to let people use for free.  She is also participating in the Code for DC Meetup which builds apps for organizations that would otherwise probably never get built.

Code for Social Good
It is really refreshing to talk to someone about working on something for a good purpose, bonus if it involves coding for a good purpose.  This reminds me of why I moved to DC in the first place.  Maggie is the second person I have talked to in the last couple of weeks who is participating in the Code for DC Meetup, an event that I am going to have to check out soon.

Related Groups and Events
Another group that is a part of the DC Code for Social Good Crowd is the DC Hack and Tell Meetup, a group co-organized by Aaron Schumacher who I met there and who I have run into at the DC Python Saturday School event organized by the DC Python Meetup.

This is a trend that has also gained momentum elsewhere with programs like Code for America and Tech for Social Change in Baltimore.

More Than Just Social Groups
One of the most differences that I am noticing more and more is that this is a community of people who are coding to actually make change happen, not just coding for the dollar.  Sure, this is a community of people who make a living doing what they do. There are even a lot of startups popping up around this sector, but the mindset is very different from the traditional emphasis.  I wish that this community had existed when I was working on Capitol Hill and left to quit my job to co-found a startup in this category.

Not The Usual Crowd
One side effect of this community is that it tends to be more collegial than the traditional user group and meetup community.  I don’t mean to say that that regular user groups are not collegial…just that the DC Code for Social Good Crowd is MORE so.  This has quite a few benefits. It is a lot more welcoming to newcomers and women.  A radical difference that I have noticed is that the number of women involved in this community is often equal to or approaching par with men.  Developer meetups have been like a boy’s club for a long time here in DC so this change is a welcome one.

  

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

21 Things Hackathon Hackers Want

In case you were wondering, here is the official list of the top 21 things hackaton hackers would like to win or get.  In case you are wondering, we are talking about collegiate hackathon hackers want FTW!

hackathonhackers_bitcamp2014

 

 

 

 

 

 

 

 

 

 

What Hackathon Hackers Want

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

We have hanging out at a few of these massive collegiate hackathon events lately. They are impressively, and also centrally, organized.

 

This is from the official hackathon hackers discussion group.

  

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Keeping Freelance Programmers Happy

I have been getting a extreme amount of work accomplished over the past few months, and apparently real work and blog posts are inversely related. So I wanted to try to share at least a small something. I have been working with many freelancers, and have been acting as a freelancer, for a little while now. I’ve noticed that freelancers tend to leave projects unless a few specific things are happening. I want to continue to monitor this list, and conduct some real scientific method to see if my anecdotal evidence holds up.

Have Well Defined Iterations
Every single project I have been on has a constant stream of bugs/fixes/changes being passed on to the programmers. If this stream isn’t controlled then you never meet a goal, you never get a feeling of accomplishment, all you get is an endless supply of busy work. The worst case scenario is the developer leaves in the middle of structural changes and you can’t proceed. The progress just slows to a crawl. Best case scenario is the person simply leaves, and you have to go through the entire learning curve with a new developer.

Don’t Be Too Complex Too Early
I’m very a much a believer of doing things the easy way. When starting a project, management tends to have these huge grand visions of where they want to go. I’ve noticed that most good programmers break these things down into small parts that they can get working. This isn’t a TDD plug. Its just noticing that small things are easier to debug then large things. Fast programmers are either really good at breaking down large problems, or are bad at programming. Let the developers break down the problems! Goodness I have tried to walk through a complex system with people who never say anything that doesn’t start with “Don’t forget about “. It makes developers not want to work with you. Let them code.

Be Respectful
Freelancers tend to be good coders and they truly enjoy what they do. Otherwise I doubt they would ever engage in this crazy way of doing business. They are entrepreneurial. They have seen many different types of projects/management styles/team make-ups and may not know what will work, but they have seen how typical problems develop. Personally, and from some other stories, if a freelancer sees a doomed project, they have the talent and experience to walk away and find another job. I think this is important for managers to watch, and a great source of experience to take advantage of. I have seen freelancers(well full time devs too) be treated like line item costs. They leave because there is work elsewhere. Developers are smart and you should take advantage of that, not look at their ideas as another problem to manage.

This is coming off as very rant-ish. I don’t mean it to be, I’m just not a good writer. After some more observation maybe I’ll have a better idea of what works and what doesn’t.

Note: This post originally appeared on Ryan’s blog here  You can check out Ryan Day‘s blog Here.

  

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Introducing A New Contributor: Ryan Day

I pleased to introduce Ryan Day, the newest contributor to the SocialMatcbhox blog.  Ryan is a hacker-founder startup type who does development and some business.  He is currently working on a mobile app, is an independent developer who works with Go, JavaScript and PHP among other things.

Ryan and I met at the DC Golang Meetup event that he organizes last week.  We got talking about startups and nearly stuck around all night after the event.  He lives in Reston, VA.

Since he has a bunch of well written posts from before we met I am going to add them to the mix over the next few months in addition to any new stuff that could be interesting to SocialMatchbox readers.

You can check out Ryan via any of these locations:
@RyanDay2 | Website LinkedIn | Google+ | StackOverflow | Github
Reston, VA

  

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>