My Secret Life as a Spaghetti Coder
home | about | contact | privacy statement | getting started with cfrails
An interesting discussion going on over at programming reddit got me thinking about what features I'd like my ideal job to have. Aside from "an easy, overpaid job that will get bring me fame and fortune," here's what would make up my list:
  1. Interesting Work: You can only write so many CRUD applications before the tedium drives you insane, and you think to yourself, "there's got to be a better way." Even if you don't find a framework to assist you, you'll end up writing your own and copying ideas from the others. And even that only stays interesting until you've relieved yourself of the burden of repetition.

    Having interesting work is so important to me that I would contemplate a large reduction in income at the chance to have it (assuming my budget stays in tact or can be reworked to continue having a comfortable-enough lifestyle, and I can still put money away for retirement). Of course,the more interesting the work is, the more of an income reduction I could stand.

    Fortunately, interesting work often means harder work, so many times you needn't trade down in salary - or if you do, it may only be temporary.

    The opportunity to present at conferences and publish papers amplifies this attribute.

  2. Competent Coworkers: One thing I can't stand is incompetence. I don't expect everyone to be an expert, and I don't expect them to know about all the frameworks and languages and tricks of the trade.

    I do expect programmers to have basic problem solving skills, and the ability to learn how to fish.

  3. Sane Management: Don't make me delighted to have a broken watch. I shouldn't have to turn back the dial on it to meet deadlines. Or put more strongly, management/customers shouldn't be given the latitude to control all three sides of the iron triangle of software development.

    Scope, Schedule, and Resources. Choose two. We, the development team, get to control the third.

  4. Trust: One comment in the reddit discussion mentioned root access to my workstation and it made me think of trust. If you cannot trust me to administer my own computer, how can you trust me not to subvert the software I'm writing?

    Additionally, I need you to trust my opinion. When I recommend some course of action, I need to know that you have a good technical reason for refusing it, or a good business reason. I want an argument as to why I am wrong, or why my advice is ignored. If you've got me consistently using a hammer to drive marshmallows through a bag of corn chips, I'm not likely to stay content.

    I don't mind if you verify. In fact, I'd like that very much. It'll help keep me honest and vigilant.

  5. Personal Time: I like the idea of Google's 20% time. I have other projects I'd like to work on, and I'd like the chance to do that on the job. One thing I'd like to see though, is that the 20% time is enforced: every Friday you're supposed to work on a project other than your current project. It'd be nice to know I'm not looked down upon by management as selfish because I chose to work on my project instead of theirs.

    I wouldn't mind seeing something in writing about having a share of the profits it generates. I don't want to be working on this at home and have to worry about who owns the IP. And part of that should allow me to work on open source projects where the company won't retain any rights on the code I produce.

  6. Telecommuting: Some days I'll have errands to run, and I dislike doing them. I really dislike doing them on the weekends or in the evenings after work. I'd like to be able to work from home on these days, do my errands, and work late to make up for it. It saves the drive time on those days to help ensure I can get everything done.
There are some other nice-to-have's that didn't quite make the list above for me. For example, it would be nice to be able to travel on occasion. It would also be nice to have conferences, books, and extended learning in general paid for by the company. I'd like to see a personal budget for buying tools I need, along with quality tools to start with.

But if you can meet some agreeable combination of the six qualities above, I'll gladly provide these things myself. If you won't let me use my own equipment, and you provide me with crap, we may not have a deal.

That's my list. What's on yours?

Hey! Why don't you make your life easier and subscribe to the full post or short blurb RSS feed? I'm so confident you'll love my smelly pasta plate wisdom that I'm offering a no-strings-attached, lifetime money back guarantee!


Comments
Leave a comment

Why should I pay for the time you spend doing your own projects? You are free to have 20% of the time to yourself if you can take 20% pay cut.

Posted by Adedeji Olowe on Mar 31, 2008 at 05:13 PM UTC - 5 hrs

Did I understand you correct? You want to work on something that has no relation to your employer and still get paid by him?

I think it was Robert A. Heinlein that once said something like, to see if a deal is fair or not, switch sides. If both parties are still content, the deal is fair. So, if you were the employer, would you pay that much money without getting something in return?

I don't know the exact rates in the US, but, these 20% will easily sum up to more than 10,000 USD per developer per year. Would YOU really pay that for nothing?

I'm not talking about time for personal and technical development and not about work related projects that MAY include benefit for your employer. I'm talking about working on "my projects" and "open source projects". Sorry, but, things don't work like this in the real world.

Posted by Christoph Schmitz on Apr 01, 2008 at 03:15 AM UTC - 5 hrs

Wow. Something I've spent a lot of time thinking about, so here comes a bit of stream-of-consciousness:

1. Interesting work. Yeah, I know it looks like a blatant rip-off, but I want - and frankly expect - to enjoy my work more often than not. I've _often_ taken pay cuts (albeit relatively minor ones) to do interesting work. This one's non-negotiable.

2. Trust. Again, another rip-off, but another must. Trust me to administer my own machine. Trust that he company will get (usually far) more than the required 40 hours from me when I'm not chained to my desk. Trust my management to spot abuse. Trust me to spot abuse by those who report to me.

3. Flexibility. This dovetails nicely with trust, but allow me to come and go - within reason - as I please. Understand that when I'm working from home, I'm _really_ working from home; I'm not "working from home". Understand that when you see me reading feeds rather than writing code, it's not whimsical. I'm reading stuff that will, hopefully, make me better at what I do because I enjoy what I do and because I'm a professional.

4. Casual Atmosphere. I'm a developer. I spend most of my day at my desk engineering and coding solutions. I'm not in board meetings. Don't make me dress to impress. There's no one to impress. Don't tell me that dressing professionally makes me act more professionally. The fact that I'm a professional makes me act professionally. That I'm wearing jeans and a t-shirt doesn't confuse me into thinking I'm hanging with buddies at a bar. I recognize the office scenery. Seriously.

5. Productivity Focus. You tell me what you need done. As long as I'm getting it done satisfactorily, don't jerk me around about the fact that I left a little early last Thursday. Put down the abacus and the time sheets.

6. Competent Management. I can live with incompetent co-workers because I can avoid them for the most part. I can't live with incompetent management. My rules for managers follow: know what you don't know, be okay with what you don't know, understand that I don't expect you to know everything, recognize that 90% of your job is to know who to ask when a question arises about one of those things you don't know and then trust my input when I'm asked about the things that I know. Simple.

A lot of these things boil down to this: treat me like an adult and like a professional unless I do something to indicate that I'm not one or the other.

Posted by Rob Wilkerson on Apr 02, 2008 at 07:18 AM UTC - 5 hrs

@Adedeji and Christoph: I thought at first maybe I did go a bit overboard. But I think there are benefits to the company even if the work is unrelated (though I expect that unrelated work would be rare). Anyway, my response turned into a post: http://www.codeodor.com/index.cfm/2008/4/2/What-Ca...

Please let me know your thoughts.

@Rob: Thanks for the list! I don't think any of what you listed is "blatant ripoff." I would expect that many of us have similar desires in jobs.

You even add a couple of things that I left out, which would be important to me. In particular, the focus on productivity should be paramount. If I am getting my work done on time (and the time frame is reasonable), then don't focus on squeezing even more out of me or micromanaging my day.

And I love that quote: "treat me like an adult and like a professional unless I do something to indicate that I'm not one or the other." That does indeed describe a lot of how I'd like to be treated as an employee. You see the opposite in retail or food service jobs, and I think it's ridiculous then. When you bring those sorts of managers to the thought-worker world, I think I'd rather be working some place else.

Posted by Sammy Larbi on Apr 02, 2008 at 02:24 PM UTC - 5 hrs

Google does give 20% time to employees so they can work on projects they like. Thats how Google News and Orkut were started -
http://www.techbanyan.com

Posted by Tarun on Apr 02, 2008 at 07:00 PM UTC - 5 hrs

I wrote a similar post a few weeks ago and suggested the time to work on other projects, and got nearly the same reaction.

The thing is that a lot of these projects turn into something very profitable to the company. That's why Google does it. That's why 3M does it (yeah, Post-It pads were another such project).

I'm not suggesting that employers should pay people to play WoW eight hours a week, and I was genuinely surprised by the number of people who thought I was advocating that. What I *was* advocating was to allow people to think and venture a little ways outside their usual daily spec-implementing tasks to find innovative ways to improve the business, with some guidance.

If a factory worker said "we could assemble 25% more widgets per hour if we shut-down the line and re-designed it using my proposed improvement," you'd be silly to not give the idea *some* consideration. Programming is a creative pursuit, so a lot of us are creative by nature and are loaded with ideas on how to improve the business. Giving a legitimate outlet to explore those opportunities can make sense for everyone.

Posted by Mike Desjardins on Apr 02, 2008 at 07:39 PM UTC - 5 hrs

Mike- thanks for the comment. When I said enforced, I meant enforced not just that you are required not to work on your main project, but also that you would be doing something productive - researching WoW not being productive =).

Do you have a permalink to that post you are talking to? I *think* I saw it on your homepage, but clicking on permalink takes me to a "cannot find the server" page.

Posted by Sammy Larbi on Apr 02, 2008 at 08:46 PM UTC - 5 hrs

Good development tools, which means:

Multiple large monitors.

Rock-solid UNIX on a system which just works. In other words, OS X on a MacBook Pro.

Other software tools: VMWare, Parallels, access to Amazon EC2, S3, etc. and easy approval for purchase of new ones. Look, if you're paying me 11 grand a month, and you can increase my effectiveness 20% by giving me better tools for less than the cost of one month's work, why not do it?

Can-do thinking with regard to use of online collaborative tools like Google Documents.

Posted by Mark Gelden on Apr 02, 2008 at 08:52 PM UTC - 5 hrs

Sorry I posted only half a link to the story on my blog about Google News which was founded during the 20% time devoted at Google for hobby pursuits -
http://www.techbanyan.com/archives/222

Posted by Tarun on Apr 02, 2008 at 09:07 PM UTC - 5 hrs

1. Source control.
2. Test servers.
3. Mandatory test writing for all programmers.

Posted by Ardekantur on Apr 02, 2008 at 10:28 PM UTC - 5 hrs

@Adedeji & Chris - A hypothetical for you. What if, by giving your developer 20% time for his own projects, he is more effective the 80% of the time he's committed to your code. Really, developers get burned out working on the same thing all the time.

Treating developers like this "entity" you insert x dollars into and get y hours of code vended back to you is bound to create animosity between you and your developers. This concept of total efficiency, which you are driving at by asserting "I'll pay x% of your salary for x% of your work devoted to my cause", is a complete myth; all it does is stress people out and make them fearful of you. Fear is a bad thing, I hope I don't need to explain why. Seriously, relax. Your employees want you to succeed; the ones who really care are likely to take a certain amount of personal pride in seeing the company grow. Please reciprocate that caring by not being convinced they'll screw you if you give an inch.

Obligatory book recommendation: Slack, by Tom DeMarco. Covers these same concepts far better than I could in a blog comment.

I realize my comments will probably won't affect either of you, but I'm hoping to temper your responses for anyone else who might wander by this blog.

Posted by Ed Carrel on Apr 03, 2008 at 02:08 AM UTC - 5 hrs

@SammyLarbi - my blog is dead right now. I had my hosting provider do some tweaking of my DNS settings and now it's hosed. Hopefully it'll be back up today. So I can't figure out what my permalink is now! :(

Posted by Mike Desjardins on Apr 03, 2008 at 04:13 AM UTC - 5 hrs

@Tarun - thanks for the story! I knew about News being a product of the "20% time" but not the entire story about it.

@Mike D.: Let us know when you've got it working =)

@Ed C.: Thanks for the book recommendation and comment. That's what I'm getting at in the follow up post I linked to in the comment above, so I'd like to see more in depth stuff on it, and I plan to have a look at the book you mentioned.

@Mark G. and Ardekantur: The tools and tricks of the trade aren't as important to me as the others, but I'm glad to see them showing up on someone's list! All that I'd require is that they let me use those techniques and tools as I deem necessary to my success. But I haven't worked in an organization where it would have made a difference, so I'm speaking from relative ignorance there. =)

Posted by Sammy Larbi on Apr 03, 2008 at 05:55 AM UTC - 5 hrs

Good list. I would add the following:

#7: Understands the value of good, maintainable code (and is not just solving for short-term productivity)

Posted by Dharmesh Shah on Apr 03, 2008 at 01:47 PM UTC - 5 hrs

This was a great post and brings to light things that can and should be discussed during the interview / offer letter stage of new employment. The points you listed I think are great ideas and will definitely keep this in mind when it comes for us to hire our first employee for our startup.

Chris
http://www.propertystampede.com

Posted by Chris Mancini on Apr 04, 2008 at 08:45 AM UTC - 5 hrs

Leave a comment

Leave this field empty
Your Name
Email (not displayed, more info?)
Website

Comment:

Subcribe to this comment thread
Remember my details
Google
Web CodeOdor.com

Me
Picture of me

Topics
.NET (24)
AI/Machine Learning (13)
Bioinformatics (2)
C++ (6)
cfrails (22)
ColdFusion (83)
Customer Relations (20)
DRY (19)
DSLs (13)
Future Tech (6)
Games (6)
Groovy/Grails (7)
IDEs (9)
Java (43)
JavaScript (3)
Lisp (1)
Mac OS (1)
Management (3)
Miscellany (61)
OOAD (38)
Programming (123)
Programming Quotables (8)
Rails (19)
Ruby (54)
Save Your Job (62)
scriptaGulous (4)
Software Development Process (26)
TDD (42)
TDDing xorblog (6)
Tools (4)
Web Development (5)
YAGNI (11)

Resources
Agile Manifesto & Principles
Principles Of OOD
ColdFusion
CFUnit
Ruby
Ruby on Rails
JUnit



RSS 2.0: Full Post | Short Blurb
Subscribe by email:

Delivered by FeedBurner