In 2010, a crack development team was formed inside of a Fortune 500 company. These developers promptly escaped the maximum security Project Management Office and instituted an Agile Scrum. Today, they survive as green-field developers. If you have a problem, if traditional corporate IT can’t help, and if you can find them, maybe you can hire… Alpha Team.
When Thom interviewed at said Fortune 500 company, he didn’t know he was interviewing for Alpha Team. He assumed that it would be like any other huge enterprise development shop- tedious line-of-business applications that helped ship widgets but didn’t do much more. The product and the team was sold to him as being very exciting, and he liked the idea of the stability a large company offered, so Thom joined the Alpha Team.
The team room was slightly larger than the inside of a large van. John, the team lead, greeted Thom with a sly grin. “Great to have you on the team. You’ll be sitting between Albert and Murdock. I hope you don’t have any plans for lunch- today’s our weekly team lunch. Good chance for you to get to know everyone.”
The team’s architect, Murdock, grabbed Thom for a few minutes to brief him on the application’s architecture. It wasn’t surprising: a SQL server backend, a web-service based middle-tier, and a hybrid ASP.NET and WebForms presentation tier. “This application is extremely flexible,” Murdock said. “That’s the main goal, really. We’ve got it set up so our business analysts have a lot of control over the display, so that we aren’t wasting time just changing field names around.” The exact details were simply described as “magic”, which Murdock didn’t have time to explain right then; “It’s documented, and I need to crank on a few tasks, our burndown is terrible this sprint.”
Albert showed Thom where to find the key documents. “You should start with the environment setup. I pity the fool that tries to set up their dev environment without reading that.” Thom spent the rest of the morning following Albert’s advice. The environment setup document covered how to install and configure Visual Studio. There was nothing unusual or surprising in the document, except perhaps its enthusiastic level of detail- it was over 100 pages of screenshots covering every possible screen and message you might encounter while configuring your environment.
Thom didn’t meet the product owner until lunch. “I’m sorry I wasn’t there in the morning, but you know how it is with meetings,” Templeton said. “User engagement, same old, same old, right? The good news is that I specced out a feature which we can sneak into this sprint. It should be easy for you to implement.”
“Oh, that sounds good,” Thom said. “Are you sure we should change the deliverables mid-sprint?”
Templeton shrugged it off. “Don’t think of it as changing the deliverables. This’ll just give you a head start on the next sprint. You’ll probably need the extra time while you’re learning the ropes.”
The new feature was a simple memo field on a transaction entry screen. It was a string field, with a 500 character max-length, and was informational only. Templeton had estimated it out as a 50 hour task, which seemed amazingly generous, but when Thom checked the backlog, “add a single field” was routinely estimated between 40 and 100 hours. Thom wondered: had he joined a team that padded out its estimates and spent only three days doing real work out of any given month? Or was there something much more wrong?
Thom dug into the docs and the code to try and find out. The first time he saw Albert’s documentation reference “the Data Dictionary”, he assumed it was a reference to the SQL Server data dictionary. “The Data Dictionary” kept appearing, again and again, which seemed odd. Then Thom saw this line:
The Data Dictionary should be stored at \CorpFileSrv01\d$\TransApp\DataDictionary.accdb. Contact the service desk to be granted write permissions. Use Access to edit the file.
Thom had found the “magic” in Murdock’s design, but it was dark, twisted and evil magic. For example, let’s say you wanted to add a memo field to the transaction screen in the accounting module. First, you needed to find out the ModuleID
for the accounting module by looking in the Modules
table. Then, you could go to the Screens
table and find the record for the transaction entry screen. With that ScreenID
, you could now add a record to the Elements
table, which described the field. The elements table required you to specify the DisplayName
of the field, the DataType
, ServiceName
, ApplicationName
, and DatabaseName
. You also had to create a set of records in the Validations
table, which described the validation rules which should be applied tot he field.
Once Thom had entered a set of records to describe his “TransactionMemo” field, he could then add widgets to the ASP.NET page. The label needed to have the ID lbl_TransApp_Accounting_strMemo
. “Memo” was the value in ApplicationName
. The actual text box needed to be IDed txt_TransApp_Accounting_strMemo
, while the read-only display of the memo field needed to be IDed txt_show_TransApp_Accounting_strMemo
.
The idea was that business analysts could control the DisplayName without involving the developers. Since Access databases couldn’t be versioned by source control, and since the BAs were constantly changing things in production based on user feedback, there was only one version of the Access database, shared by production, test, development, QA, etc. Since Access isn’t exactly built around multi-user deployments, or trivial things like “security”, the BAs constantly changed columns they shouldn’t, breaking one or more environments in the process.
Thom decided to keep his head down, and just do his best. After a few months, all of the team lunches in the world couldn’t help his morale, and he was ready to quit. Ready, that is, until he heard about the Beta Team. You see, in 2014, a crack development team was formed inside of that Fortune 500 company. These developers escaped from legacy code. Today, they survive as “rearchitects ”, identifying and redesigning broken applications. If you have massive technical debt, if you have an unsupportable product, and if you can find them… maybe you can apply to work on the Beta Team.