Archive for May, 2010

Introducing Developer Driven Development (DDD)

Friday, May 28th, 2010

Development Driven Development (DDD) is a revolutionary new approach to development that focuses on … you guessed it, development! DDD takes a radical approach in an industry filled with tests, metrics, and processes by allowing smart developers to write code. Some managers and even developers have a hard time wrapping their heads around it conceptually because it does require a shift from existing thinking.

How does it work?

  1. First, the developer thinks about the problem they need to solve
  2. Then, they solve it (usually by writing code, not always)
  3. Repeat until done

DDD vs TDD vs BDD vs FDD vs ADD vs …

There are people out there writing code who really shouldn’t be.  They produce bad code and crappy software.

The obvious (and correct) solution to this problem is to only use bright, thoughtful programmers.

Instead, the software community reacted by putting in place safeguards and frameworks and processes.

Since the more thoughtful programmers tended to be the early adopters, the code that was produced was better, and the frameworks appeared to be a success.  Now all we have to do is get more people to use the framework, and the code will just get that much better.  This is similar to selling diet drinks to gym trainers and noting that they do, in fact, lose weight and look great.

In reality, crappy programmers will always find a way to produce crappy code, even if they are using XDD.

But I am a good programmer and I want to use XDD!

Good programmers will write good code regardless of whether or not they use TDD or not.  Certainly, these tools can be helpful and there’s nothing inherently wrong in using them.  It becomes ridiculous when people start to think that this tool that may be useful to some is going to save us all from bad code and crappy software.  Or that a smart, productive developer who does not use XDD must be a bad developer.

Frameworks and processes don’t build good software, people do!

What is a MS in Computer Science worth?

Monday, May 24th, 2010

It’s graduation time again and that reminds me of a particular experience as a hiring manager for a company that was small and highly technical.  The structure was pretty flat: there were only a few managers in a company of 30-ish developers and they wrote code everyday too.  It was an extremely productive environment.

We were looking for people who were bright and could either write great code, or learn quickly. The pay was good.  We had people with bachelors and advanced degrees, with no experience to 20 years experience+.  Basically, if you could make it past the gauntlet, you were in.  And, like most coding shops, we were constantly hiring.

I found out that the local university was holding a job fair for their computer science department, so the Operations/HR person and I packed up some banners and things from their trade show materials and went over.

We stood at our table along with other companies as the soon-to-be-graduates made their rounds.  The people graduating with their bachelors were as-expected, overall bright and motivated, and we pinpointed a couple to do callbacks.

For some odd reason, there were more people who were graduating with a masters degree than a bachelors there. Not sure if there were more masters graduates than undergraduates (really weird!) or whether the MS people were just having a harder time finding a job (my guess).

I watched one exchange between an MS graduate and our HR person:

MS Grad:“So, do you have any jobs for Masters Degrees?”

HR: “Absolutely!  We hire people with masters degrees or with bachelors degrees – we don’t really care so long as you can write good code.”

MS Grad: “Oh… “ [wanders off]

That disinterested and entitled attitude mirrored my own conversations with the MS grads.

Being the technical of the two, I would talk about how we had a great flat structure, how we were given the freedom to write great software and how gratifying it was to work with other smart people.  They, in turn, would ask about management positions and architect positions.

They expected that since they had a masters degree, they would automatically be put in charge of the lowly bachelors degree people. And from my brief technical discussions with them, they were not nearly up to even working with us, much less managing.  The lowest, most junior developer at our company could out-code and out-design them any day of the week.

Now, if we would have hired a MS grad, they most definitely would have received a higher offer than their bachelors degreed counterpart.  And they would have been thrown onto a moderately complex (read: interesting) task without as much, or any, mentoring as a completely inexperienced junior person.  And honestly, having the advanced degree probably would have allowed them to move up more quickly into management than someone else.  The workplace was progressive in some regards, but old habits die hard.

But based on their general lack of impressiveness, not a single MS grad of the many many that came to our tables got a callback.

When I discussed my experience back at the company, someone mentioned that maybe it was because it was a local university, instead of a top school.  But I don’t think so: the undergraduate students were a reasonable pool of candidates, and we found a few possibilities, and they were better than the MS grads.

I’m sure that there are plenty of very smart and very innovative MS grads out there, but I think it makes sense that they would be snapped up before having to make the rounds at a career fair.

The reality is:

There is no shortcut to being a manager, and definitely not a good manager.

There is definitely no shortcut to being an architect or technical lead.

And there is no shortcut to being a decent programmer.

What is a MS in Computer Science worth? The knowledge you take from it of course, and not a penny more.

Gurus, Rockstars and Ninjas, Oh my!

Tuesday, May 18th, 2010

Iron Man 2

For every job post calling for a “superstar” programmer, there’s a ranting blog post about how ridiculous it is.

Programmers are not like gurus because no one can possibly know that everything.

Programmers are not like rockstars because they don’t get gratuitous sex and drugs.

Programmers are not like ninjas because they don’t have throwing stars.

Supposedly, if you call a programmer any of these things, they will get lazy and arrogant.  I’m pretty sure plenty of programmers were lazy and arrogant well before HR folk came up with those titles.

They became necessary because the system for hiring developers is fundamentally broken.

Those terms are the only existing way to succinctly express that you want a highly skilled, very productive person who is more focused on getting things done than process and more focused on doing quality work than playing politics.

The current hiring system for programmers emphasizes all the wrong things while ignoring all the important things.

  • We emphasize age through years of experience, neither of which have a strong correlation with skill and productivity, and not even much to do with maturity.
  • We emphasize the ability to condense your achievements and work ethic in business-speak riddled resumes, which has nothing to do with technical ability and douse any personality whatsoever.
  • We emphasize the ability to communicate using generic cover letters that spout more business-speak and feel-good messages sprinkled with obligatory specifics grabbed off the company website.  Is this the sort of templated slop you want in your software as well?
  • We emphasize the ability to describe a design over actually implementing one.  We emphasize being able to fit a problem into a neat little pattern over writing an algorithm.
  • We emphasize getting along with QA, management, executives, marketing, etc over being able to get the job done.  As in, don’t rock the boat.

The people who are successful in this environment are rarely the great developers.

So what do you do if you need a good developer?  Maybe you don’t even understand WHY the system is broken.  But you know that the people who are passing through the traditional hiring barriers are just NOT cutting it.

So you slap a “Rails Rockstar” or “Silverlight Guru” title on your job posting.  Most likely the mediocre programmers will be scared off (“that sounds hard!”) and some great programmers will perk up (“that sounds interesting!”).

For those disgruntled among you: yes, it is an HR marketing gimmick.  Because they don’t have any other way to get the good ones.

——————————————————————-

If you think there must be a better way, you’re right. Code Anthem is a way for employers to easily find great developers.  If that sounds interesting, subscribe by RSS or by email, or follow us to stay tuned.

Distributed Companies are the new Googleplex

Friday, May 14th, 2010

Google is known for its fantastic amenities including from free gourmet meals, massages, elaborate workout facilities and recreational centers.  Paying for these amenities provides Google with plenty of benefits, including increased productivity (from happier employers who stay at work longer), improved retention of their employees and a great recruiting tactic.

While they are at the far end of the spectrum, many companies have spent time and money on employee friendly workplaces.  Available amenities range from free sodas and ping pong tables to on-site gyms and hosted conferences.  And for their efforts they get also get the benefits, in proportion, for productivity, retention and recruiting.

Even with that whole coolness factor, Google and other companies are still scrambling to find top talent.  There is enough talent in the world, but there just aren’t that many people who are already located nearby or who are willing to relocate there.

Progressive companies are moving towards distributed development teams.

Distributes teams are teams where the developers work together … from home.  There may or may not be an office, but most of the developers’ collective working time is spent not there.

Probably the most well-known example of this is is 37signals.  It is based in Chicago with office space and half the team there and half the team distributed, and anyone can work from home.  They not only practice this but encourage it on their blog and recent bestseller Rework (affiliate link).  Another recent headline maker in has been Stack Overflow with a half-distributed team as well.

A few other high profile examples include DailyBurn, Gravit, Automattic and DotSpots and there are plenty of lesser known examples as well.

Elephants can dance, too

It’s not just restricted to small, very agile companies.  I’ve even seen larger companies embrace distributed teams on a team-by-team basis.  As outsourcing and global collaboration becomes more mainstream, distributed teams are much less scary.

It’s just smart business for companies to move towards distributed teams. You can reach the best talent, including people who would never ever move to where you are geographically located.

Plus, they take the place of those fancy Googleplex amenities:

  • Instead of enticing people to stay at work longer, you can move work to them.  Passionate workers will naturally work more when it’s so convenient and built-in.
  • Instead of having your employees go through hour-long commutes, get more working time, go green and reduce stress (also reduces need for those free massages).
  • Instead of manicured lawns, give employees some breathing room by allowing employees to work in natural setting with easy access to comfortable outdoor settings.
  • Instead of installing ping-pong tables and video games, avoid burnout by letting employees enjoy fun in their own homes
  • Instead of hosting a childcare center so that employees can be near their children, let employees select great childcare options near their homes, see their children at home anytime if their spouse or nanny watches them there, and greet their children when they get home from school.
  • Instead of filling up employees with unhealthy sodas or expensive gyms, save money while improving the health of your employees with access to their kitchens for easy homemade foods instead of fast food.

And for those companies that just want to spoil their employees rotten, you can still provide great services like paying their gym memberships or team vacations.

… why can’t everyone lavish these sort of perks, and this sort of environment, on their employees? Well, because we’re at a weird time in the history of the growth of the Internet. At this (perhaps anomalous) point, the business leverage resulting from the focused application of human intelligence is so high that all these benefits and all this freedom, considered through a pure cold profit-and-loss lens, are cheap at the price.

Tim Bray in Life at Google

Look for more smart companies hiring for their distributed team at a location not-so-near you.

10 Signs Your Software Project is Going Down

Thursday, May 13th, 2010

How do you know if you’re software project is going to crash and burn?  Use these handy tips.  Consider it a reverse Joel Test.

  1. It started out with Waterfall and then once they completely derailed and went into a free-fall, started calling it “Agile-ish”.  This is also known as fake agile, or “fragile”.
  2. Fixing a bug always exposes another bug. If the software is so buggy that you cannot even GET to certain parts of it due to the bugs, then fixing one just exposes another one, and another one, and another one. This is not the same as causing a bug with your bug fixes, although that’s not good either.
  3. One or more of the central technologies became unsupported by the manufacturer before the project even started. Even better if the technology line has been discontinued entirely.
  4. You’re using PowerBuilder or any other “rapid development tool” that abstracts away actual code in favor or checkboxes and drop-downs. Libraries, toolkits and APIs are all fine. These tools are like playing Twister with code.
  5. The technical lead cannot correctly use his email client or browser. If someone cannot even use basic, standard software, how can he properly lead a team of programmers?
  6. The Project Manager is writing code and a developer is managing the schedule. Seen more often than I’d care to admit.
  7. There are more business or domain people on a team than actual technical folk. 1 programmer with high turnover + large code base + critical system + huge bug list = no problem?
  8. There is a test suite from a previous programmer but half of the tests are failing or don’t compile. For extra fun, check if reported bugs would have been prevented if the test suite had been used.
  9. The process for adding a single line of code requires multiple lines of commentary. A comment at the line stating the reason and your name.  A comment at the top of the file putting your name and update date.  A per-file commit with descriptive message.  Update to the bug-tracking/PM software.  Etc, etc.
  10. The phrase “it’s not a bug, it’s a feature” applies to most of the “features” in the product. “The system wasn’t designed for that.”

Have any other signs from the trenches?

Bad Code is Viral

Monday, May 10th, 2010

One day a developer started at a company and on his first day, while setting up his development environment, pulled out a memory stick.  It contained all the old code he had written at previous companies, so he could write code more quickly, he proudly proclaimed.

Aside from the fact that it’s illegal and unethical, it’s also stupid.

Code that is not being actively maintained and refactored degenerates quickly.  So instead of his output improving and learning new and better ways of doing things, it actually is getting worse over time.

Short-cut thinking sabotages software projects.

More and more developers are content to write bad code and build crappy software products.  We’d like to blame it on the managers and the companies that push us to produce more on shorter schedules.

“I’d love to do automated testing or TDD, but they just don’t give us time to do that.”

Automated testing and TDD are part of coding, not a separate activity.  When you deliver a software product, or even just a snippet of code, you’re putting your signature on it that it works.  Automated testing and TDD are not optional to the company, they are optional for you.

If you are truly confident that you are shipping quality code without them, then maybe they’re not needed.  But don’t push the decision off to the (usually non-technical) manager.  He may not explicitly give you time to do “automated testing” but he sure as hell expects the thing to work properly.

“I know this is a hack, but they said we just need to get it working right now, and we can come back to it later.”

If this is the mentality at your company, how many times do you actually get downtime to go refactor and improve your code?  Rushing and hacking and crunch-time just begets more rushing and hacking and crunch-time.  The more you rush, and skip good design and quality practices, the worse your code will be.  You’ll introduce more bugs and more unnecessary complexity.  That will delay your schedule even more, resulting in … more crunch-time.

It’s a vicious cycle that we as developers are not only complicit in, but actually cause by producing poor quality code.

“This code isn’t very important so it doesn’t need to have a good design”

What would happen if this code doesn’t work correctly?  If the answer is “not much”, they you should probably go work on something else.  If the answer is “a whole lot” (it probably is) then do it right.

Writing bad code is viral.

  • If you write bad code on certain parts of the codebase, it will become a habit and it’ll start to bleed over into all of your coding.
  • It’s the broken window syndrome: if some parts of the code are written poorly, there is less impetus to write better code in the other parts.
  • Your code base is the primary training manual for new developers on your team.  If they’re learning from crappy code, that’s how they will write code too.
  • Letting bad programmers onto your team can actually have a negative productivity impact.  More diligent team members will spend time fixing their crappy code, and other programmers will fall into the crappy code slump alongside them.

If the code is important enough to be written, then it’s important enough to be written correctly.

How has the bad code virus spread in your software team?  Have you been infected?  Got any natural remedies to suggest?

Just 3 Questions to An Awesome Programmer Job

Wednesday, May 5th, 2010

Conventional business wisdom states that every business wants to improve.  They want lower operations costs, higher profits, happy customers and to retain their best employees.  Virtually every business will attest that’s what they want too, albeit in varying orders of priority.  But they don’t.

Fun will now commence – Seven of Nine, Star Trek Voyager

They say they want to make more money, but are content to live with failed software projects, poor programmer productivity and operate on software that isn’t fit to be used.

They say they want happy customers and happy employees, but they plow through both of them with high turnover rates like they’re completely expendable, replaceable and without value.

Great programmers are not made for companies like that.

As a great programmer, how do you spot a great company from the rest of them?  Here are 3 questions to ask the hiring manager or recruiter.

1. What sort of technical exam do you use to screen programmers?

This could be a coding sample, a coding test, a strenuous technical interview or even an aptitude test.  A few rounds of “What is your experience with X technology?” does NOT cut it.  If they’re considering hiring you without  properly testing you, just imagine the low level of talent that has crept through their process over time.

2. What do you do to make your programmers lives easier?

Some crappy managers will actually pause in confusion at this question.  After all, managers are only there to tell the programmers what to do, and then reap the rewards.  Other crappy managers may come up with some lame answers, like from an HR cover sheet. Good answers might be to allow them to work from home occasionally, to give them the freedom to use new technologies, etc.

3. What percentage of the developer’s time is spent in meetings versus uninterrupted coding time?

The ideal answer would probably be something like “a few minutes every day, a planning meeting every two weeks at the start of the iteration.”  A more realistic but possibly acceptable answer would be, “a couple of hour-long meetings with different businesspeople, as needed.”  It’s up to you how much is too much.  Beware an answer like “we try to limit meetings and restrict them to as needed” without specific time durations.

Let’s take it to the masses.  What do you look for in a great company to work for?

What do you look for in a great programming job?

How I Got 50K Visitors in my First Month

Monday, May 3rd, 2010

I have a guest post up at Remarkablogger today about the great response to the Code Anthem blog in our first month from you fine folks.  It’s a good read for anyone interested in blogging, start-ups or general movement-starting activities.  Or if you just want a meta-post about what’s going on behind-the-scenes here at Code Anthem (on the blog/marketing side, at least).

“I am in the process of launching my startup, Code Anthem, for great programmers and the companies that hire them. I was thinking over some of the logistics of running a private beta program and realized that I needed a group of people who could be my beta testers, early adopters and even evangelists when we launched.

I decided to start a blog and open a twitter account. That was 1 month ago, and since then I’ve had over 50K visitors to the blog, over 500 subscribers via RSS and email, 221 comments and over 150 Twitter followers. I didn’t have an existing audience of any kind to pull from, so this was all starting from zero.”

Read more >