Amazon.com Widgets

CFObjective() 2008 - Day 2 - Selling Professional Development

How to get everyone else to use the modern development tools and techniques that you do. ;)

"Pragmatic Programmer"

Things we should probably use in the office:

Eclipse (with Aptana and Flex Builder) - With Aptana, I have officially and completely switched over to Eclipse.

Local Development - for full server control, general debugging, step debugging, speed, stability. All the peeps here consider a shared Dev server to be a bad thing.

Subversion - The CF community uses Subversion. Nobody uses Surround. Nobody has even heard of it. (http://tortoisesvn.tigris.org/ - Tortoise as an interface)

ANT (possibly) - For builds. Or even simply EAR packaging for build deployment.

CFCUnit - I really know nothing about this, but it comes up again and again in these sessions. It is just assumed that everyone uses it.

Frameworks - Possibly Model Glue for Phoenix. Since we are building from scratch, it might be valuable to invest the effort to learn and use a framework so we are all coding in the same way. This is difficult and initially painful, but it may pay off big time for everyone.

Tactics: How do we go about doing all of this?

- Focus on the specific needs and goals of your organization. Maybe we don't need to use everything above, but maybe just one or two can really help us improve. We don't necessarily NEED to use Model Glue, but perhaps generally adopt the MVC paradigm.

- Demonstrate - Create a demo or something that exhibits the benefits of the tool/idea.

- Focus on compromise and things that remove restrictions. The example here was an org that forced all SQL to be in stored procedures, but a dev wanted to use Coldspring. Coldspring uses cfqueryparam in its generated code, which solved the same issues that prompted the org to adopt their stored procedure rule in the first place. All other devs were happy because they hated the stored procedures.

- Bridge gaps - Perhaps you can't get everyone to move over all at once, but you can make incremental changes.

Comments
David's Gravatar Hey Steve - cab you elaborate on this: "a shared Dev server to be a bad thing."

Why is that exactly? How many of the peeps there have experience using a shared development environment, and what was the problem with it? How do they manage source control and local development, especially with a component driven development methodology? This would seem especially pertinent considering the suggestion to use a MVC framework where one developer could be working on the backend classes while another is working on the front end.

Are there many people there in a similar situation to ours? mid sized development teams with multi-product development?

Cheers,

David
# Posted By David | 5/3/08 1:04 PM
Jeffry Houser's Gravatar Steve,

I use a client called SmartSVN. It is a stand alone client (conceptually) similar to what you have with Surround. Odd that no one at the conference has heard of surround, especially considering how much advertising they did in CFDJ back in the day.

Subclipse is a popular eclipse extensions.

I had a hard time switching from Surround to SVN because a lot of the same names perform different actions. But, i'm very happy w/ SVN.

David,

When you are working on something, the application is often in a state of Flux. Lets say that Bob and Kitty have a shared development server. Bob needs to work on "Report 1" which is only available after an "Admin" logs in. Kitty is doing some development on the login code, perhaps to change what data is loaded when a user signs in.

Kitty's code isn't working, so Bob can't login to test your "report 1" changes. Bob sits around doing nothing for a day or two while Kitty works out her kinks.

With local development, and version control in place, this is not an issue.

Kitty needs to work out her code, so she creates a temporary branch (AKA Copy of the code), based on the trunk (AKA Current Version).
Bob needs to work on his code too. So he creates a temporary Branch (AKA Copy of the code), based on the same trunk that Kitty has used.

Both can work on their code, without being affected by each others changes.

Then Kitty finishes her changes, so she commits them to the repository and merges her branch back into the trunk.
Bob makes his changes, commits them to the repository and merges his branch back into the truck.

I would expect a company with 4 developers (like yours) would have problems like this expended.

Most likely a copy of the "trunk" will be on some staging server for people to test how it all works. Once you throw ANT into the equation, it's very easy to deploy / merge changes and the sort. ( or so I've been told, I haven't used ANT yet).

I've done 2 projects in the past year which had 3-5 developers working on them; and I used Subversion in a manner like this to great success.

If you can take the time, I Recommend reading through the SVN Redbook. It's a great overview on Version Control Techniques. Specifically read about branching, merging, and tags. ( http://svnbook.red-bean.com/en/1.4/svn.branchmerge... )/
# Posted By Jeffry Houser | 5/3/08 11:01 PM
David's Gravatar Jeff - I'm well aware of the issues related to using a shared development environment, and I wouldn't preclude using local development as a part of the overall development process. Somewhere along the line, you need to have an environment that can be used to merge all of the development changes so that developers can verify they work together. Only then can they be released for a QA department to test, preview to the customers, etc. The question is, where are you going to do this? On the same test machine that QA uses? On the same machine that the customer may be using to preview changes before they are moved to production?

The biggest problems with using a shared development environment come at the application level, or, say the index page of the site. If that is broken, then its hard to get to any other page. Proper development practice will mitigate this problem somewhat (i.e., not coding ALL of your app in one flowing index page!).

I'm concentrating on the sentence: "All the peeps here consider a shared Dev server to be a bad thing.", and I'm still wondering why? I can tell you from personal experience, across many positions, that when we didn't have a shared development environment, the quality of the software was not as good as when we did have one. Now, thats my personal experience, and my mind is here to be changed, but I'd be looking for a more detailed response that any I've heard in the past.

As for the actual source control tool used - no matter what product you use, if you don't use it in a consistently correct manner, you're asking for trouble!

Cheers,

Davo
# Posted By David | 5/4/08 1:09 PM
Jeffry Houser's Gravatar David,

I would assume (knock on wood) that the QA person has their own local development environment, just like the developers. After QA has "Stamped" it, it would go out the staging server for clients to review.

In larger projects I have heard of situations where there are dedicated QA servers in addition to staging servers and production servers. Although I do not work that way.

In an ideal world the developers will be writing unit tests, which will be run during development and after merging their changed branch back into the trunk.

One might argue that coding all of your app in one flowing index page is a good approach. In fact, most MVC frameworks that I've worked with route all page requests through a single index page, using that page as a front controller.

I think the reason why a shared dev server is a bad thing is stated by you: If the index page is broken by Developer1, Developer2 can't do anything until it is fixed. That was the same point of my "Kitty / Bob" example.
# Posted By Jeffry Houser | 5/4/08 6:44 PM
David's Gravatar Jeff - you've taken the most simplistic view of my words and fit them to the argument. So, lets start from the top. While MVC may use the index page to funnel the content through it, thats different to having an index page that contains all of the logic of that page needs in order to render properly. If you were to use MVC, or make each section of your page an included or invoked component, with each section handling errors individually, then that would limit the chances of the index page being the cause of the problem. The instance I was talking about would be a huge problem if you coding 90's style - something I hope we've all gotten past!

I've no problem with developers writing unit tests, as long as those are not the test cases being used by the QA engineers. No parent ever thinks their baby is ugly - it is the job of QA to break the developers code. If no errors are found by QA you either have amazing developers, or a deficient QA plan - I know where my money would be on that.

The idea of going straight from a local environment to production - or even a QA/Test server - is not what I would consider "professional development" at all. It may be cheaper, and it may work on small projects, but I just can't see myself trusting it to a complex system. At VERY least, you want to use environments that mimic your production environment - and that's something that is difficult to do locally (I'm not just talking code, I'm talking about the whole enchilada). A shared development environment is just a part of the process - before something is released to QA, it should be checked against the repository, given the once over by development and moved. That doesn't preclude local development, of course, and each situation is different - hence my question about whom made the suggestion, and were they working on the same kinds of systems we are.

Cheers,

Davo
# Posted By David | 5/4/08 8:08 PM
Jeffry Houser's Gravatar David,

I misunderstood originally regarding all code in one page. You are right, that would be horrendous.

I'm not understanding where a shared development server fits into the picture if all developers also have local development environments.
# Posted By Jeffry Houser | 5/5/08 4:26 PM
David's Gravatar Jeff - at very least, I believe one unified development environment should be available to unit test a product build before it is sent to QA for verification. Now, I personally think local development is a good first step - get your code bug free, then integrate into the application. I don't think its necessary, but its an option. Personally, I have mostly used a shared development environment and have not considered it a "bad thing". Then again, I've used a shared development environment on larger teams, and local development when working independently.

It most certainly can work, it does require developers to be more careful with their development, though (something we should be doing anyway, right?)

Cheers,

David
# Posted By David | 5/6/08 12:18 PM

Raymond Camden's BlogCFC version 5.8.001