During your first week on the project you’re assigned to have a mentor who has written a large portion of the existing application. While working on your first serious defect in the system, you ask the Possessive Developer about an existing piece of code and suggest refactoring. She looks back at you and states “There’s no reason to change that code. It works just as I want it to.” After explaining its deficiencies, the Possessive Developer is sullen and in a less-than-cordial mood. At the end of the conversation she has neither agreed nor disagreed with the suggested changes, but there is tension in the air.
The following morning the Possessive Developer corners you at the water cooler and lashes into a list of reasons that there should be no changes to the code discussed the previous day. At the end of the one-way conversation she walks away with confidence in her stride. You now know. It is her code, her creation and her domain. Only the Possessive Developer can state when her code is to be changed.
Like the “Oooo…Shiny!” Developer, code reviews with peers can be useful. In a more neutral forum, it’s much harder to argue against the majority. But don’t ignore The Possessive Developer. It doesn’t take long to turn her into a Skeptic or a Hero.
For the final few posts in the Development Project Archetypes we'll focus on developers.
An incestuous cousin to the Front of the Magazine Architect, this developer is easily distracted by any new technology. Not only will he want to talk about it endlessly, the ‘Oooo…Shiny!’ Developer will simply add the technology to the project without telling anyone. You will find, scattered through the code base, a number of different techniques, tools or frameworks that are used one time and then abandoned. While adding to your technical debt, the ‘Oooo…Shiny!’ Developer is working feverishly to keep adding new entries to the “Experience Using” section of his resume.
Sometimes it is easy enough to counter his predilection for new and shiny simply by placing a pretty glass bead on their keyboard every morning. When that fails, it’s time to up the priority of the code reviews for The “Oooo…Shiny!” Developer. And be merciless.
Still avoiding developers, we continue talking about archetypes...
Usually found in the confines of an organization that has heavily silo’d roles and responsibilities, the Enhancing Tester will be assigned responsibility for ensuring the product quality. She believes it is her personal responsibility to question and alter any specifications that were used in creating the software. Since she wasn’t involved at the start of the development cycle, the Enhancing Tester will question the design and requirements only after the development team has passed them on for test. The proposed ‘enhancements’ are usually obscure and with far reaching architectural ramifications. For example, “this really should be an MDI application.”
Since she understands the original requirements, but not the overall business, the Enhancing Tester has no choice but to log these as software bugs so that they will get the attention of the team. After working with her for a few months you will wake up in a cold sweat yelling “It’s not a bug, it’s a feature change!”
Usually, you can counter this by assigning cost estimates to the “bug fixes”. It helps to do so in front of the client.
Deviating from the developer sphere, we continue the Development Project Archetypes...
A good many application require access to a database. If you’re lucky, you’ll have free rein over the database to make whatever changes you deem necessary. If you’re unlucky, you’ll need to make those changes through an Over-Protective DBA.
The Over-Protective DBA protects his database with an iron fist. Requests for changes to a stored procedure go through several iterations to ensure they include the standard corporate header and naming conventions. He also challenges every single piece of code in the procedure to see whether you really need it. Only when satisfied that the application can’t be deployed without it will he grace the database with your changes. In the development environment, at least…
If you really want a battle on your hands, suggest to an Over-Protective DBA that you should switch to an object-relational mapper. Be prepared to launch into a prolonged debate on the performance of stored procedures vs. dynamic SQL, the dangers of SQL injection, and the “importance” of being able to deploy changes to business logic without re-compiling the application.
The Over-Protective DBA often has company policy on his side so he will be a challenge. Don’t spend a lot of time confronting him head-to-head. Your database is an important part of your application, it behoves you to get along with him. Instead, arm yourself with knowledge and talk to him in common terms. In our experience, DBAs can often be negotiated with for certain things, such as an automated database deployment.
Another in the Archetypes series...
Everyone loves a hero. The PM, the architects and the client relish the long hours he puts into delivering results. When the client is told we don’t have the budget or manpower to add a feature, the hero’s cubicle is his first stop after the meeting. “Old man Baley says we can’t have this. But we NEED it.” The Hero hums and haws and complains how badly the project is being managed, then with a sigh says, “I’ll put it in. But this is the LAST TIME.”
The Hero then proceeds to circumvent your entire development architecture wedging the feature in because he doesn’t understand terms like “budget” and “resources”. All he cares about is getting his ego stroked and being the martyr that saved the project. The long hours he puts in are heralded by the PM and the client who don’t realize his effort is not directly correlated to the value he is delivering.
Project Managers and Clients will scoff at you when you make claims against their Hero. In their mind, he is a cornerstone in the project and whose absence will wreak havoc on the success of the project. Regardless of their actual ability, Heroes are often more trouble than they’re worth.
A while back I posted about a small framework that I wrote to make handling of nHibernate Sessions easier in a WCF world. There were a couple of problems with it and I've spent some time fixing it recently. The entries on the wiki have been updated to fix problems in the documentation as well.
The big changes in the framework were a bug fix that was preventing the commit from being run, moving to the latest version of nHibernate, and making better use of nHibernate transactions. The svn source code repository is available here. If you get it and run the b.bat at the root of the trunk you will be able to grab the latest artifacts from the release folder that is created in the trunk.
The next post in the Software Development Archetypes series...
Every project needs experienced people to improve the odds of succeeding. Skilled developer resources are hard to come by so you’re really excited to be joining a team that has some “Experienced” Developers. But it doesn’t take long on any project to realize that experience is a relative term. When asking for help, the “Experienced” Developer’s questions are often at the same level as some of the junior developers on the team. When he does propose a solution, and has it turned down, he immediately plays the “I have 12 years of experience in this industry. I think I know what I’m doing" card. As a result, he will be a ferocious, if not weakly armed, foe when arguing the merits of a situation.
On his own, the “Experienced” Developer is usually an easy person to handle. A simple “show me” is enough to counter him. Eventually, he will stop playing his “number of years in the industry” card and come around.
Another post in the Development Project Archetypes series...
Every time that the team attempts to implement a technique, process or technology that will address a project problem and better the team’s ability to deliver to the client, the Skeptic will interject. If it’s unknown to the Skeptic, then he must speak out about his doubt. Often the doubts are small and founded in his complete lack of knowledge. Regardless, he will stand by them vigorously until the project has discussed (at least three times) the situation.
The discussion will not, however, satisfy the Skeptic. If he does agree to move forward, it will be under very vocal protest. He will end his part of the discussion by stating that he “still isn’t sure that [he’s] fully convinced of any benefit”. Regardless of how the project moves forward, the Skeptic will always be the first person to point out any small flaw in something that he opposed. He was, after all, trying to warn the team of the potential problems ahead of time. And now it’s your fault for not listening back then.
If you’re lucky, The Skeptic can be ignored. But if he has some political clout, you may need some allies in the form of other developers. Focus on convincing the other developers that what you are doing is correct.
IMPORTANT NOTE: Just like you are not always right, The Skeptic is not always wrong. Don’t discount his arguments just because you always have before.
Transitioning into the realm of developers, we continue the Development Project Archetypes series...
Though you will usually see the Disinterested Developer working diligently whenever you walk by, you also notice she has a well-known social networking site constantly minimized on his desktop. Over time, you see a pattern: social networking tools when no one is thought to be around, development tools when there is. During meetings the Disinterested Developer is looking out the window or checking her mobile phone. She doesn’t engage the rest of the team on a technical level. She answers only when required and delivers the minimal amount of work necessary to keep the project manager happy. Her heart either isn’t in software development or she’s bored with the project.
The Disinterested Developer isn’t necessarily a bad person. Not everyone is as keen on software as you are (right?). But care should be taken to ensure she carries her weight. The last thing you need on a brownfield project is a team revolt because she is perceived as getting special treatment. Your best bet is a heart-to-heart with the developer to see if there is a reason behind her ennui. Give her every chance to turn things around. It may sound mercenary, but if there is no improvement, don’t discount removing her from the project as an alternative.
Resuming the Development Project Archetypes series...
Monday morning and the Ex-Tech PM appears on the edge of the status meeting as an observer to the team’s daily ritual. One by one the developers tell of their current work and its state. As one developer mentions that there will be some design work in his day ahead, the Ex-Tech PM interjects with “We used to do <something> when I was an RPG developer. You should look into doing that too.” The team continues through the standup and when completed the Ex-Tech PM corners the developer to provide more details about his idea.
Over the next few days the developers come up with a solution (different from the PM’s, naturally) and it is mentioned at the morning status meeting. On hearing this, the Ex-Tech PM becomes adamant that the team didn’t put enough consideration into his idea and the results of his project five years ago justify the same solution be used here and now.
Luckily, the Ex-Teach PM is easily appeased. A simple “yes, you’re right, dear” will keep him at bay until he has long forgotten the issue.
The next post in the archetypes series...
Once a month, every month, she visits the team and blurts out “We should use/do/implement <insert technology of the month here>.” The monthly rhythm of the visits is tied directly to the delivery of the Front of the Magazine Architect’s magazine subscriptions and RSS feed. Anything that is boldly emblazoned across the cover of an IT related periodical becomes that month’s flavour.
The Front of the Magazine Architect is another easy one. While they are annoying distractions, her visits will be infrequent and short lived. As quickly as the idea enters her head, it will leave and you won’t hear from her until the next month. If the same technology is mentioned two months in a row, it’s probably time for you to contact the magazine editor and request that they do a better job covering new technologies.
Another in the archetypes series...
This person is one of the most feared by developers around the world. While the team is working to deliver software, he is asking them to write action reports and detailed impact analysis documents and any number of other reports he needs to grease his process and document pacifier. Though able to bend Outlook and Microsoft Project to his will, the simplest of changes, like re-scheduling a recurring meeting, will throw the Process-Heavy PM into a fetal position. It will take him days to recover from the disruption to his carefully scripted master plan for the project. Suggest that there is no need to type up the minutes for a meeting and watch the blood drain from his face as if you have just sounded the project’s death knell.
While the Process-Heavy PM can be (in our twisted minds) the most fun person on a project to toy with, he will be the one that will, more often than not, have you writing summary documents after your call to order pizza for the team. To counter him, be sure you account for every single second you spend on his process when you fill out the intricately-detailed timesheet he has requested from you.
Continuing the series on archetypes...
Beaten down by months of missed deadlines, misunderstood requirements and repeated defects, the Disenfranchised Client has lost all faith in the team’s ability to deliver and is merely going through the motions until the next budget cycle. Because of this and because she pays the bills, she is one of the most dangerous archetypes. To counter her, you’ll need strong social skills to assure her that her needs are being met, though it may be weeks until you see any progress.
The best way to deal with a disenfranchised client? Give her working software and give it to her often, dammit!
The next instalment in the archetypes series...
When the project starts the Absentee Client engages the team just long enough to build up some velocity. As soon as he perceives some progress being made, the project is quickly re-prioritized to a much lower level in his calendar. The team will wait days or weeks to hear back from The Absentee Client about the simplest of clarifications. Important meetings will be rescheduled numerous times at his request and when he does attend they will have to be cut short due something else important having come up.
One way to get the Absentee Client’s attention is to outline how significantly the lack of engagement is increasing the timeline and the risk to the project. Your best bet is to put the effects of The Absentee Client’s actions into terms of cost. Unfortunately, and this should not be undertaken lightly, sometimes the only way to do this is to address the Absentee Client’s superior.
This is a commonly known archetype in the development world. Since it's commonly known I figure it's a great place to start this series of posts.
Sporadically swooping into meetings with the rest of the team from his namesake home, the Ivory Tower Architect loves to show his mastery of software design. Whether it works in practice or not matters not to him. The rest of the development team is left to implement the grandiose plans handed down from on high, but the Ivory Tower Architect will never work directly on the code himself. Often the designs are overly complex and time consuming to implement, but he will not change them. To do so undermines his very existence.
Dealing with the Ivory Tower Architect requires a strong will, the willingness to have long winded and abstract design debates, and an almost fanatical adherence to the KISS (Keep It Simple Stupid) principle. Lucky for you the Ivory Tower Architect will only rarely grace mortal developers with his presence.
As part of writing our book, Kyle and I have spent some time coming up with archetypes that exist on many of the software projects that we've been on. Our goal is just to describe what we've seen so that people can better identify them in their journeys. Of course this had to be written in a dry, sarcastic manner. I'm going to keep updating this post with the links for the new archetypes as I post the series.
- Ivory Tower Architect
- The Absentee Client
- The Disenfranchised Client
- The Process-Heavy PM
- The Front of the Magazine Architect
- The Ex-Tech Project Manager
- The Disinterested Developer
- The Skeptic
- The "Experienced" Developer
- The Hero Developer
- The Over Protective DBA
- The Enhancing Tester/QA
- The ‘Oooo…Shiney!’ Developer
- The Possessive Developer