Nicci wrote to me last night with the following question:
I was recently approached by an IT recruiter friend of mine regarding a position looking for an expert-level Coldfusion developer.I have been working with CF for about 5 years and in no way consider myself expert-level, but my question is this; with "expert-level" obviously being a very subjective phrase, what would you expect from an expert-level CF developer?
Just hoping to get a feel for the expectation, within the community.

- While not necessarily an Expert quality, the number one thing I look for in a developer is what they do when they are stuck. This could be as simple as not knowing what the syntax is for a particular tag. I do not believe that an Expert has to memorize all arguments to every tag/function in the language. I do expect that they know where to find them. The answer is - obviously - the docs (or the built in help in your IDE), but an expert is going to have these references ready at all times. I'd expect an Expert to know that ColdFusion has Exchange functionality. I'd not expect them to rattle off the syntax off the top of their head.
- Conversely, while I expect everyone to know how to work with the basic docs, I'd go on to say an expert knows where to dig when something goes wrong. Given a typical bug report ("It's just not working!"), an Expert understands how ColdFusion applications "flow" and would be able to trace a process to find out where the issue is. This could be as simple as recognizing that the error occurs after a CFC is called and the result was something unexpected and not handled by a CFM. This could be as complex as a MVC framework that expected a particular model call to run before another and is misconfigured order-wise.
- Going deeper, an Expert should have some understanding of the guts of the low level operations of ColdFusion. Notice I said "some understanding" - I know enough about JVM tuning to know what I don't know. But I know at least to look in that area if I see performance issues or out of memory errors. An Expert knows where to find the logs. How to use them to help diagnose issues. I'd also say that an Expert should at least have some familiarity with either FusionReactor, SeeFusion, or the built in ColdFusion Server Monitor.
- An Expert has a basic idea of what code is going to perform poorly. I'm not talking about knowing that compareNoCase is better than eq (and I'm not saying it is - but I've seen folks make those types of comparisons), but being able to look at code and recognize inefficiencies in the design. For example, I've seen code that recreates large CFCs on every request. An Expert should recognize that the CFC could be created one time and stored in the application scope.
I think there's one common theme to everything listed above: Understanding how ColdFusion works and having a tool set ready for when things don't work. This is less "I can do everything" and more "I know where to turn to." Speaking for myself (and I know some people think I've got a big enough ego already, but let's just assume for today I'm an expert ;) I know who to turn to for issues. Mike Brunt for performance. Pete and Jason for security. Shannon Hicks for Solr. Etc. If a client came to me for a problem in those areas and I couldn't answer them directly, I think it's valuable that I know who to turn to. I'd think that would be valuable in any employee.
I'll make one last point. The question here specifically relates to what defines an Expert programmer. I tried to answer that. (Although I hope my readers can flesh it out a lot more.) I think it's an entirely different question to ask about hiring an Expert programmer for your organization. In other words, how to get that great person in your organization as opposed to just hiring the hot shot Ninja for a week of consulting. For that I'll leave you with an article written by Hal Helms: Hiring and Cultivating Great Developers
Archived Comments
I'm glad you mentioned that an expert does not need to memorize all tags/functions/attributes. That was my big issue in the past with companies and wanting a certified coldfusion developer...I actually did not get a job because I was not certified. I have never liked a multiple choice test about programming. A lot of those tests are about what attribute is wrong for this tag. I don't care, I can find that in the help, or builder can help me :)
Again glad you said an expert is not someone who memorizes stuff.
Also, glad you gave an opinion on this...I hope others especially others that are company owners, managers, etc chime in. It would be great to keep this around to pass on to managers in the future for a hiring guide.
thanks for the question, and the answer(s)
In one line I will say Experts is who can handle every situation quicker with perfection.
You got it Ray - someone who is resourceful. It is similar to leaders who know how to surround themselves with people who know more than they do, especially in areas that the are not strong. A great developer knows how to tap into the resources to build solutions.
And as you say, they need to know enough about the tools to set the vision for what they can do with them. Just knowing the 3rd parameter of the CachePut() function does not make a great developer, but knowing that CachePut() exists and what you can do with it goes a long way to becoming an expert.
Looking from an employer’s perspective. I would firstly expect qualification, then base the level of expertise on speed and proficiency in coding and problem solving
The person asking the question was really asking what attributes to put in a job description, not what inherent traits make up an expert ColdFusion developer. Those are two different issues in my opinion. The HR person is looking for the criteria that would help to fill that position. It would take some thinking to put list of criteria together. I guess I would know one when I see one.
@Pritesh: I don't think I'd agree that 'perfection' is a quality to look for. I've yet to meet the perfect developer.
@ChrisB: Did you mean certification?
@Roger: Good point. How you would write a job 'ad' is different than how you would actually go about examining the candidate.
I'd say the developer has had to have purchased the CWACK co-authored by Ray Camden :)
@Ray: Yes
I love this well rounded answer, expert can mean different things to different folks. But, knowing where to turn when there are problems to solve... that we can appreciate consider them an expert in almost any field. Great answer!
I once took an interview with a company looking for an "Expert" CF 8 Developer. Part of the interview process was a "test" in ColdFusion coding. Problem - The test was on CF4!!! And they had answers that were WRONG! I thought "Maybe that's part of the test..." When I showed up for the "in person" interview - I discussed the CF4 and wrong answer issues with them... Even showed them how the questions SHOULD be answered and provided example code. I found out too late that their CURRENT EXPERT CF Programmer had written the test... Eh - Life goes on :-)
"A wise man does not KNOW the answer to all things. A wise man knows WHERE TO FIND the answers."
I would add just an expansion to Ray's point about "knowing that CF has Exchange functionality": in my experience, the developers who truly excel with CF have a very good understanding of what can be done with the tools in nearly any situation. Basically, in addition to everything Ray's got here, which is spot on, an expert can approach a problem with a strong understanding of how to solve it specifically with CF, and probably has a sense of when to turn to Java or when to turn to some other solution, even if they don't know the specific code for the solution off-hand.
Less experienced CF programmers, on the other hand, especially if they started in another language before CF, are often heard commenting, "Oh, really, I could do that directly in CF? That's native?"
An expert ColdFusion developer is one who knows when he is making a bad decision in his code.
@Shawn: Would you add that the developer knows when she is making a bad decision but understands that time restrictions may force it to be used anyway and there are steps you can take to help mitigate the risk/badness of it?
Wow - that is WAY badly written - but I hope you get my point. What's the quote - 'real developers ship'? Sometimes you have to make decisions to get things done even if it means the code is not as architected as you would like.
An expert should also be aware of the context in which his (or her) application runs. Being a Coldfusion expert is not enough (a one-trick-pony), you should also understand web servers, javascript frameworks, SQL, legacy systems etc. In addition, I would not mind if the expert understands the end-user who needs to work with an application.
-- Expert understands how ColdFusion applications "flow" and would be able to trace a process to find out where the issue is --
I second this, with emphasis.
Ray, could you talk more about your last example of saving CFCs in the APPLICATION scope? I'm curious how that works and what the benefits or tradeoffs are. Thanks.
Also, now that I think about it. How does this differ from using the built in CF component caching that you enable through the CD administrator?
I don't want to get too off topic into specifics like this, but the general answer is this.
In the past, CFC creation was a bit slow in CF. So if you didn't need to recreate the CFC on each request (ie, it was a collection of methods that had no state info), then you would make it once and not recreate it. CFC creation is MUCH faster now. That being said - it's silly to recreate a CFC on every request when you don't need to. The generally accepted best practice is to create them one time (either via simple creation in onApplicationStart or via a framework like ColdSpring).
I think the jump from being a good CFer to great is large. It takes a lot of time and interest. I'd argue that time is better spent learning a different language. I'd rather be good at 2 languages than an expert in one. I'm sure this belief won't be shared by everyone.
@Aaron, I agree that the jump to great is large, and I don't entirely disagree that time may be as well or better spent on a 2nd language, but it is also entirely true that in many cases employers could care less about your breadth of knowledge in favor of your depth of ability to meet their needs, which involves working in their technology, as the OP is finding.
Jason Dean made a great comment during the keynote at cf.Objective() about someone with seven years' experience may often just have one year's experience repeated seven times.
We see a lot of CFers who have been using CF 10-15 years but would certainly not be considered experts by any of the criteria discussed here.
It's probably true of developers in other technologies too but I suspect it's true more often in our community because CF makes things so easy that developers often don't need to learn much in order to be successful - and then have no real incentive to grow their skills.
I also think a lot of recruiters inflate the true skills required on many job ads because, let's face it, you won't get many people applying for "average CF developers wanted to do maintenance on a giant legacy / spaghetti app" which is often closer to the truth.
All that said, I agree with pretty much every point Ray makes: knowing how to find stuff out is more important (than just knowing stuff), an ability to debug problems (which seems a horribly rare skill these days!), understanding the Java stack on which we live, an instinctive feel for performance and/or architecture. Those are what makes an expert. Most of it only comes with experience but not all experience is created equal...
@ Aaron J & Jason: I think you are both right! I think the question is not what makes an expert ColdFusion Programmer - but what makes a great programmer in general. In that spirit - it all boils down to what Raymond suggests. Knowing how and where to find solutions to problems. Depth and Breadth in MHO is key to becoming a [Insert Adjective Here] programmer. Presumably - we are all first and foremost "Business Computing" programmers. In that context - while it is important to understand the syntax of a specific language - I believe it is more important to have a keen understanding of the nature of object oriented programming. Identifying predictable patterns in both usability and structure as well as establishing disciplines across application boundaries or separation of concerns. Simply put, ColdFusion is nothing more than a servlet container with a killer JSTL and some added non-J2EE specific features to perform interop with .Net. With that understanding is an expert CF programmer also an expert in SQL, Javascript, HTML, Java, xml? ...and the list goes on. Perhaps the term "expert programmer" is somewhat abstract. Maybe we are all expert programmers, maybe none of us are. As long as the solutions we provide to other peoples computing problems work - It only stands to reason that you are an expert in thier mind and "they" - your customer(s) are the only one's that truly matter at the end of the day.
I can tell you this much - the day I believe I am an expert programmer in any language will be the day I change my career choice. The more I learn, the more I realize I don't know - that is what keeps my fires lit. Good post Raymond!
You hit the nail on the head, Ray. I've worked with a wide array of CF developers who consider themselves pretty awesome, yet make a lot of bad decisions in their code. I've done it as well.
However, when confronted, they either say one of two things:
"Yeah, you're totally right. I didn't have enough time to give it the attention it needed."
or
"Yeah, you're totally right, I hated having to do that way, because I knew X was going to cause Y, but I would have to have rebuilt Z first..."
Guess which one of the two just quietly realized you found a glaring misstep in their bad code?
I'll give you a hint: It wasn't the person who knew *why* he was making a bad choice.
In my experience, that is often the determining factor between a hobbyist and an expert.
In my point of view, I prefer someone with some basic knowledge but with a HUGE spirit of learn every day...
"ColdFusion has Exchange functionality"
What is this exchange functionality?
My two cents worth: An expert is one who can examine an existing application and quickly determine what it is meant to do, what it is doing right, what it is doing wrong and the best way to make it better while not causing more issues.
@Min, it was introduced in CF8:
http://www.adobe.com/devnet...
Worth noting the original meaning of "expert" relates to having tried or experienced something. Also experience and experiment are the same word in French.
Expertise is often thought of as knowledge, but it's really about skill and judgement gained from trying stuff out and learning from successes and (more importantly) failures.
There is such a thing as 'a developer intuition'...many developers will struggle in multiple choice questions as this means memorising tags and their attributes, etc...however give them a scenario and ask them how to handle it and see how they cope...that's a true measure of expertise to a degree!!
I have to echo what Sean has written. I've been using ColdFusion since before it was version 1. I am by no means an expert and have only become a serious developer in the past 6 years. I look forward to becoming an expert in the next two years.
@Ray
Sorry for feeding the off-topic part of this, but the differing of opinion here might feed back into the "what is an expert" discussion.
I'm wholeheartedly against putting CFCs into the Application scope. It might save a few milliseconds, but you then open yourself to a bunch of concurrency issues. The content of all unscoped variables are now shared with every visitor to the site. You've got to worry about how you're creating and destroying structs, arrays, etc inside the cfc. This is asking for a lot of diligence from your developers.
Additionally there's the issue of refreshing the CFCs when code changes happen.
Most of our pages over many websites complete in 35-75ms so we don't miss the few ms consumed by re-initing the CFCs.
And for those interested we use cfcs as singletons where everything is var scoped except for init config stuff and request scoped caching. Which is probably the best case scenario *for* putting the CFCs into the Application scope.
I think you are completely wrong. I must smite you now.
Seriously though - let me start a new blog post on this today. Cool? I'll quote you and explain why I think you are wrong - and you can then reply (as can others of course).
@Grumpy,
The *only* types of CFCs that are appropriate to be placed in the application scope would be "singletons" with every variable var scoped. "Beans" or other similar types of instantiated object classes would clearly not work in application scope, and I'm certain that was not Ray's intention to suggest. In fact, I think the ability to make that distinction would be key in determining whether or not a developer candidate even understands what he's modelling ...
@Ray
Yep, I'm happy for you to use me for your punching bag, but please remember your own advice: http://www.coldfusionjedi.c...
@Jason
If you want to be 'pure' then singletons are the only type that work. However, there is a lot of impure code out there. And it's the lack of explicit "there are exceptions to this rule, don't follow this advice unless you understand why there are exceptions" that niggles me. Hopefully we can touch on this more in the new post.
Grumpy: I'll reply here - I had missed your distinction about singletons. I think your point about the exceptions is an important one. A lot of noobs - and I'm picking Sean by random - may hear Sean Corfield say do X, and assume he means do X in every case.
That's not the case. We know that. And most of the time folks like Sean and myself try to be careful to say that.
However - at the end of the day - it really is the responsibility of the noobs to get to a level of maturity where they realize that you can't apply X to every single situation.
It's like listening to a politician answering a question. They spend 45% answering and 55% ensuring they can waffle. Sometimes an answer should be just that - an answer. ;)
I came across this little tidbit that looks like something a non technical person would use to grade a technical person's ability; it looks like something your boss might use to give you an eval; but also something you could use to rank yourself. Regardless, pretty interesting take on it.
Expert
Critical knowledge of multiple IT environments/languages required due to the complex interfaces of various systems/languages.
No technical direction is required to complete tasks.
Advanced
Advanced knowledge of multiple IT environments/languages is required due to the complex interfaces of various systems.
Requires minimal technical direction to complete tasks.
Career Minded
Basic knowledge of IT systems/languages. Technical direction is required.
Beginner
Basic knowledge of IT systems/languages. Technical direction and mentoring are required.
MikeG, I've seen that before also. The only problem with "No technical direction is required to complete tasks." is that was me the first day I started to use CF & SQL Server and after almost 5 years, I'd say I am advanced, certified, learning daily with a broad knowledge base, expert on some CF issues, even relatively expert compared to many, but would not call myself an expert based on the above criteria. 'No technical direction required' is one of those necessary, but not sufficient criteria. I think Ray and others here have hit on a number of the really important criteria.
What I find amusing are job posts that ask for the expert super programmer that expect to pay little. When seeing posts for expert super programmer, I would advise candidates not to worry too much about checking off all the boxes as long as they have some of the key transferable skills to get the job done.
Nicci, don't hesitate to find out more about the job if you are interested. Don't get hung up on titles. Too often the person who posted the ad is not clued in to what is really needed. 5 years, unless you have learned little in that time, is good enough to at least ask for more info about the job. 'Expert' is in the eye of the beholder.