Shouldn't software development be framed as solving problems involving people, technology and systems?
-
Note: 1. When developing software there is a focus on solving technical problems - that is different from considering complex technology, how people think and many interacting parts (systems) 2. When I use heuristics I am not referring to them in the sense of mathematics. I mean rules such as thinking of three ways a solution might fail (GW) Let's focus on scrum for this discussion. I think software development should be considered a problem solving exercise. The problems we solve need to consider complex technology (technology - webserver, appserver, html, javascript)., complex individuals/users and complex systems (e.g., workflow, multiple components). Agile(scrum) does a good job of using a empirical management method which allows/encourages individuals to use their skills/knowledge/experience. In addition teams can talk to customers and users to better understand problems or get feedback. However, agile does not give any guidance on how to define and solve problems. That is not an issue in a manufacturing environment. However, the nature of software makes problem solving non-intuitive. I think it is important in software development to highlight the importance of problem solving and provide/study methods for problem solving. I am not referring to someone saying, 'read Edward deBono, it'll help your thinking'. I think the whole point of software development is problem solving and much more needs to be done to frame this issue and then provide methods which can be used for problem solving. Consider an ATM machine (i.e., the software) which gives an error after a long series of operations. In hindsight that seems silly. However, when designing software it is important to identify dependencies to make sure users are informed asap when something goes wrong. Of course, there are many such rules/heuristics. The bigger point is to encourage developers to think of such rules and try to find such rules. (AC) If you consider the problem of modes, i.e., the software has different modes when the UI changes or means something different, e.g., editing vs. viewing. Users find this very confusing. In hindsight, it seems obvious. However, when designing software it is important to avoid or mitigate these problems. (AC) In some organizations this is partly done by BAs or product designers. However, I think it is important to define this as part of software development (who does it can come later). Again, I think this is not a 'nice to have'; I think this is the whole point of software development.
-
Answer:
I think of software development as learning. We learn when we create software. That's why agile is so helpful. We build a chunk to solve a particular problem, learn by doing it, obtain the feedback to see if we have solved the problem. We get the feedback from the customer/PO. We reflect on our process, and do it again. Agile (whether it is Scrum or any other approach) builds this feedback loop in, and helps us expose our process problems to us. As Weinberg says, "It's always a people problem." When things don't work, it's almost always a failure in the system/process, or a communication problem between two or more people. That's a people problem. It's very nice to have an approach to developing software, such as agile. But an agile approach is not enough. And one agile approach is insufficient. We need to use all of our project management knowledge: iterations, kanban, rolling wave planning, everything we know, to say, "What is the right set of tools for this set of circumstances?" Once we select the right set of project management tools, we can then say, "Do we have a team that can work together well? What does this team need?" Once we remove the obstacles for the team, now the team can learn and deliver. We might even iterate :-) We might not get it right the first time. Teams grow and change. Their tools should grow and change. But the one thing I do know is that software development is learning. If we facilitate the team's learning, software development should be possible. (I hope I answered your question.)
Johanna Rothman at Quora Visit the source
Other answers
I'm going to put on my mercenary hat and ask, "What's in it for me?" The ultimate goal of software development is to get paid. Other needs, such as artistic expression and pride of craftsmanship, are secondary considerations. There are five basic mechanisms for getting paid to write software: contracts, ads, sales, marketplaces, and speculation. Each presents a different challenge to balancing the demands of creating working software and meeting the various needs in Maslow's Hierarchy. Contracts I mean free-lance work, government work, commercial work. The incentive structure is perverse towards your thesis in two ways: First you can get paid the same for a lot less work than you are proposing by appearing to be working toward a delivery date. Second, you can't afford to solve the client's problems once and for all, otherwise they won't need to pay you to fix anything. If you want to continue getting paid, you need to deliver something that meets the minimum level of utility - that level can vary given a combinations of a good enough story about what you meant to do, sufficiently plausible deniability about the intentions of the requirements, external factors that are generally recognized as detrimental, and a decent pitch for a second bite at the apple relying on the client's susceptability to the sunk-cost fallacy. Then you need to repeat the process, and get paid again. No room here for problem solving or idealism. Yes, my tongue is in cheek to some extent, but I've also done time in the defense contracting sector and it is white-collar welfare all the way. Ads if your revenue model requires ads on the site, you are looking to aggregate eyeballs. This has everything to do with content for blogs or aggregators, and game mechanics for gamers. Frankly there isn't a huge amount of coding going into any game that relies on ads: Android or iOS apps have hugely popular frameworks in place that solve almost all those problems. The issue is really about coming up with the mechanic that will grab people, and that's not really a software problem. Sales Games (that aren't free), Microsoft Office licenses, CG graphics suites, ATMs, voting machines, magazine and book publishing software, accounting packages, SaaS offerings, etc. Also virtual services: hosting, domain registration, ad delivery (Google, Facebook, Amazon), etc. Here the incentive structure supports your thesis, at least to the following extent. Users want to use your product, not be bugged by it, and get the using out of the way (except games, they want to keep playing). The thing they all have in common is they don't want to think about software while they do it. Problem-solving of the type you are discussing is at root a way for users to ignore the software as much as possible. However, this is no way to build a brand, to delight and amaze users, and to make them clamor for more of your work. Ideally the software just works, yes, but also just works in the service of outstanding UX. People are willing to put up with tons of shit from their software as the price of outstanding UX. In this light, perfectly problem-solved software seems kind of beside the point. If we treat software development as problem-solving we are putting in the center of our field of vision some combination of the software and its attendant issues and complexities , or the raw business mechanics of the user's workflow. Neither has to do with making the magic happen. Marketplaces Amazon.com does not contract out their web marketplace design and development. I'm sure many others are in the same boat: Zappos, for instance. Zappos actually seems to be trying to get into the hosting and tech incubator business: http://about.zappos.com/zdev-tech-jobs Be that as it may, here again the incentive is to grab and hold the user's attention, pry open their wallets, and get them buying stuff off you. Websites must stay up and refrain from doing unexpected things like linking to the wrong product page or, you know, crashing, but as long as the basics are taken care of the rest is applied marketing. This is a sociological discipline with many decades of research predating the web. Speculation The larger software houses engage in massive speculative bets on unproven technologies, funded by the revenues of the older parts of the company. Startups engage VCs in smaller bets with the goal of attracting the attention of the big players. These have a variety of incentives to perfect their software. The field may be quite new. For instance, we are still in the early stages of Big Data and there are many basic research problems to solve. Getting a super-clean implementation of a new theoretical algorithm may open up new opportunities for data analysis. The software may be meta-software. Google is grappling now with the issue of how to test a lot of new software that generates the weekly production build of the build environment that produces the weekly production build of Google's search engine software, simultaneously on dozens of servers around the world. Let me repeat, they need to test software that produces software that builds their primary product and loads it directly into production each week. That sort of software issue is about as meta as it gets. One solution is to create software with the kind of simplicity and precision as NASA used for the moonshots: the fewest lines of code possible in the most visible and easily-understood fashion, so there is nowhere for bugs to hide. The UX or problem space may be novel. Here the incentive is to publicize the new thing and grow a community, usually of folks who don't care about perfect software just as long as they can talk with people (like we're doing here). So, a low-ish incentive to perfect the code. The Bottom Line Here's the bottom line, as I see it, after writing this little essay: The further you are from seeing revenue from your software, the more incentive you have to make it perfect. On Maslow's Hierarchy of Needs, the need to create perfect software is way up in the self-actualization tier. Work domains that feed the same tier are academic computer science, deep-background speculative or infrastructure programming, and... Open Source projects. If you are looking for support for your reframe, I'd look for people in these fields and run this by them, see how they respond.
Geordie Keitt
1. Using a fixed methodology or problem solving technique is almost always wrong. 2. When in doubt the user *ALWAYS* win (they are the ones paying the bills after all) 3. Never seek easy answers to design issues always seek the real weird and bizarre cases because no matter how weird and bizarre your test cases the first user to come along will do something even more weird, bizarre and baffling.
Aryeh Friedman
No. That definition is too limiting. I like this post by Mike Gualtieri from a couple of years ago: http://blogs.forrester.com/mike_gualtieri/11-10-12-agile_software_is_a_cop_out_heres_whats_next. Gualtieri says: Our craft of software development must be based on creating a continuous stream of insanely great user experiences and that's not always about solving problems for people; it can be about making life better for people even when there's not a problem today, or just giving them something fun.
Mike Emeigh
I see it in another way. Solving problems, or accomplishing a task, or fulfilling a necessity, could require software, technology and people. The center there is solving problems, software is just another tool that you use (along with the other components) for reaching that. For something more applied around computers than "solving problems", designing information systems must take all 3 components into account to work. You can take as a given technology and/or people, and think that software is the important part as seem to be the component on which you have more or less full control on how it will be or behave, but the focus is still the information system.
Gustavo Muslera
Sure it should. Wait... No, it shouldn't; that is, not only that, but more. And maybe other stuff. Or not. But really, I'm with Ajay: the question suggests that you, Nilanjan, are trying to solve some problem to which the question pertains. It's like the question "What size of unicorn should I wear?" (http://www.satisfice.com/blog/archives/67) That is, I don't know how to answer your question helpfully without knowing why you're asking; what kind of problem you're trying to solve by asking it. ---Michael B.
Michael Bolton
This question reminds me of the slide in BBST Foundations class: http://testingeducation.org/BBST/foundations/BBSTFoundationsNov2010.pdf As quoted here - http://c2.com/cgi/wiki?GeraldWeinbergQuotes "No matter how it looks at first, it's always a people problem." Instead of discussing as problems involving - people, technology and systems, I would go ahead and state it as a problem and stop there. I would be more interested to know why you would want to re-frame 'software development'
Ajay Balamurugadas
Related Q & A:
- What will be the future of software technology?Best solution by Quora
- How do I get a job in IT or Software Development if I have no experience and only a 3rd class degree?Best solution by answers.yahoo.com
- Jobs involving technology?Best solution by money.usnews.com
- Going to Vietnam this summer, what are some things I should/shouldn't do?Best solution by Yahoo! Answers
- Blackberry software problems.Best solution by crackberry.com
Just Added Q & A:
- How many active mobile subscribers are there in China?Best solution by Quora
- How to find the right vacation?Best solution by bookit.com
- How To Make Your Own Primer?Best solution by thekrazycouponlady.com
- How do you get the domain & range?Best solution by ChaCha
- How do you open pop up blockers?Best solution by Yahoo! Answers
For every problem there is a solution! Proved by Solucija.
-
Got an issue and looking for advice?
-
Ask Solucija to search every corner of the Web for help.
-
Get workable solutions and helpful tips in a moment.
Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.