a lot of rework, which of course leads to increased effort, increased time to deliver, lower productivity, sometimes lower morale among the people who are developing the software.
Carol: Right. And I'd like to kind of ……… a couple of steps. Let's talk a little bit about what kind of caused this? Is it an educational flaw? Is it people are stupid, or what causes these problems in the first place, and then maybe talk a little bit about some of the solutions that you and your company apply to clients, and some of the things that you've seen and some of the things that can help you ……….. And then to kind of finalize with a little bit about where's the future going? Does that kind of make sense?
Frank: Sure. It sounds fine to me.
Carol: Okay. What have you seen in terms of… do you think we have a flaw in our educational system? Are we teaching programmers to just start programming and just start coding? That's what I've heard. I know when I went to school, we came out of school, and to do requirements and analysis and design, you know, we'd sit down, engineer to engineer and say, "What do you want me to code?" And the person would say, "Well, I kind of want you to code this." And you'd say, "Stop. Let's start coding." And I'd bring it back to them, and they'd say, "No, that's not anything like what I want." And I'd say, "Okay, wait. Let me start coding a little bit more. Let me fix it." Do you find that that's still the way? Or is education getting better? What have you seen?
Frank: Well, it's partly education, Carol. It's also partly a cultural thing, which really plays off of education. I think a lot of what we're teaching in computer science, computer science engineering curricula, is very very good stuff and we're teaching people very good technical skills, which is great. People need those technical skills. However, the problem with software is there's an awful lot of interpersonal skills that you need up front before you ever get to use those technical skills. So for example, if you go to computer science school and you talk to the great … programmer or C++ programmer, that's fine, but you need someone who's going to give you the basics of how do you get those requirements out of your users, how do you get them stated in a consistent fashion every time? How do you plan and manage an overall project so that it doesn't run behind schedule? There's a lot of those, what I like to call basic blocking and tackling issues, to use a football analogy, that don't get taught as well, or that aren't recognized as important as well by maybe some of the people with higher levels of technical skills. And that's really the point, is if you were going to start a football team, you wouldn't start out on day one teaching them the double end round reverse flea-flicker play, or whatever it is, all the technical fancy razzle-dazzle technical things that everybody likes to do. What you teach them on day one is you teach them how to block and tackle, you teach them how to throw the ball and catch the ball, the basics. And the bottom line is yes, those other things are really cool, really neat when they happen in a game, but by and large the team that wins is the team that can block and tackle and throw the ball