Wiki Choices, Sharepoint Voices

I was talking with a PM at another company the other day who was insistent that their tech wiki pages reside in Sharepoint.  I have been to places like that before and it sucks and this is why, in a nutshell:

Sharepoint wiki functionality sucks.   Usability SUCKS.   Its not fluid, it doesn’t support full wiki syntax, its HTML syntax is limited,  and it hates images.  And the biggest problem is usually Sharepoint is locked down on a site with security, which defeats the purpose of a wiki altogether which is trust and public knowledge maintained by everyone.

Use the Tool for the job, dammit.

Of course the story I got from her was how they couldn’t get enough content in there.   The teams avoided it like the plague.  So I told her my reasons why Sharepoint isn’t any good as a wiki.   Its stupendous as a document repository; but many times sites distrust the developers and force them to use an inefficient tool, and then get upset because the tool won’t perform.  It’s very simple:  who is using the tool?  Who is the audience?  Then why in god’s name does a non-interested party get to pick the tool for these people?

Good Tools

There are so many good wiki engines out there I don’t even know where to start.   Many are PHP based and will simply run on an Apache server.  MediaWiki or PmWiki,   I like the latter because it is lightweight, and even use it for the Ivy Street Project site.   Sometimes, you might have a J2EE shop and your in house server is JBoss or Tomcat (neither of which need Apache) so, you want a J2EE solution.   I’ve seen countless JSPWiki installations.  Or, you can buy awesome wiki engines like Atlassian Confluence.

The point is: use the tool to fit the job.  Sharepoint is not a good wiki, its only a good document repository.  Good for versioning etc. all those BA docs and SLA’s and etc.

Formula

A workable wiki engine will have a very easy to use interface, support wiki syntax and perhaps HTML.  Images aren’t a pain.  It works on a lot of databases or none at all (PmWiki — flat files).   The search engine works nice and the taxonomy should be easily adjustable.

What’s a wiki for?  Well its NOT to store legacy information.  It should contain the most up to date information about developer setup, environments, methodologies.  Design.  Today’s stuff.   Everyone contributes and keeps it rolling;  that’s what it’s for.

My friend listened to me and I am hopeful she sees what this is really all about.

FireFox: OS Amore’?

Browsers aren’t something that’s been all that important to me.  Compared to most people I probably know a little too much but all’s I want is for something to work, and to need minimal upgrades.  I like to have a few browsers around for development because it allows me to have two isolated sessions like cookies, server sessions whathaveyou (now there’s a FireFox plugin I could use, just don’t have the dedication to write it).

Anyway, FireFox is my current main browser and I am addicted to tabs and developer plugins.   But something that’s disappointing me is what a pig its become.

Recently during an upgrade to the latest 3.6.13 version on my XP notebook, FireFox said this to me near the end of installation:

Please Restart Your Machine to Finish Installation

What?  No way.

I don’t like this, not one bit.   Because it probably means its messing with the DLL’s, native things, and doing registry entries or maybe even service adjustments.  No sir I donn’t like this at all.

Now, supposedly doing this means FireFox will run faster on my machine “natively”; but there are implications for this approach:

  1. They will have to keep up with an test even more deeply for every Microsoft, or Mac, or whatever OS update which is very, very frequent.  So in essence your browser starts to become nag ware.
  2. Probably (a guess) the branches for each OS might get out of sync unless they closely manage their releases.  This has implications for people who OS hop quite a bit, namely developers or qa.   I like my user functionality to work the same on all machines.
  3. I don’t know about you, but an application that just needs to be unzipped, not installed, and then just runs when you click it is awesome.    I don’t like service things or fancy integrations, they are always rife with problems.   For example, a certain installation on a Corporate XP machine would whig pretty bad with its Explorer integration on the file system.

I use this little suite of  tools for my PC called PortableApps.  I can do an unzip “installation” of it and inside it will manage plugins such as OpenOffice, 7-Zip, Notepad++, Gimp, Putty, VLC etc.    It works on any Windows machine.   I think all these apps work on Linux too, abut not Mac.  (Eclipse used to be unzip-and-run too).

They reason I mention PortableApps is because I want to do my work, have my user experience in an app the exact same regardless of the platform.  For instance, if I am maintaining music playlists, then if I use VLC as my media machine then the lists are simple to access and play across machines; I don’t need iTunes on one, Windows Media Player on another.  It makes life simple and portable; you probide the OS, and my apps and data are portable. I have spent countless hours looking for things like backup tools that work on multiple platforms to I could access the data from any machine.

In all fairness there are people who love their one OS and that’s why they pick it.  And to have things run natively would be great for them.   And for such applications — I have FL Studio which only runs on Windows — that’s excellent.  These really need to leverage the hardware.

I guess my case is an outlier.

But with the advent of the “cloud” I can even see portable platforms following people.   I have that now for myself, but only with a lot of sweat.

Grails App On Google App Engine

I wanted to collect things I know about the health care process into an application and decided a Grails app running on Google App Engine would be a fun way to go.  This is how I got things launched, and you might be able to use this for your app.

The reason I chose the Google platform was cost.   The idea of an Amazon EC2 environment and platform as a service really appeals to me, and in fact this site is served up from a PHP/Servlet container Linux server I rent on my ISP provider.  But a lot of the providers cost quite a bit more than I want to spend now to play with concepts.  Google is a bit quirky but I think in the future the cloud platforms will be much more standard and accommodating to widespread tech and code — seems to be where Amazon, Salesforce, VMWare etc. are all heading.  Some of us will write the code that binds it — just like no one worries about connection pooling anymore, a lot of the stuff will become transparent and we can just code.  Not today though.

And a lot of times, I don’t want to be a programmer per se, instead, I just want to do make my idea real.    I am hoping the Google platform can help me do this quickly.

Before you start, you’ll have to get a Google app engine account using your cell phone because they will SMS text a confirmation number to you.  I wasn’t confortable doing this, so at Walmart I picked up a TracFone pay as you go for $10, and it had 20 total minutes that came free with it.   I priced out other could platforms and you have to really pay big (Although now Amazon has a year of free services for new people on a small scale).  $10 for my piece of mind seems reasonable.  Also — a cool phone for $10 is quite amazing, I was shocked.   I’ll probably write an article up on the Ivy Street Design site about it.  But Onto Business.

How to get a Grails App Up onto Google Apps, in Meta terms.   I am assuming the person reading this is already a Grails developer familiar with fundamental actions.

Setup

  1. Get a Google App Engine account.
  2. Choose a name for your app and set up an application space in it.  It will end up being something like “<yourapp>.appspot.com” for the url, since appspot serves them up at Google.
  3. OK — you should have your IDE and machine set up for Grails.   I’m not going through it so make sure GRAILS_HOME and GROOVY_HOME environment is set up in your environment (with the /bin’s in the PATH, just like the JAVA setup you should have done).
  4. Download the Google Apps SDK for Java on their site.  Unzip it to your library spot then, set up the APPENGINE_HOME env variable and add the /bin to the PATH variable.
  5. Test your setup quick.  Open a terminal up and type in and test each of:
    • groovy -version
    • groovy -version
    • appcfg -h
  6. Create a grails application in your IDE.
  7. OK — important — you will have to remove the hibernate plugin from your project if it is in there (Google App Engine cannot run full blown hibernate).  Also, I removed the tomcat plugin. Since I am using Netbeans as my IDE for this it might have thrown that in there.
  8. Install the app-engine plugin into your project.
  9. Configure appengine-web.xml in your app directory.  Set <application> to the name of your target app in Google App Engine, and the <version> number.

Run the App

Now that you are set up you can run the app in the local app engine that you downloaded with the Google Java SDK.  I found that the Netbeans plugin for Google App Engine not too helpful at all — it wouldn’t let me add a Grails app to the server.  You can find it on the Kenai.com site, or maybe have better luck with Eclipse.  For now though running from the command line is good.  Should know how to do that anyway.

Go to your Grails application directory.  and execute:

grails app-engine run

It will take a bit for it to build and run, but the command line will tell you its ready and you can go to http://localhost:8080/ and see your app.  Also note that the org.grails.appengine.AppEngineReloadController will show up under the controller list.

I just ctrl-c out of the service to stop it.

Upload the App

It’s simple to do this from the command line in your project’s directory.

Optional, set the version:

grails set-version 1

Now package up the app:

grails app-engine package

Then, upload:

appcfg update ./target/war

You’ll be prompted for your ID/password on the command line.  It won’t take long — and you will see your application served upp at <yourappname>.appspot.com.  Make sure to check out the administrative console on Google as well for your app.

My next step will be to delve into BigTable and the possible ORM functionality I can do, as well as work on my app.  I’m working on some writings about the NoSQL technology, should be fun.

TDD: Not For Design

Recently I was having a discussion about NoSQL and Relational Databases.  The positions are so divided.  It always harkens back to the day when parallel and linear processing were raging in battle against each other.

So tell me, do you multi-thread your apps that much?  How about in a method?  Why not?  right.  Cause you don’t need to.  Parallel and linear processing have their places.  So do NoSQL and RelationDB’s.  And so does TDD.

TDD stand for test driven development.  There are times I’ve heard the word “design” substituted for development.  There are still people banging Khrushchev’s shoe on the cube and screaming “WE MUST DO TDD”!!!!!   Because they think it is the best way to code an application.  It will dictate your design, which will be rock solid because you have done TDD!

Great, in theory, on the surface.

TDD vs.  well — Test after?  Is also one of those dead end arguments.   They are just merely tools.  Try as a TDD Cleric might try, its just a damn tool to use and is not well suited for most design work.  I’m sorry, its not.  But some still people use it to do design for their code.   And development is a creative effort.     Development is not typing fancy.

The reason TDD is poor for design is tough to grasp; because it takes more insight than a sound byte or a simple dismissal.   The reason comes after a long time of trying TDD, and finally having that aha moment.    it reminds me very much of putting tarragon on fruit loops.   You eat the fruit loops and something just doesn’t taste right.  And you don’t know what it is, just something.  If you happen to like tarragon on your fruit loops, then I suggest instead imagine coco puffs with rabbit shit.   Mmmmm delicious rabbit puffs . . .

TDD doesn’t work because the tests are not the source behavior of the application.   I am sorry but they are not.  You can code the tests first, but before that, the application had already existed in the form of a requirement or more likely, someone’s mind.  The application already exists before the tests so it is already designed.

A BA didn’t come along and say “I think our business needs a set of test suites for customer registration.”  Nope.

They wanted customer registration.  The test doesn’t dictate where the entry fields are, where the submit button is — all that comes after the real design and  merely tests that it matches the criteria.  That’s it.  NOTHING is driven by the tests.  In fact, the idea of “driven” becomes silly in that context.  Driven implies “first.”  And the tests are not first.

Between the requirements and the translation of them into code, which may be tests, there weren’t tests.  The tests are derivative.

Now let me support this with field data.  I have talked to 4 places in the last month that all state they are a TDD shop on paper.  But when you look at their code, when you talk to them — well, they aren’t doing it!   They have those zealot TDD programmers onsite that will kill you if you speak out against Ruby and even they aren’t doing it. all the time.

In fact, a huge problem in the development world is that we do not get time to re-factor properly — the business does not want to pay for it and eats the technical debt.  TDD then in fact becomes a deterrent to re-factoring because it takes more time with more code.

The idea of TDD is good, as a tool.   It’s nice as a way to supplement the quality of your code, or to help decide if there are patterns.  You have to be willing to throw whole sets of tests out for re-factors; and a lot of people won’t do that so like a distributed repository it never really gets  properly practiced.

But TDD is not suited for most design and never will be.  The world is not manifested like that.

Management Onion Layers In Agile Are Here

I was looking around on the job boards when I saw an ad for an “Iteration Manager”:

POSITION SUMMARY – ITERATION MANAGER
The Iteration Manager is responsible for the delivery of the development iterations:
– Scrum certified preferred
– lead daily scrums
– lead quick starts
– ensure team collaboration and iteration goals are met

Seriously?  This used to be done on a scrum team by a lead tech or as a rotating role, since the Team was ensuring the outcome of the iteration.

Another colleague and myself had a discussion and predicted this over 5 years ago — that when Agile went through the genesis of capitalization from the task people, that more management would be introduced.  It started as the form of “coaches” which were trained task people.  What’s scary about this posting is that the Iteration Manager position does not require ANY development experience whatsoever.  So I have no idea how the people this posting is trying to hire can do a quick start at all.  Seriously, I’ve had my share of  non-technical PM’s try to “guide” object design and implementation and you can guess the outcome.

It flabbergasts me that what I thought was the original goal of Agile — to create better software more quickly — now requires extra resources to accomplish this.  If your department has three scrum teams, you are seriously going to hire three “Iteration” managers to “ensure collaboration and iteration goals are met”?   And has proven to be cost effective?

In the world of top-down, micromanaged Agile I guess this is understandable.  The empowerment at places has been taken away from the builders of the software, who are those who know how to do it best,  and given to second-tier PM’s in order to provide the right platform to report up.   I have been in it.  Twice at places I’ve worked the report-up micromanagement requirements became so great that the developers in the scrum master roles couldn’t get any work done, maybe 10% time (laughable) in their IDE under this technique.  They would spend all day in Scrum-of-Scrum-of-Scrum meetings, status meetings, and their Agile story tracker preening more than a Vegas showgirl.

Reality: the empowerment really isn’t gone from the developers, it can’t be taken away because they are the ones building.  That’s what an iteration is, that’s what Agile is, management of one’s own building.   The “Iteration Managers” become impediments, screaming grannies in the back of the car yelling directions through their technical Alzheimer’s at people who are actually driving.  Probably it would be frustrating taking this position — how would they report their own time, as “directing” Developer A to replace his vectors with collections??????  Don’t get it.

Wow.  What next — Daily Code Managers?  One per developer?

All’s ou just really need a good development manager, who is probably sitting there right now; who can take over the place of all these people and trust the task people and let them do what no one else can do: ensure collaboration and iteration goals are met.

Rochambeau With Snow Leopard and Python

And I still can’t walk upright . . .

Finally, I decided I was sick of the incompatabilities “modern” software has with OSX 10.4 -Tiger.  Like a Rock Solid Visual basic 5 compiler, I threw it to the gutter and got myself a copy of Snow Leopard at a discount since it was an iLife09 version.   The last straw was trying to install Google SketchUp only to find out that ONLY OSX 10.5 and later was supported.  On top of it all I was forced to deal with PPC vs. Intel architectures.  WTF is this 1995????  (Remember all those cheaper non-Intel alternative processors back then, jeez can’t even remember their names and only AMD is left.)

Took about 3 hours to get my data backed up and do a fresh install of Snow Leopard.  Also, since I had a Tiger machine I had to get the boxed set but I passed on installing iWork.  OK three hours and $99 poorer I was ready to rock the laptop world!!!!!

So I started to put on my usual apps . . Text Wrangler, Taco Html, Firefox . . .Zim Wiki.     Hmmmm Zim went on pretty roundabout on Tiger, a MacPort install.

I install the requisite XCode and X11 stuff off my Snow Leopard disk.  Then, I install MacPorts.  Only a little bit left.   But it wasn’t going to be this easy, its a MAC and a MAC doesn’t like you messing with its libraries, let alone the .profile, in a nice manner.

So the instructions for Zim say install Python 2.5 and a few libraries and its on.  Easy enough.  But I get problems; problem problem problems.    Packages can’t install.  I search the MacPorts  site, looking at bug databases and install config files.   Apparantly someone uploaded on  package dependency with only PPC architecture files; another Python library wouldn’t work on Snow Leopard’s 64-bit handling.  And yet again a GTK package wouldn’t even work at ALL with Python 2.5 there and some were calling for Python 2.7 dependencies???

Tracing through the log files I go slow and try to use a few other installation methods.  hand drop zim and python — nothing.  I try Fink, which is kind of like a MacPorts — the Snow Leopard release doesn’t exist yet you have to build it by hand, if you have all the packages but I haven’t even gotten gcc working yet.  The easy_install routine from Python doesn’t have everything I need “egged” up so that won’t work.

Wow great all these command-line installation methods:  MacPorts, Fink, and Python got me nowhere on an OS released in June 2009.   I learned a lot about python packages and how to use MacPorts though. Golly.

Finally, I issue this:

  • sudo port -f uninstall installed

Trying to clean out all my MacPorts installs.  At this point almost 6 hours have went by or researching, trial and error.  I was sipping a Mountain Dew and having that stay-awake feeling I used to get looking for Windows 95 print drivers over 10 years ago to make something, ANYTHING work; or playing Champions RPG at 3 am.

Remembering a few things from the bug database and some package config files I try the install completely with Python 2.6, even though Zim hadn’t been built against that.  Bingo it WORKED!!!!  (I have a posting on this somewhere on this site).

9 total hours to put on a  little app that takes 15 minutes to put on an XP or Linux box.  As I’m watching the command line as MacPorts installs every goddamn thing under the stars just to make a tiny app work:   perl, tcl, smalltalk, visualbasic 4, C from an old SCO Unix machine, informix, recipes for goulash.    PERL???  WHY?!?!?!??!    Dare I say — or question out loud — are Linux and Windows MORE compatable with each other due to the ease of  classpathing?

Macintosh I just don’t get it.

Well have to go I need to write my Grandma an email about how easy it is to compile libpng on the supremely user-friendly OSX!!!!!  She still uses mail -f .  That silly Grandma!!!!!!

🙂

Zim Wiki Installed on Snow Leopard OSX 10.6

On December 30, 2010 I was able to install a working Zim wiki instance on OSX 10.6 (Snow Leopard) on and Intel Mac.  Here are the condensed steps.  Total time to get up and running was just over 2 hours for me on a fresh OSX install.

  1. Install Macports for Snow Leopard per their instructions.  Make SURE you meet the requirements of having X11 and XCode installed already!
  2. On the Zim site it says you must us the python version 2.5 files, do not you need version 2.6.  Substitute “26” for “25” in their list which means you will need to install these packages via macports, in the following order:
    1. sudo port install python26
    2. sudo port install py26-gtk
    3. sudo port install py26-simplejson
    4. sudo port install py26-xdg
    5. sudo port install zim
  3. Open up X11, and execute “zim” in a shell and it will start.

Just in case:

Python Version 2.5 would not work on my machine for a number of reasons and I was forced to back out its install.  The backout might have left a residue, so  when I got to the “install zim” step I was stopped twice due to unregistered packages that already seemed to be there.  I executed these steps in order (per each stoppage) from information form the log files to solve this problem:

  1. sudo port -f activate p5-module-build
  2. sudo port -f activate zim

You may not have to do this at all if you are starting from scratch.  Good luck!

A One Trick Pony, Or Domain Domain Developer

A recent discussion about backgrounds, a person asked me when I received my computer science degree.   I said I never got one, that my college (which is very prestigious) did not have a CSci program back then, and we taught ourselves to code to carry out experiments and projects.    And back then, just 20+ years ago, the CSci majors mostly did their work in a business context and that being almost exclusively Cobol.    Not that I hadn’t taken Fortran, Pascal, C++, Data Structures, Graphics, or AI classes here and there — I did.  It was just that most places looked at CSci as an adjunct to a math department, or as a hammer in a carpenter’s toolbox.  I remember even as recently as around 2000 or 2002, the big state university here did not have Oracle or any databases for that matter; in class any undergraduate wouldn’t get that hands on, not until they got a job.

Things have changed.  The biggest change is tha availablity of tools over the web for little or no cost; for instance Eclipse.  You can download all the Oracle tools as long as you don’t use them commercially.  Most tools have some version or likeness for free, making it easier to learn on one’s own time or for an educational place to capitalize and offer degrees and certifications based on these tools.  The commercial providers are competing for users, which will help them sell their product.

Now funny enough, I’ve seen the rise of free tools tie in with the rise of certifications.  If you’ve coded then you know that 90% of the time a listed certification on someone’s resume screams “no experience.”

One area of making software where this becomes apparent is Agile Scrum Master certifications.   I agree that a certification helps get a foot in the door or a sales rep drooling over your resume, but it is in absolutely no way an indication of competency in the world of development.  Also, I love more and more education; again, is no indication of a quality developer.

Something I love about this profession is that most of the successful people are evenly split between formal training and none at all.

An example I can think of was a PM who had not yet received his SCM (scrum master certification) but told me he had in order to gain credibility.   But he had never done scrum before.  The effects were that very, very little software got written under his tutelage.  Also, he believed it gave him credence to diddle with engineering design, coding, and execution having absolutely no technical experience ever before or any experience in the application’s domain (even the dreaded PM statement “I supported perl for six months TOTALLY get you developers!!!”).  🙂  sigh

Contemplating this, I re-read the Agile manifesto and was reminded that one of the ideas behind Agile was to get the developers and the business closer together.  So, although the trend has been to make the Six Sigma assembly line of tech people it hasn’t worked because of a nasty little word: requirements.   Developers have to get well communicated requirements from the business and translate them into the technology of the day to make a successful application.  Many times, formally trained coders aren’t quite as good at this because their time was spent in the technology, but not in other educational areas such as writing, comprehension, observation or even creative arts that contribute to problem solving.  I’m not generalizing though — but it raises questions about how the industry DOES generalize when it tries to measure a developer on paper.

For years I remember the CSci trained people working on the real engineering aspects of computers:  disk space calculation, operating system fixes, calculating switch loads or packet sizes etc.  A lot of time those types of people weren’t very good at making user applications.  In fact, when I talk with other developers, its a fact that we rarely ever, ever talk about the actual “business” of the site.  For instance, I almosts a year and a half at a health care place and never once, not once, discussed health care or our product in health terms, just as a technical work.

So is this new assembly-line, domain blind world adequate to produce real quality software?  Personally, I don’t think so.  I think at some point a person will have to really learn the business to really be effective at making the application successful.  Agile has lent itself to become a report-up tool so it’s kind of missed it, but the intentions were there.  I think we’ll just have to try again in the next generation of software building techniques.

Dual Allegiance When Consulting

Dual Allegiance?  To both the Freemen, and Duke Leto?  It worked on Dune.  And is a reality for a consultant  in today’s modern world.

Before writing this I searched and searched for quotes about dual allegiance and found nothing.  Lots about fidelity, and loyalty — both ways.  Oscar Wilde seems quite abhorred at allegiance.  But nothing on dual allegiance.

Over the years I have talked to countless account reps and HR people  and it struck me that the definition of what an “employee” really is becomes very gray, and once onsite, whom you owe allegiance to is rife with conflict of interest.

Of course, your first interest should be yourself.  Your health, your family, your sanity, your career without which there is no worker bee.    Although even those choices can conflict (for instance, staying bed in the morning conflicts with all other parties’ interested).

But let’s say you are working with an agency and you get onsite with a client.  Who are you supposed to really be loyal to?  The bottom line here is very gray.  The agency is issuing your check, but the client is giving them the money for that check.  And you are in the thick of things at the clients; the agency probably knows far less than you about how to stay on contract there.    Then, there’s the bottom line technology expertise; most agencies are keyword-driven and know absolutely zilch about tech or actual work conditions while the client is really in charge of your happiness and opportunity (and of course you too are responsible).

For instance, a scenario I have been faced with time and again has been overtime.  Usually its a great thing, in doses.  But lets say the overtime requirements bleed on for a year burning you out.   Most agencies don’t even have a tiny clue as what this means; they just see the big checks coming and want them to keep coming.  Also, sometimes the client doesn’t want the overtime but the employee and agency does and may spin something in a sales manner to get more hours etc.  These kind of situations are bad.

So how do we all mitigate this dilemma, which is very ethical in nature?

I usually look at it like this:  the client is my real customer/employer, and the agency is my partner from whom I have purchased a contract for part of the billing rate.  Most agencies don’t pay bench time and definitely do not supervise onsite projects, so its impossible to see them as anything more than some sort of hr/check issuance service.  Also, most agencies will not step in to protect a consultant because that may jeopardize their big picture status — of having other consultants at that client site.

Also, being a developer, conversations with both parties is quite different.  Agencies rarely have many of the real specs or the expertise to figure out what they are selling to (thus the success of “turn and burn” recruiters).  Your conversations with them will be sales driven, and they will be listening to your words not just to evaluate you as a wholesale product but also for names of your contacts or old gigs you worked to see if there’s opportunity outside of your relationship with them.  With the client, conversations are about solutions for their business almost exclusively.  Most of your contacts and colleagues and new friends will come from the site.  Your compatriots in your profession will come from the site.  And if you do a great job, then they will ask you to come back and pay — whereas the agency will have to wait for another placement before it pays.

The political nature of this can’t be understated, especially if you are trying to stand your ground on what you like to do, your rates, etc.

So you do indeed have dual allegiance during a gig.  Well, a triple allegiance.  Yourself, the agency, and the client.  Experience will teach you your comfort level.   Play it well.

Consulting Vs. FTEship – What Does It Really Mean?

In the last few years of this tentative economy some of us have decided to “hunker down” and take FTEships.  Others of us got laid off and went back to consulting.  Some of us started companies, some of us stopped companies.

Myself, I’ve been a consultant/contractor most of my career.  Also, I have been an FTE twice for product companies I truly believe in.

Anyway.  What exactly do I think of when I think Consultant (= Contractor for my use) versus and FTE?  It’s very simple to me:

FTE

  1. Primary Focus:  the business (i.e. manufacturing) but not necessarily the craft (i.e. developer).
  2. Is on a tract for usually management, maybe architect.  Become better at the business.
  3. Feeling of “job security.”
  4. More easily obtained benefits packages.
  5. Lower pay for more hours.
  6. Usually educated through the workplace.

Consultant

  1. Primary Focus:  the craft/profession of developing.
  2. Tract is usually more knowledge or leadership roles on projects.  Become a better developer.
  3. Accepts risk of short-term project employment.
  4. Usually takes care of own benefits.
  5. Better pay for hours.
  6. Usually self educated.

So there you have it.  The experience in the two realms produces two different types of developers.  Probably a myriad of inputs cause a developer to choose on path over the other.  From my experience and discussion with people it kind of boils down to this:

  • People who need to feel secure become FTE’s.
  • People who want higher pay at greater risk become Consultants.
  • People who need new things and experiences become Consultants.
  • People with long-term business objectives become FTE’s.
  • Many times I find Consultants to be more motivated after hours to work on new technology and solutions.
  • I find that more FTE’s want a life balance and a J-O-B job, which is a good thing too.

Now, a dirty little secret in the development world is that 90% of the time you don’t even talk about what the actual “business” of the applications you are working on might even be.  Most apps are a domain, garbage in and out, and screens designed by God knows who.  You are just a brick layer.  Will the building be a tire store, or a puppy mill?  Don’t know.  But I can lay the bricks.

The Bias Point

My personal bias point, and why I hesitate to become an FTE, is that it really requires a commitment to the business goal that forsakes the profession of coding.  Its almost a conflict of interest.  I find it curious that FTEships are even offered out front — except that they probably save money due to the weird and unresolvable “pay less for an FTE than a Consultant” paradox that has all of us scratching our heads.  The craftsmanship all places are seeking comes from within the individual, not a Director “demanding” a person become a craftsman.  Many times the FTEship is a throat collar to those types.

So I have only this advice:  if you believe in the product like a crazy man, or need a steady job, certainly become an FTE.  If you are dedicated to your craft, stay a consultant.  Some places afford the best of both but its rare.