Nachi Nagappan: Thank you for coming here today. We... us Narayan Ramasubbu from the University of Pittsburgh from the...

advertisement
>> Nachi Nagappan: Thank you for coming here today. We are very happy to have with
us Narayan Ramasubbu from the University of Pittsburgh from the School of Business
there. Narayan has actually been working in empirical software engineering for several
years now. He's written several award-winning papers [inaudible] and FSE. He actually
got his PhD from the University of Michigan, Ann Arbor, and previously he was actually
at Singapore Management University.
>> Narayan Ramasubbu: Thanks. Thank you for the opportunity to share my work. As
Nachi was saying, I'm actually faculty in the business school very at work in software
engineering and related areas. The talk today is not about a specific project but to reflect
on my experiences traveling to, sometimes, different approaches to the same sort of
questions we have in business and in software engineering research. And it's sort of a
call for research from the community here to see that we have to build a common ground
for important questions and to alleviate inquiring software engineering strategic concerns
of a firm, not only questions about programs and project managers but that really we can
answer questions about firm strategy.
That's the sort of ambition I have for this talk, and I'll reflect on and show examples of a
few strategies where I have tried to build such a common ground. What's the motivation
for building such a common ground? And as we live today we can see that software is
fused into every wide range products and services. It's not just high tech firms that worry
about software. Banks worry about software. It's also strategically important in the sense
that when do we release an app for a banking application on the mobile phone? The
timing of it, the quality issues of it all have implications to firm strategy and your stock
prices. And it's almost -- The term is that software and IT are fused into almost all realms
of a firm's operation, firms not only like Microsoft but a wide range of services and
industries.
So given that context, all the tradeoffs we talk about in software engineering, cost versus
quality, short-term benefits versus long-term issues, all of have strategic consequences,
how we handle those tradeoffs. So it is in this context that I would like you to see the
strategies I present and how we can address questions related to these tradeoffs. And it
is my observation that there is very little common ground between the literatures that talk
about these tradeoffs. In management, especially in technology management research,
they act as if they are blissfully unaware of all advances in software engineering.
And software engineers research most of the time acts as if there is no other research
out there talking about these tradeoffs. Let's say in projects in operations management
talk about these tradeoffs all the time and they model it, but we don't talk to each other.
That's my observation, that there is no common ground and we have to attempt to build
such a common ground and there is value in it.
So the outline for my talk is in the context of whatever I have said, about this common
ground. I'll show you three studies where we have worked, and I have tried to pursue an
agenda of getting both the attention of software engineering research and also
simultaneously in technology management and how it has panned out. Let's start with
the first study. The context for this is I was invited to this company. It's not a real name
but it's a firm in the test and measurement industry. They are a fairly technology and
research-oriented firm, and by nature of their business they always stay one step ahead
of consumer products because they produce the test and measurement equipment for
these other firms to build these consumer products.
Now the context of this firm is that -- So the regular software development lifecycle: you
know, you build a product, release it to customers. And this is the vendors', the software
companies, route. Now users of this company have the situation that they can use a
product as-is or customize it extensively. The need for customization is because in the
test and measurement [inaudible] the standards evolve at a rapid pace. In this context,
this was five years ago when the Bluetooth standards were evolving rapidly. Not every
firm wants to use the same set of standards, but the products have their own limitations
so every customer wants to customize it to their needs.
In doing so they raise new requirements which the firm now has to address in the
evolution of its products. So that's the operational context of the scenario we have. The
question is: if a customer requirement comes to a manager, I could standardize it in the
next release of the product -- I could incorporate that feature in the product -- or say,
"No, we are not going to do that. If you want that need, we will give you some ways to
implement that feature for you alone." Whether you have to standardize it or let go and
let people hack your product to build their own custom version is the question.
So the dilemma is you get a customer's request, what do you do with it, yu know,
whether we standardize it -- And that means it's part of our work in the software firm -- or
let people or some part of our team customize it further. Now that has strategic
consequences. The question is: if we standardize it, when are we going to release that
feature? If we let others customize it and if we get involved, at what cost are we doing
this? And if we do so for a certain type of customers, should we standardize that feature
at some point for everyone?
So that's the dilemma in the decision making for the product manager in this setting.
Now how do we give insights? I was invited to provide insights on, "What do we do in
this context?" And the questions from a research point of view are how do we model the
standardization or customization question, and how do we take decades of work on
software estimation to provide guidance on customization costs?
Those were the research questions for me. And we talked about the empirical context:
that this firm has a software test and measurement product that has a hardware
component, software component and users. So data collection on this, I was fortunate to
collect over five years of data of the product's evolution. When I was invited it was in the
second year of its release, so from the first year we collected archival data along with -- I
was there at there at this firm for about six months to do interviews and collect rich data
on the entire period of this product's evolution which was from 1999 to 2003.
Before we dive into the modeling, this is what I noticed at [inaudible] level. From a
developer's point of view most of the customizations that are requested violate
standards, that's why they ask for this customization and request that if they are part of
standard, a standard offering would have addressed those needs. Now customers have
genuine requirements that actually violate these standards. If we were to address those
standards -- These bars are the standards, no violation, simple to do stuff. And as you
can see the time to develop it and to get that into the standard features is less. Any time
there is a violation of standards request, it takes a long time to satisfy those
requirements. But there are genuine customer requirements.
The more you postpone it, if the competition offers those features, it's likely that people
are going to shift to those products. So again here right from managers to the
programmers everybody is sensitive to this thing that whether a competitor offers it or
not. So you can see that whatever a competitor is offering those requests are
immediately satisfied. What does it mean? Now the behavior of programmers and the
team here is largely driven by market forces and customers. Now from a complexity
point of view and design point of view that may not be always a good thing because you
are building products and architecturally in some sort of a logical way adding features in
an incremental fashion, in a way that we can manage complexity. But there are these
external forces that impact these programmers and teams, so under this context is
where the modeling comes in the picture of what happens when these multiple forces
are impacting.
So some of the influential factors from just observation and talking to people are: the
standards are evolving; competition puts out features that we need to satisfy; and then,
sometimes the programmers want and the team wants to preserve compatibility across
different product versions; and the nature of change these customers are requesting;
and all forms of complexity -- logical complexity, data complexity -- that's involved.
So then I went to formally model this. This is just a boxes and arrows representation of
what is undergoing on all this. The decision here is this question of whether we should
standardize or customize a request. And then all these features impact current
customers whatever we do, the constraints imposed by standards and our own product
features such as preserving compatibility; all these have an impact. And as I said before,
market forces the desire to have some specific market share or our current market share
in this market.
And then, the standard control variables that we know from prior software engineering.
So that was our first modeling strategy. Yes?
>>: There's a question [inaudible] a couple slides ago, about the competition, the
requests getting fixed faster when there's competition. You said in the bullet point below
people were sensitive, [inaudible] sensitive to staying ahead of the competition. But if
they're adding features that their competition already has, that doesn't really put them
ahead does it? That just puts them less behind?
>> Narayan Ramasubbu: Right. So the tension here, they want to add features ahead of
competition but they are held back by these constraints that if the firm or the policy of the
team is to say, "We don't break standards or we don't break compatibility with our prior
versions," those are held back because the managers decide, "No." And then,
competition releases that and then now we want to respond very quickly to those sort of
features that we missed out on. So despite having a plan to build this product, suddenly
these twists happen and then, forgetting what we are going to do right now, we
reprioritize to go after those features we missed out on. So that’s how that cycle goes
on. They are sensitive to this but we can't stay ahead of competition all the time with all
the features. Some competitors don't care about or they have different constraints for
their policies. So that's the tension we want to model and how it plays about.
>>: Did you get an understanding of why it took less time when you had competition
versus if you didn't? Like, what was the reasoning, what was the driver there of the
difference?
>> Narayan Ramasubbu: So the context is the test and measurement industry, right?
So if we don't provide -- So for example this was in the Bluetooth protocol analysis and
someone would say, "I want to know more details about it." Maybe we are not offering
that feature. Now if we really want that, to build their product, it's test and
measurements. And they're going to say, "We'll go with someone else who provides
that." So the customers will defect essentially. They won't renew their licenses of the
product and they would go with a competitor. So loss of install base -- It's not like a big
locking mechanism you have with a customer. They can switch easily. Whoever
provides the details they want, they go with that.
>>: I was just trying to get an understand of like why there was the difference in the time
to develop the features when there was competition or if there wasn't.
>> Narayan Ramasubbu: That's what we want to find out. So that was at the aggregate
level. When I collected the data and plotted it, that's what I saw. And the hypothesis for
me is maybe this firm is not making the right decisions for all the questions. So there are
all these tensions are not helping them make optimal decisions, so that's what is leading
to all these difference. And hence the formal model to understand what's going on.
>>: Do you have any insight in which scenario the firm goes for customized solution?
>> Narayan Ramasubbu: Yeah, we want to get to those insights. The approach here is
we build a model, validate it and then, we can derive insights to say under what
conditions would the firm standardize or customize.
>>: And, sorry, another question. So you're talking about standards and new features,
and they're different things.
>> Narayan Ramasubbu: Right.
>>: All right. So in the standard constraints or in the standards, where do the new
features come here or features that the competitors have, in which box do they belong to
in this model?
>> Narayan Ramasubbu: The unit of analysis is that feature addition. So you're trying to
change your current code to add a feature. So we say, "What's the nature of that
change?" Are you re-architecting the product or are you...
>>: So control, right?
>> Narayan Ramasubbu: Right. Exactly. We control for the extent of change mandated
by addressing that feature. So when I say unit of analysis in our data, the customer
request to add a feature, that's its role in our data set. So you'll have hundreds and
thousands of those requests and see how the firm responds to those things. That's the
boxes and arrows. So what is the data set?
So the pro-customization features: this team as their market share grows they tend to
customize features rather than standardize. So as their market share grows, the idea is
the install base is so huge that can't immediately standardize things because it's going to
break for someone else if you don't do a careful analysis. So it's going to delay. Hence,
"Let's just fix and do custom things for people who are requesting, take our time and
then, build it into the standard feature." Again if the request seems to violate any of the
current standards, we don't standardize those features. We let people do hacking workarounds to build those features. Again, if there is a customer who is a strategic partner,
we can't say no to them. So that also leads to custom solutions. Now every time you
build custom solutions what it means is you are increasing the code base to maintain
variations in the code base, so that's complexity for the team. So all these factors are
driving the firm to make the team make more and more variations of the code base for
them to maintain.
The factors that help them reduce that variation or some interactions factors here. So the
market share is big but if you are willing to break compatibility with previous version and
if you can move all customers to the new versions without worrying about compatibility
then that helps the firm standardize. The product obsolescence in this case is we don't
worry about previous version; let them expire. Like how in the Microsoft scenario, we
don't worry about what we did for Windows 95 anymore or whatever we add now we
don't worry about people having those previous versions. So I'll give you more. Formally
how do we do this? We calculate the probability of the firm, of the team addressing the
request as a custom feature or a standardized feature. And all these variables, we use
regressions to predict the impact of each and every variable on that probability.
So the answer after the regression that we perform is represented in this table. Now
what I would like to highlight is we have market share here. The more the market share
the probability that a request will be standardized is lower. However, you'll see as we
impose compatibility constraints and standards constraints, the probability actually flips
to be a positive one. So if normally as the market share grows, let's not hurry into
standardizing things. But as soon as some of these constraints which are policies are
imposed, the behavior of the team changes.
That's some evidence to show that there is this interaction and tension between
engineering teams and other people who are not engineering, for example marketing
folks and project management folks. And using the entire model, my recommendation for
the team for when a new custom request comes, depending on the request, is if we can
say what would be the probability of this team to address this and release this standard
feature or customization. So for the marketing folks that means as soon as they get a
customer requirement they know, they can predict, they can have a probability of, "Okay,
how is this team going to respond?" and then say whether they should relax their
policies or alter the priorities of some customer request accordingly. So that's how I sort
of helped the firm to reprioritize the way in which they can address customer requests.
So that was good to address that question of standardization and customization. But
now let's say the most optimal thing was to customize a request. The next obvious
question for a manager is to say, "What's the cost of doing that optimization? How much
of that cost should be born by us and by the customer because we're adding more
complexity to it?" The first approach for me was to use these software cost estimation
techniques that are built by Barry Boehm and the COCOMO and others. But it wasn't
totally satisfying prediction by those models for a variety of reasons in this context
because we don't have these variables we saw, the compatibility constraints or, for
example, how much we know about this customer and their context. Those variables
weren't exactly captured in the current model, so I had to build a custom model after
taking COCOMO and add all these other variables of interest.
That's the next model that I built for this firm to predict customization costs in that
COCOMO style adding in the other features we know from the first model. So here,
again, it's the same -- The contribution is to just add the contextual thread of variables
into this to help the firm predict customer costs. I don't think you would have any
questions here. The more complexity, the more the cost. If you're enforcing a particular
compatibility constraint, that's the biggest driver of cost. So if the customer asks, "We
need a feature but it needs to be compatible with all other things that we have," that's the
prime driver of how much driver it's going to have for this company.
Once we have that together what this body of work contributes is it sheds light on some
of the standardization and customization decisions and highlights the tradeoffs that are
involved in this. And qualitatively you can relate it to the tensions between the
engineering team and the marketing team on what should be the priority of customer
requests and so on. The papers are for your reference. And pursuing the same strategy
for me to have a foot in both software engineering and management, part of the work
was published in, I think, FSE and the journal that ran it was a management journal and
extended version of this work.
So that was the first starting point for me to think about how actions of programmers
have an impact on the marketing division of the firm and how the actions of these two
interact to inform important things for the firm. From there I want to move on to -- So as I
thought about it, I needed a tool to analyze these actions in way that we can shed more
light on it, to answer questions of what are the impacts of programmers on managers.
Here the concept I'm going to present first is a bit of an abstract concept and then how
we can utilize it.
The abstract concept here I want to introduce is this thing called design move. Now what
are design moves? The definition of it is any actions that a programming team makes
that alters the structure of the code. So if you're deleting lines of code and that alters the
structure then that's the design move you are making. If you are adding a component,
that's a design move. If you're refactoring the whole thing of the base of code to reduce
let's say Cyclomatic complexity, that's a design move. The notion of moves is -- Actually
I was motivated from linguistics. So in linguistic analysis they have identified this thing,
the duality between the structure of a piece of work and the moves that writers make,
how they introduce characters, how they take or kill characters, how do they move from
one part of a story to another.
So that's where the first notion of moves is there in the literature. It was picked up by
some organization theorist to see, for example, moves like you are encountering now
which is restructuring the firm. So that's the move and a manager is making that move.
Now I wanted to use that notion of moves for programmers and see how we can relate
those things. So there is this duality between what happens in a firm to the structure of
the firm. And now we can see a similar thing: the structure of code to what programmers
do with the code. So the idea is we are able to trace design moves in a team then we
can see more about what is going on in the team.
More than having cross-sectional views of regressions or cross-sectional things about
metrics, we want to be able to observe and trace these moves over a period of time. And
by doing that my claim is we can talk more about the connections between programmers
and management decisions. So let me illustrate at a very high level the design moves
concept. So here is a product, an ERP product in this case. It has a server, clients,
database and features: accounts receivable, payable, assets, pricing features. So now
let's say the team builds a configuration engine for this ERP as a product development.
That's a design move; they build it. Then they decide that in every implementation of this
product, at clients, "We will start logging the configurations of them." So these are users
implementing this product at their site and through the configuration engine, the
company starts logging how people are using and installing this software.
Now using that archival data, if a new company comes and wants to install this software,
from mining the database we can say, "Given your situation, this is the most optimal
configuration of this product." Now for ERP systems especially, installing configuration is
the biggest cost of making the people use the software. So by automating that process
this particular team is able to reduce that time by saying, "Someone else has this
configuration. That's the most apt configuration for you, so why don't you just adopt that."
That's all technical work and those are all design moves. Now there's the strategic
consequence of the move to the firm; you're able to reduce the cost of implementation
which is the biggest cost in this industry for this setting. Now you're also able to reduce
the reliance on these third party functional consultants. So let's say you are selling ERP
products. The more you are able to reduce these functional consultants from outside, the
clients are going to face lower cost of implementation then they are going to have a
positive experience with your products. So all those -- If we are to trace those moves
and connect it to performance measures here then we can see what is the value of all
that work those programmers have done to the firm. So that's the idea of connecting
design moves to performance measures we don't think of usually in software
engineering.
You know we would have thought about complexity metrics, productivity of
programmers, quality and defects. But we want to make an argument about our work as
programmers and if we connect it to these things then that becomes a powerful ability to
make a case of what type of work we want to do. That's the idea of this whole concept of
design moves.
Now there are more examples, if you want me to illustrate, of how we can connect
design moves. Do you want to hear more examples of connecting design moves to a
higher level strategy or we can just skip to more hypotheses and the data collection
part?
>>: I think examples are good.
>> Narayan Ramasubbu: Examples are good. Okay. So we saw the configuration
engine was the first design move we studied. Then, the team makes these extensions to
these features that are components that are in-built. The idea of extensions is we will
develop APIs for other people to build extensions. It need not be us. So all it requires is
good well defined interfaces and APIs for other people to build. So once we have those
extension points release, people can create their own code to generate whatever reports
they want out of this product. We did nothing for that; people can create their own
reports and people can even modify some of the processes through well defined
interfaces.
Normally if we are to do that, product managers are going to, say, push back and then
say, "Why would you want to do all of those things? You can just satisfy customers
through our standard releases." But if are to connect the design move to cycle time of
fulfilling customer requests, like we saw in the first [inaudible], if we are to reduce cycle
time then we can connect the value of this design move to firm-level performances of
cost reductions and cycle time. Now all this was a positive experience, right? So the
design moves: I purposefully illustrated only good things about this. But it might backfire,
some of the moves, as always in real life.
So here let's say we found a bug and we want of fix the bug. The minute we have all this
custom-written code, we have a problem. We don't have the source code with us. We do
not know how people have implemented all of these extension points. So a design
move, which it has positive things going on, might actually break certain things also.
Those are the negative consequences of some of the moves we make. We do not have
control over the quality of these custom things that people build which can --. Now when
people experience those things, all the errors are still going to be logged to us as the
vendor. And end-user facing trouble is going to just log it to the vendor not to their own
team to say, "What we did broke the code."
Design moves, if we study at that unit of analysis then we can see positive things,
benefits and also bad things. So in the literature, here is where the bad things are being
termed technical debt. Whatever we do, sometimes we accumulate complexity that can
prevent us from doing good things in the future.
In the evolution of this some refactoring happens in this product and we have the
programmers doing other things. So in this example of refactoring, again, the problem
we faced before of bad quality code that is causing us trouble, the developers are trying
to address that by having some sandbox, well controlled things for third-party
components in their next design move which can be good because now you are able to
reduce quality impacts of third-party applications onto your code.
So we saw three design move examples. For this piece of work I just illustrated from one
case but in the paper I report four different companies and the moves I observed over a
period of time. To organize all of these moves I created a conceptual map. On the X axis
is what I call an option value. An option value is the benefit, the potential benefit that can
be reaped from a design move a programmer makes. So this goes back to the idea of
real options theory which is, like in financial options, any component or rebuild might
have a potential benefit later on as I illustrated in the design move.
At the same time it might add to complexity and that's what we call technical debt. So
any move a programmer makes we can map it to say whether that increases the options
value of the product or it increases the debt of the product. Now if you see that in that
fashion -- It resells in four quadrants. So let me start with the easiest quadrant here.
Normally when the product is new early in the lifecycle you'll see not many options, not
many features built in the product, but the product is also relatively less in complexity. So
we have an option constrained state: low on value, low on debt.
And the other quadrants here, everybody wants to be on this quadrant. Right? We want
a product that is rich in options but low on technical debt because that's the most
desirable state. But we can't be in that state all of the time because of all the tensions we
talked about. So we might move across these states. When the debt is high and the
options are high, what we have is a situation of lock-in. We have good options but the
complexity is so high that we constrained by our debt. Here is a bad state; our
complexity and technical debt is high and we don't have many options to move around. It
is a nightmare for programmers to be in this state. Most desirable state, we often might
end up here because we build rich features but end up in complexity. So for all the firms
I studied over, I plotted the moves they made on this map.
This is the raw data I observed on the moves: what they did, what was the state of the
design capital. It's difficult for you to read but to show that it was systematically done for
all of the design moves. The resulting picture is something like this.
>>: Like what was the scale, how did you measure? It seems kind of like a -- It seems
like a hard thing to quantify.
>> Narayan Ramasubbu: Right. So that's one of the challenges. We need to have -- We
can do this only after time. So now I had the luxury to go back in time and then say, "I
see that the structure of the code has changed. What did you do to the code?" And then,
we analyzed each of those major changes to the code to...
>>: [inaudible] why has the code changed or something concrete [inaudible]....
>> Narayan Ramasubbu: So the first thing is lines of code. When I [inaudible] two
versions and see big changes then I reason about it. What is that? Similar deletions of
components also draw my attention. But then we need programmers to help us identify
why this is, so that's why this is a messy process, identifying the designs. And there is
some aggregation too. Like when I see two or three things going on at the same time, I
lump it into one design move. So they might have built two or three features on the same
bunch of changes to the lines of code and it's very difficult to segregate that.
This is the resulting picture of that analysis of the moves. You'll see here the circling
here means that the product team is trapped in this state. They're trying to get out. Now
let's take this company which is in a cell phone apps situation. This is clearly a bad state
and it's good that the firm is never in this state. They start with low options and low debt
and then they immediately, by this move they are making, go to the high quality state
which is good options and low on debt.
But it's transitionary. As they start adding more features their debt increases but the
options don't. Now from this state they keep on -- whatever they do, it's difficult to get out
of that state for this team. So when we do the circling, it requires tremendous
investments in this move to get them back on this state. So we all these transitions that
happen here show the behavior of the team and the interaction of where they putting
money in to resolve the situations. So what this helps -- This is a historical perspective.
We can plot such a map for Windows or Windows Phone and say, "Well, historically this
is how we've been transitioning around." Well, what's the goal for your team? At what
state are you right now? Where do you want to go?
Then, we can reason about what sort of investments you have to make to get the team
going there. So -- Yeah?
>>: In the fourth figure...
>> Narayan Ramasubbu: Yes.
>>: Why have they started with [inaudible] like low quality?
>> Narayan Ramasubbu: Yeah. So in that company basically they acquired a product.
>>: I see.
>> Narayan Ramasubbu: From someone else. After the acquisition they realized that
actually, "This is a bad situation." And it was a merger case where two firms were
merging and then their products, they are trying to consolidate. So your starting point in
any of these cases might be in different places depending on which window we are
studying for the product.
>>: And how did you measure the value? And were you measuring the value of each
move or just like the total value of the product?
>> Narayan Ramasubbu: No. For each move. Now how do we assess the move? I
illustrated the design moves and everything had a strategic consequence, right? So like
if we had a custom extension point we can significantly correlate it to a reduction in cycle
time. Now I asked the managers, "I see this correlation, is that high value or low value
for you?" because I don't know in their situation whether that was a significant thing or
not. I asked the managers to record whether it is high or low value by giving them
evidence. Some of it is they don't know because it was a long time ago, so I give them
snippets of my evidence from data and make them record it. But the debt I can record
because I see how much complexity is in-built.
>>: Do you measure debt in terms of bugs? Or how?
>> Narayan Ramasubbu: No, debt is in this case -- So the definition here is how much
does it prevent the team from adding a feature. So it's increase in complexity. The
quality -- We can correlate debt with quality as I will show in the next study. But for this, I
did not do that just increase in complexity basically on the code base.
>>: I don't know if this question has been asked but in this diagram, is it significant that
some of your -- or is it meaningful that within each quadrant it's a little bit closer
[inaudible] axis?
>> Narayan Ramasubbu: No, it is not. It's just a representation. It doesn't matter where
you are here. That's just my error of starting somewhere. It has nothing -- All of this is
equal state space. Only the transitions matter.
>>: And then in your analysis did you have a sense that something would be further or
closer to the axis? Do you think that would be meaningful to really dig into that more or -?
>> Narayan Ramasubbu: Yeah, so that's the future work. So right now this is a
qualitative piece. Although it's based on data, I haven't done any formal modeling of that.
>>: You kind of give a rough estimation.
>> Narayan Ramasubbu: Exactly.
>>: [inaudible]
>> Narayan Ramasubbu: Exactly. So it's the binary division, low-high. I haven't done
more work to say relative low or relative high. That's what we want and that's what I'm
encouraging. I'm telling it as a common ground. If we do that then software engineering
research can tell me exactly how we can do that and we can inform values for
managers.
>>: Is it on purpose that they all finish as -- the story ends well? They all have high
quality and low debt?
>> Narayan Ramasubbu: Yeah, so all of these four firms that are here, like each of
those four firms are successful firms. And in this circle story here all of them want to
build a product platform, and all the product platforms I observe are all successful
platforms. Like this company has a mobile application platform that's hugely successful
and so on. That company is a services company that's hugely successful. That's the
indication that all of them ended up at the time I ended my study in successful states but
they did not have the similar paths to success. So the idea here is that the paths to
success informs us about something, the struggles that they face to get there. So if you
see this company, they go in cycles. It's cyclical path towards where they want and so
on.
So if we extend our window of observation, everything is transitioning. There is no one
permanent place. Right now I can tell you right now this firm is starting phase out from its
success, the peak, and now they have to make some moves to get back to this state.
>>: So I was sort of asking this as in, can you identify a company that has probably
some design issues because they picked the wrong features and they keep yo-yoing
between low quality with lots of debt, little debt, lots of debt, little debt. And it just yo-yos
[inaudible]...
>> Narayan Ramasubbu: So that's that situation here. Like whenever this firm -- I call it
a debt averse firm. Like, whenever they sense that their technical debt is increasing,
they want to get back to some other state. But remember because of so many tensions
you can't just avoid [inaudible] so they go back and forth. But I don't have in my sample
where the firm just goes here and doesn't transition to the right side. That clearly shows
this is not a successful team and like any research that's the hardest thing for them to
disclose to me and let me observe. And when I went in here where all were successful
and I tell them, "Let us observe your history," they're okay to let me do things. That's a
limitation of this research.
>>: Is there concern about kind of self-reporting bias? I mean [inaudible] qualitative and
stuff like that. You know, everybody wants to feel probably like you're in a better place
than you used to be. Like it's pretty rare for a company to say, "No, we're terrible. We
used to do things great and now we do them really crappy." But when in reality that may
actually be the case. Like companies don't stay healthy forever; eventually they degrade.
And you mentioned the [inaudible] company was starting to lose their ability to stay on
[inaudible]...
>> Narayan Ramasubbu: Right. So...
>>: Like they still probably self-reported. It would take kind of hindsight for them to ever
see the defects when they actually recovered. So how does that impact kind of the bias
of these kinds of reportings?
>> Narayan Ramasubbu: The limitation here is in my window of observation, the ending
point was successful. That's what you're all pointing to. But in their history there is not
bias. Like you will see that people -- These two firms especially are in the worst states in
these places. And in hindsight I was able to point to that fact. Now if I had gone while
that was happening, maybe it's difficult for me to identify that. So collectively I don't see
that the sample is bias in that perspective, but the limitation is, yes, this sample does not
have a complete failure where the firm is just stuck in this quadrant all the time and not
able to move.
>>: Like kind of how I -- It's somewhat relative, too, really. Over the course of five years
the company may be in a high-quality state and observe a high-quality but three years
down the line they may realize that that was insufficient. And they're even more
successful and so they move from what they considered at the time as high quality to
even more high quality. So their hindsight has not changed their view. It looks like
[inaudible] like how can you tell whether [inaudible] high quality or low quality when the
actual [inaudible] shift from where they are.
>> Narayan Ramasubbu: So we cannot. And that's why there's, you know, the desire to
do more formal modeling between different states in this quadrant. It's all relative. But we
need to start somewhere of conceptualizing all of that. And I'm hoping this is a good
starting point, to see things like this. And then, now we can encourage research to say,
"Where's the next step after this?" How do we do things to understand those
transitioning factors and dynamics behind it? And I'll show you a little example in the
next study where I am attempting to do such a thing.
>>: My idea was just that you take it purely from a subjective perspective, where did the
firm see itself? Did it see itself in a high quality state? And that affects its choice to try to
move what it perceives as a higher quality state. Like if they feel like they're stuck...
>> Narayan Ramasubbu: Right.
>>: Or you can take it from a more, I guess, objective perspective if you have a concern
about the criteria for what is high quality.
>> Narayan Ramasubbu: Right. Now the only qualification for what you saying is that
this is not totally subjective, like the technical debt. I drew a line to say from the
complexity what is low and high, but that doesn't mean it's subjective. We did observe
code bases and we built from there. And this codification of low and high is arbitrary now
of what is low and what is high, but it is built upon evidence from data. So it's not
arbitrarily done, you know, like that. But we can build more relatively robust metrics to
formalize this classification.
Okay, so now from a theory point of view using that and these transitions we observe
here, I laid out some propositions. So when do programmers reduce debt? When do
they, you know, increase options? So based on just qualitative observations we can see.
The question here is I used the term resource munificence. What this means is there
enough money for the programs to do slack effort or is it a conducive environment? So if
you want to reduce technical debt that means you have to invest in refactoring which
doesn't yield immediate business benefits for a product manager, right? So do they give
the slack to do that refactoring?
We can say under this condition of high or low availability of resource and capability of
the team: if a firm is stuck in this situation, how would they respond? So if they have
good resources but low capability, these four teams seem to create more options without
reducing debt which is still better state. That means they would go here into this state
but not the perfect idea. Always we want to end up in that quadrant of low debt and high
quality. Again, the limitations of these propositions are based on qualitative observations
of the four cases. But in the future what I want to do is use data to validation these
propositions and hypothesis in a better way.
Another thing that I want to point out that's an interesting dynamic in this is your ability to
transfer debt. Now what does this mean? We build a product but we transfer the
responsibility to reduce complexity to other partners. For example, a technique that one
of the firms uses is they build a product and let the open source community deal with the
product. To further build new variations they'll let the community reduce the debt for
them. So that's the strategy of this firm, to remain in that state, to build products very
quickly and then let maintenance, through either open source communities or with
clients, -- they would transfer the responsibility to them. They don't take any risks. So
how do you stay in that position is a strategic question. So I call that, does the firm have
the ability to transfer debt? To remain in that state it's impossible to always keep debt
low. So whenever it accumulates, what's the strategy to reduce it or transfer it to
someone else?
And the paper, I don't have a software engineering paper for this but the paper is
published in a management journal, this design capital map on which you can observe
these transitions. I think it's an interesting idea for the software engineering community.
Now I want to finish the talk by highlight a most recent work of mine based on the
previous conceptualization of debt. The idea is to build a model of technical debt, an
evolutionary model that can highlight costs and benefits of technical debt. Think about
technical debt like taking a mortgage. You know, you buy a house, have a mortgage
that's debt, but at the same time you enjoy the house; that's the benefit. Instead of
having this only negative connotation about technical debt, I think we need to start
thinking about debt in terms of benefits and costs. So that's my aim to build a model like
that. The starting point for the model is this widely accepted and validated pattern of
customer adoption. So it generalized the results in lots of management studies across
products ranging from shoes, iPods, refrigerators. Anything consumers are involved in
seems to follow this pattern, an S shaped curve.
There is a point in time in the evolution of a product where this sudden growth happens
and that I call the take off point. And an inflection point is exactly the halfway of this S
curve; it's just a theoretical point. But the saturation is an observable point where the
interest in the product, the growth tapers off. So that’s the generalized that we know.
The argument is, can we apply this for software products too and for software
engineering? If we know the products are going to grow like this, features are going to
grow like that in a product then we can make use of that pattern to assess the cost and
benefit of debt. The theory I have here is: so this is the same S pattern that we saw. Now
imagine a team is taking on big time technical debt in order to deliver features faster
than this curve. So we want to expect that we're accumulating debt here, but you have to
pay interest on this debt some time. Now how we would model that is we are expect
because of this technical debt, high technical debt you're ability to keep on adding
features is not going to grow all the time; it's going to taper off far more quickly than you
would have done on this pattern.
So if we model it like that then this the benefit of your debt but that's the cost we'll have
to pay for taking on this debt. Conversely, you’re a firm that does not like technical. You
don't want to accumulate debt. In real life you're not fulfilling product growth as much as
the market is because you don't want to take this debt. Now that's the cost of the debt
because you're constantly lower than what the market is doing. But the benefit you could
realize if suddenly you shift your strategy at some point in time towards the end of the
product growth, your complexity is so low that you can start adding features in a faster
way. If we are able to do that then you could realize the benefits of this late surge in
features.
So that's the theory. And the S curve formally would be a logistic curve, and these
curves can also be modeled as logistic curves or an exponential saturation or that one is
an exponential growth curve here. Once we have these distributions now then we can
model and study products. So the one I studied empirically is this ERP product. The
base version is put out by the vendor. I observe across their customers some are low
debt customers; they don't want to take debt. Those are the low debt version. And
opposite to that is we have a high debt version where customers take this base product,
hack it, customize it, build a lot of other features they want. So across a sample of 48
customers I observed I had this variation here: 11 of them are just following the base
version that means the S curve, and 15 are in low debt versions, and 22.
So I plotted all of them together to see whether we can draw some insights. This is the
base version. You will see that on the Y axis I have the cumulative functionality at any
point in time, so that's ten years worth of data. And each month I see what are the
features embedded in this product that they have. Now accumulating the features and
measuring is a tricky business. We do not know what a features is, right? So in this
product they call it a transaction. A transaction would be like a command line executable
that you would see. So a transaction, for example, would be, "Open a sales order," or,
"Reconcile accounts." If your users [inaudible] enter that transaction code and then it
would run. So cumulative transactions that can run on this software are on the Y axis.
And time? After ten years. Month-wise aggregation is on the X axis. Question?
>>: Yeah, was it something that the team would say they consider a feature or
functionality or did you put [inaudible]?
>> Narayan Ramasubbu: No, the customer. So all these transactions are -- They record
those transactions. I just take the cumulative number of transactions that are available.
This is not a programmer point of view but an end user's point of view like how we would
normally do on function points. The end user facing view of functionality, not a
programmer's view of features.
>>: So that's just a total transaction, right? This curve seems a little -- I mean, it's just
kind of adoption, right? Like if they use the same feature over and over and over again
more frequently in the future then the curve goes up because you [inaudible]
transactions [inaudible]...
>> Narayan Ramasubbu: Oh, these are unique transactions [inaudible]...
>>: So the number of unique transactions?
>> Narayan Ramasubbu: Yes.
>>: Okay.
>> Narayan Ramasubbu: Like early the cumulative transaction keeps growing, that
means the product is evolving and programmers are adding transactions. But it hits the - You know, the slope of the curve changes over a period of time. It's slowing down. So
that's our S curve that we could -- You can model this curve using the same logistic
curve.
>>: So I don't know at all about the domain of the product, I guess, but could it be that -So is one thing that sort of debt, right, like they can't add anything because they just
screwed themselves, but the other one is maybe they considered the product was just
complete in some way or like as a whole. And they were like...
>> Narayan Ramasubbu: That's right here. That happens there, right?
>>: But is it because -- Like will they stop adding features because their product is
complete and they don't have debt and they just keep a couple people for maintaining it
or adding eventual plugins? Or is it because they took so much debt before that now
they have [inaudible] a year to refactor and take over again?
>> Narayan Ramasubbu: Yeah, so we'll see that.
>>: Okay.
>> Narayan Ramasubbu: But this is the base version, like how the vendor is putting it
out. So most likely this saturation here is like how you pointed out. The vendor feels the
product is complete, any more needs to be a new version of the product. "We are done
with this, and for the next three or four years we are just going to maintain the product."
So 11 of the customers in our sample just followed the pattern. They don't do anything
more than what the vendor does: take it, use it. You can build your transactions. That's
where the debt comes into play of how you build those transactions.
So these were the vendors and you'll see the 11 who closely follow the vendors' idea.
Now let's move on to -- Here is a pattern of customers' installations. It goes like this. This
curve is a vendor and the 11 customers I showed you. These are the variants that are
above the curve here up to the inflection point and after that they are on the lower things.
So here, like you pointed out before, an inference on this pattern could be that why this
is tapering off early and remains below the average product. Now we do not know
exactly why but one interpretation could be that they are burdened by debt possibly.
>>: Or that they consider it complete.
>> Narayan Ramasubbu: Yes. Now...
>>: By complete you really just mean that the return on the investment for new features
no longer makes financial sense so they stop adding features.
>> Narayan Ramasubbu: Exactly.
>>: It's too expensive or they don't enough value.
>> Narayan Ramasubbu: So it's good that you are all thinking about that because that's
the next state of analysis. So right now I'm just showing patterns and then, we can say,
"What about quality? What about customer satisfaction at different points in time?"
>>: So in that base version in that case they're getting the features from the original
vendor that's [inaudible] that. And in this case they're not able to roll out those new
versions...
>> Narayan Ramasubbu: Yeah.
>>: ...at some point? Oh, okay.
>> Narayan Ramasubbu: Because roll out is now your -- Remember I said transfer debt.
So the vendor is not going to do anything for you. You hacked the product. You add debt
now; now it's...
>>: You're on your own.
>> Narayan Ramasubbu: ...your responsibility. In my base versions I have more
features but now you're not able to use those new features because you're on a different
trajectory. You have to undo all the way here and then build up to go there, if you want to
do that.
But here they did get benefits, right? They build far better than the base vendor could do
using their platform. So that was the idea of there is a benefit to debt. Now we have to
quantify that benefit. How do we do it? That's the next question.
>>: Right. Because, I mean, immediately I originally thought that your curve was like
market share or...
>> Narayan Ramasubbu: No, no. This is just cumulative transactions.
>>: So then you don't know at this point whether one of those is like because they
hacked it they got a big jump and they [inaudible].
>> Narayan Ramasubbu: I can make informed guesses and I'm going to do that in a
minute. So the other story just for -- If I plot everything in one, it's going to be crowded.
That's the only reason I'm splitting it into different things. So here is another group of
customers. You'll see that they are below. That means they choose not to install those
components for a variety of reasons.
>>: They didn't even take the time to install the new version?
>> Narayan Ramasubbu: No.
>>: Got it.
>> Narayan Ramasubbu: So they are going to -- So in this product you can choose
components to install, like you can choose to install a Windows patch or not. You can...
>>: They didn't even deploy.
>> Narayan Ramasubbu: Yep. They don't deploy. So they don't deploy but then they
start surging beyond also. So unrolling does happen. You'll see here that they're here
but then they take it off. They unroll the features they built. So you'll see all these curves
not smooth because of all those actions. They install some [inaudible] and then, they
take it back. So here's a group of customers that go like that.
From this pattern we go for ideas like that. You know, you can calculate this area under
the curve here, area under the curve here and here to make some calculations for us to
see.
>>: Is it that they're doing some modifications? Is that how they continue to go beyond?
>> Narayan Ramasubbu: So this shift here, they made more modifications. So here
from a strategic angle, beyond this point the vendor is not doing justice to the cost. They
are not adding features for almost five years; they are just maintaining the product. "You
want to benefit from all of this then it's on your own," then those guys are able to do. And
here these guys aren't. They are even behind the basic thing available.
>>: Got it. It's understanding the person that's building the platform you're working on. If
they're investing at a large level, you scale back your investment and you just ride that
wave.
>> Narayan Ramasubbu: Right.
>>: And if they're not then you do it yourself....
>> Narayan Ramasubbu: Exactly. But you have to be in a position to do that and that's
our argument about debt has implications. So now we want to answer all these good
things you were mentioning, is it really valuable and what not. For that we need metrics.
And here it's still a work in progress. I'm going to show you two sorts of metrics: one on
quality, all the things about bugs and errors resolved, time to resolve an error, that sort
of metric; and then the customer satisfaction metric.
The customer satisfaction metric is relevant because this is answered by the end user
not the programmers. And this is collected by the vendor, not by me. So they collect
every month these surveys to see, "How satisfied are you with our product?" So, "You
want to install a new feature? First you have to answer this question and then you will be
able to install those features."
Imagine it in a case like, for installing hard patches from Windows you have to answer a
survey first before you'll be able to install any of those features. So that's how I collected
it from the vendor this satisfaction information. Then I plotted it at three points in time.
And this is my first take at the data. So I showed you the take off point, the inflection
point and the saturation point. So I'm showing you a snapshot of the data across these
three points. This is on the quality metrics, the three metrics: the processing time of
errors, number of errors that are still unresolved, and the percentage of errors exceeding
service level agreements. On all these metrics you will see that the high debt people are
doing bad which is what we would expect. The firm build a lot of debt, technical debt,
that means one of the major implications of that is quality is going to suffer and that's
what you see as the bad part of the debt.
And the low debt, the benefit is you're able to resolve it. And it's normalized; that's why
you'll see zero means they're equal and negative means they're so much relatively better
than that.
>>: So when does this graph come from? Five years down the road after launch or
fifteen years down the road?
>> Narayan Ramasubbu: Well at three points. The first is the take off point which is the
month here. So the take off point is this T1. The inflection point is here. And then, the
saturation point. So these are months for us. You'll see the month for take off is 37 and
the inflection point is about 60. And that's 73 months.
We can do better but right now in the first card I'm just doing three points.
>>: So that means that after three years the companies that go for high debt...
>> Narayan Ramasubbu: Are going to do so much poorer on quality. And they remain
poorer throughout. So let's go to customer satisfaction which tells a different pattern, an
interesting pattern. People who are in high debt initially are super satisfied; the
customers are very happy because they get new features despite poor quality. But it
starts going downwards soon. So about midway into growth, it goes down from super
satisfied to unsatisfied to totally unsatisfied. Now the low debt forks initially super
unsatisfied. No features, you know, they are not even installing good features available
on the product. The growth phase is even bad but then I noticed in the data the switch
happens that towards the end of the product line they are the most happiest people. So
that's what this data shows. Now again the limitation is I just saw three cross-sections.
We have to see more closely to see how that switch happens, what is the magic that
suddenly happens for this switch.
But what I am seeing are interesting patterns here that we need to look more closely
towards. So far what I've done is in the aim to build this connection between what
programmers are interested in and issues related to programmers to higher level
metrics. And in the first study I introduced complexity and how complexity influences
standardization and customization decisions. And then, a concept on the design capital
map using technical debt and options. And the third study takes that concept even
further to say now how do we study technical debt and the value of it. And then, I want to
go ahead and build models for options and debt together and understand these patterns
in a better way.
That's my aim going forward. Now I showed you pure cases but obviously there are
challenges. Now you'll see transitions. Here some customers are above but they then
transition to some other trajectory. So those are challenges for us in this research on
how to handle these transitions. There are more interesting transitions. So here you'll
see this is a base version. Someone is above all this but they'd refactor the code to get
back on trajectory. I don't have exact data on the three metrics to show for these
transitional cases. But all I know is all of these transitions, even if they get to the better
trajectory, are poorer. So the data shows that every time a transition happens there is a
fall in customer satisfaction even if you transition to a better state in the code.
So that's says something about the change in management and how to handle users,
but that's my current work to analyze that more deeply. That brings us to end of my talk.
And the goal, again, for my research agenda is to build this common ground of issues
and software engineering and connect it theories and questions of interest to managers.
And hopefully I get, through my research, both of the communities excited to the
concepts I'm build. Questions?
>> Nachi Nagappan: Let's first thank the speaker.
[applause]
Download