Ok, so I've noted that as your organization moves to an Agile development methodology, it will face many hazards.
Today's example - managerial misunderstanding of Agile teams
At The Job, we have a number of offshore development groups, and a few domestic groups. Due to the skill mix needed, we've split into a number of scrum teams that consist of developers on both sides of the ocean. Note that this is already contrary to the spirit of Agile, which strongly recommends a team be located in one location, but it's a common reality in many organizations, where the skills are not equally distributed.
Where we see the real WTF moment is when the offshore management decided that the scrum team split did not work with their existing managerial tree, and they peopled the scrum teams with partial developers: people who are allocated part-time to multiple teams, so that no manager 'loses' people to scrum teams. This leads to problems because a given developer can be unavailable to a team if another team has a problem that runs long and the priorities favor the other team. Which translates to a problem in one scrum team bleeds into 1 or more other teams.
Now, there are times when a specialist is needed only some of the time for various teams; DBAs are commonly like this; once the DB is in place, the DBA is only needed for a short time for new tables or indices.
But this is full-time, 10s of developers split among 2, 3, or more teams, leading to cascading delays.
So heed this warning! Let your devs work on one team!
Developing software in the Real World is different from all the theory. I'll attempt to explain my insights into this process, based on 25+ years in the industry in a number of different companies.
Sunday, January 10, 2016
Friday, January 08, 2016
What's Up, Docs?
Ok, it's taken a few incidents, but I've just got to vent about the state of developer documentation at The Job.
We have, like many places, a wiki for the devs to store documentation about our systems, tools, plans, etc. It's the usual jungle of outdated posts, incomplete references, and even chat transcripts, but the detail that got me today is the abysmal quality of several pages pages - one was the description of a library API, the other was the steps to set up a VM for testing.
The API had a list of the methods for a Java class, but the list was an image capture of a scrollbarred list - not a image in a window with scrollbars, but the static image of the list. So not only was it lazy, it was nearly useless, in that it was neither a set of linkable items, nor text that I could copy to paste into another search.
The directions page was rife with assumptions of context - that I knew what parts of the images pasted into the list referred to, again without giving me text that I could cut&paste for ease of following or modifying. I mean, I'm not necessarily the sharpest guy, but the entire point of the list of directions is to make it clear what to do, even for someone who is unfamiliar with the task.
Please, please, people, if you are writing developer documentation, make it easy for the reader to use your steps, and make sure you give full context.
We have, like many places, a wiki for the devs to store documentation about our systems, tools, plans, etc. It's the usual jungle of outdated posts, incomplete references, and even chat transcripts, but the detail that got me today is the abysmal quality of several pages pages - one was the description of a library API, the other was the steps to set up a VM for testing.
The API had a list of the methods for a Java class, but the list was an image capture of a scrollbarred list - not a image in a window with scrollbars, but the static image of the list. So not only was it lazy, it was nearly useless, in that it was neither a set of linkable items, nor text that I could copy to paste into another search.
The directions page was rife with assumptions of context - that I knew what parts of the images pasted into the list referred to, again without giving me text that I could cut&paste for ease of following or modifying. I mean, I'm not necessarily the sharpest guy, but the entire point of the list of directions is to make it clear what to do, even for someone who is unfamiliar with the task.
Please, please, people, if you are writing developer documentation, make it easy for the reader to use your steps, and make sure you give full context.
Thursday, July 30, 2015
Architects Don't Code
(Title stolen from the C2 wiki)
I just spent a few days working on a new interface for an existing system, where the new way of doing things has the interface specification being written up one of the architects, and supposedly discussed by all the stakeholders. Of course, the usual story unfolds - there is not enough time to get everyone together in a meeting, so the interface gets put together as the architect's best guess on functionality.
But the architect, by definition, is not the expert in the details of the system interface, so I've had to spend time extracting unneeded data from inputs, and providing dummy data for useless outputs. And the architect does not have the time to update the specification to include these changes.
In my opinion, it would be better for the details to be handled by the people close to them, and have the architects handle just the broad strokes. But this runs up against the custom of the higher-level abstraction people having more status, and therefore more power, with the usual empire-building and ego-stroking that accumulates over time.
I just spent a few days working on a new interface for an existing system, where the new way of doing things has the interface specification being written up one of the architects, and supposedly discussed by all the stakeholders. Of course, the usual story unfolds - there is not enough time to get everyone together in a meeting, so the interface gets put together as the architect's best guess on functionality.
But the architect, by definition, is not the expert in the details of the system interface, so I've had to spend time extracting unneeded data from inputs, and providing dummy data for useless outputs. And the architect does not have the time to update the specification to include these changes.
In my opinion, it would be better for the details to be handled by the people close to them, and have the architects handle just the broad strokes. But this runs up against the custom of the higher-level abstraction people having more status, and therefore more power, with the usual empire-building and ego-stroking that accumulates over time.
Tuesday, July 21, 2015
Lunch Epiphanies (with apologies to the movie)
I ate lunch alone today. It's somewhat rare during the week, as I have cow-orkers with whom I have lunch pretty much every day, and when they are not able to go, I typically grab some fast food and eat in my car, listening to the radio. But it's summertime, and too damned hot to eat in the car.
In any case, I was sitting in the restaurant alone, and got a serious case of either burnout or an existential crisis. I just did not want to go back to the office. And this is after one of the better weeks I've had, actually being able to spend time writing code and learning the newer IDE and project organization.
It is really not a good feeling. And The Job is not making it easier with their continual Kool-aid vending.
In any case, I was sitting in the restaurant alone, and got a serious case of either burnout or an existential crisis. I just did not want to go back to the office. And this is after one of the better weeks I've had, actually being able to spend time writing code and learning the newer IDE and project organization.
It is really not a good feeling. And The Job is not making it easier with their continual Kool-aid vending.
Wednesday, July 15, 2015
Fighting the Good Fight
It's actually been a good week for me - I've spent most of it actually writing code.
The big thing that I did was spend 30 minutes arguing with a project lead about our new API. We are putting a REST interface over an older one, and I was arguing that we needed to make the REST one better than the older one.
It does nobody any favors to do a dumb port of one interface to another. Each type of API has strengths and weaknesses, and they rarely overlap. So I was strongly advocating that we eliminate the useless artifacts required by the older API.
The part that was unsettling was that the project lead was not mentioning any reasons for shortchanging the port. I have often had a manager tell me that there was not enough time to do something differently, and in some cases that is a valid concern. But that did not come up in this discussion, which worries me.
The big thing that I did was spend 30 minutes arguing with a project lead about our new API. We are putting a REST interface over an older one, and I was arguing that we needed to make the REST one better than the older one.
It does nobody any favors to do a dumb port of one interface to another. Each type of API has strengths and weaknesses, and they rarely overlap. So I was strongly advocating that we eliminate the useless artifacts required by the older API.
The part that was unsettling was that the project lead was not mentioning any reasons for shortchanging the port. I have often had a manager tell me that there was not enough time to do something differently, and in some cases that is a valid concern. But that did not come up in this discussion, which worries me.
Tuesday, July 07, 2015
Just a small clarification on the blog
Not that I think the readers need to be told, but just in case.....
My nom de plume "Dixie Software Ninja" is not in any way related to the current (2015) controversy over the use of the flag of the Army of Northern Virginia. I use it solely as the geographic term describing the Deep South (southeastern USA), where I currently live.
(And it's my 200th post! Yay me!)
My nom de plume "Dixie Software Ninja" is not in any way related to the current (2015) controversy over the use of the flag of the Army of Northern Virginia. I use it solely as the geographic term describing the Deep South (southeastern USA), where I currently live.
(And it's my 200th post! Yay me!)
Monday, June 08, 2015
Reach out and touch someone....
I now know why Agile recommends that the entire scrum team, if not the entire development team, be co-located.
So you can walk over to the desk of the programmer who wrote code that accesses a database row, loads in all 8 columns from the DB layer into local variables, AND DOES NOT SET THE OBJECT FIELDS FOR THE LAST 5 COLUMNS OF THE ROW, and slap them upside the head.
Or so you can look over the cube wall at the programmer who was tasked with writing a C SDK so your existing applications can perform one operation to get some data into your Java ecosystem, AND FAILS TO SET HALF THE VALUES ACROSS THE INTERFACE, and dump your coffee in their lap.
Seriously, The Job has led me to believe that the offshore teams are just interested in meeting the most minimal definition of the problem they can to get past something they think is no longer a useful part of the new, cool system.
So you can walk over to the desk of the programmer who wrote code that accesses a database row, loads in all 8 columns from the DB layer into local variables, AND DOES NOT SET THE OBJECT FIELDS FOR THE LAST 5 COLUMNS OF THE ROW, and slap them upside the head.
Or so you can look over the cube wall at the programmer who was tasked with writing a C SDK so your existing applications can perform one operation to get some data into your Java ecosystem, AND FAILS TO SET HALF THE VALUES ACROSS THE INTERFACE, and dump your coffee in their lap.
Seriously, The Job has led me to believe that the offshore teams are just interested in meeting the most minimal definition of the problem they can to get past something they think is no longer a useful part of the new, cool system.
Subscribe to:
Posts (Atom)