Live data from Hacker News

Why software sucks?

scottberkun.com

31–40 of 82 posts

Re: Why software sucks?

#31
post #7

There is one thing that makes software suck, and that's how far apart its developers and users are. I dream of going to SAP's offices in Germany and seeing how they book their own vacation and submit their own expenses. I can't believe they do it with their own product, or it would be slick...

the users are not the target group for enterprise software.

expenses is a great example, it needs to accomodate so many different regulations, compliance issues, legacy compatibility needs within an implementation, that it can't be more than a generic shell in vanilla SAP. so you need consultants to set it up in the first place. what do they do? ask the client's project team to tell what they want...and this is why all enterprise software implementations produce shit outcomes. non-software people having a direct say on UI/UX.

sort of like homer simpson designing that car.

Re: Why software sucks?

#32
If we invented the car, but there was no reverse and no left turn, we could say that the problems were due to poor drivers and poor planning, but the problem would clearly be that the car is not sufficiently wieldy.

You can say that software sucks because of poor programmers and poor project management, but the truth is that the code is not sufficiently wieldy. There's no way to manage the code. I can't query all places in the code where the UI interacts with a database column. Accounting systems can give you a variety of reports based on abstractions at a variety of layers, slicing the information in different ways (horizontally, vertically, etc). Software systems? Go fish.

Software sucks because at some point we got too excited about what we were doing and stopped (sufficiently) caring about how we were doing it.

Re: Why software sucks?

#33

Software sucking is a direct outcome of future user's involvement in the design process. as in: if you're writing software for a client and the client drives the specs directly, the outcome will suck balls. evidence: all enterprise software installations ever done. from ERP to CRM, the vanilla software packages might even have good UX/UI, but once implementation with all its "critical" customizations is done, you'll…

I tend to think that splitting development into API and front end solves some of this.

The main problem with "enterprise" software is that it's done cheaply, and violates levels of abstraction. Thus why it frequently requires specific versions of antiquated technology ("Our CRM requires IE6", "We can't upgrade past Windows 2000").

If it was designed properly, you could easily rip out both parts and iteratively redesign them to meet business and technical goals.

Re: Why software sucks?

#34
post #33

Software sucking is a direct outcome of future user's involvement in the design process. as in: if you're writing software for a client and the client drives the specs directly, the outcome will suck balls. evidence: all enterprise software installations ever done. from ERP to CRM, the vanilla software packages might even have good UX/UI, but once implementation with all its "critical" customizations is done, you'll…

I tend to think that splitting development into API and front end solves some of this. The main problem with "enterprise" software is that it's done cheaply, and violates levels of abstraction. Thus why it frequently requires specific versions of antiquated technology ("Our CRM requires IE6", "We can't upgrade past Windows 2000"). If it was designed properly, you could easily rip out both parts and iteratively redesi…

Seconded. The university I'm attending uses PeopleSoft (acquired by Oracle) as their ERP system, and it's horrendous. Not a week goes by where I don't hear students and faculty members openly complain about it.

I've got a live PeopleSoft installation running on a server in my apartment that I'm outfitting with code to do exactly what you mentioned - split out the back-end from the front-end. So far it's going brilliantly - for some sadistic reason, I enjoy trying to reduce the complexities of these applications.

Re: Why software sucks?

#35
Here are some thoughts I'd put into the mix.

1. Software that is built to deadline will decay, even if the developers are good. That doesn't mean that an occasional deadline is the end, but if a long-term "deadline culture" sets in, get out. A long-standing deadline-oriented culture means you should be looking to jump to another project or company before the maintenance phase starts, because (1) the maintainers will be underappreciated (that's typical deadline culture) and (2) once the original architects get promoted it will be politically impossible to point out the real reason maintainers are unable to deliver in a timely fashion, and the slowest one to run away will get eaten by the bear. It means that technical debt will never be paid off; management will never budget time, and engineers will be too busy to clean up the code. Software engineers generally lack both the political pull and the broad-based knowledge to push back on deadlines and tease out which ones actually matter and which don't.

2. Entropy. Good software is less stable than bad software. Think of this as akin to the "broken windows" theory. Once software reaches a certain state of degradation, each change, although it might fix a bug or add a feature, will make the state of the software worse. There are creeping kinds of badness that can't be caught in incremental code reviews, such as adding 10 lines to a long for-loop or a "necessary" boolean parameter to a method that over time ends up with 15 boolean parameters. Often the managerial solution (once it's far past too late) is to put maintenance of this bad system on the calendar and make it someone's full-time job (instead of a shared responsibility) but no one wants that job and often that work is allocated to marginally skilled junior programmers with no clout. Then you get adverse selection: the more skilled people in that set will leave the project (or company) before they put in enough time to become decent at it.

3. "Pay as you go" maintenance, which includes periodic fixit spells, is always better than after-shit-breaks maintenance. That said, existing tools don't make it easy to revert quality degradation. IDEs really don't perform this function as commonly used. (I'm sure IDEs can be really powerful if well-learned, but people who are dedicated enough to master IDEs are also dedicated enough to jump wholesale to better languages for which IDEs are unnecessary and often poorly-supported. IDEs, in large part, exist to compensate for weak languages.) Code can rot in any language, but one advantage that languages like Scala and Python have is that, because they have REPLs, which are far more useful than any IDE, people can interact with the software at a code-level and fix things while the code is in that "moderately bad" state before it is too late. In 2012, I wouldn't start anything important in a REPL-less language. (C is not "REPL-less" because Unix is the C programming environment. C++ is, not on account of language intrinsics but because it has departed from the small-program Unix philosophy and is used for large-object programming which requires interactivity at a code level.) At least some programmers will have enough of a sense of ownership and citizenry to clean up failing code as they work with it, but if you deprive them of the REPL, the one tool that any good programmer will recognize as essential, they won't put in the work.

REPL or Fail: http://michaelochurch.wordpress.com/2012/02/07/repl-or-fail/

4. The transition from being a mediocre to a good and then to a great engineer is about moving away from being an "adder" (someone who increases codebase complexity and functionality, thereby having an additive business value-- ignoring long-term costs of complexity, which may or may not offset that additive value) to a "multiplier" (someone with broad-based positive effects that make the whole team more productive). Contemporary tools and programming environments (Java, C++, IDEs, IOC, dependency injection frameworks) are about helping more mediocre engineers become solid adders at the expense of the really great engineers, whose creativity is constrained by less powerful languages and tools. One of the goals behind Microsoft's professional certifications, the design of VB (and later, the hijacking of Java), and the attempted ghettoization of the command-line (which good engineers like) was to make it possible for huge teams of "commodity" programmers to be productive as adders, with the hope that "someone" would have the patience to staple together the zillion classes they cranked out. From an MBA perspective, this is a win, because 2-4 times more people are eligible to be adders, but it also holds people back from becoming multipliers. The long-term problem is that a team without any multipliers will accumulate complexity and the emergent design (because you want a solid engineer doing your design work, and you can't get them in commodity-programmer environments, "design" coming out of a commodity shop will be ad hoc) will be disastrous.

5. With a few exceptions, the real fuckups in software don't seem to be blameable on a single person. They usually emerge either from jobs no one does (because the people who care about them being done aren't in power) or that too many people do (once code has been passed over by too many hands, it turns to shit).

Re: Why software sucks?

#36
Software sucks because too often developers fail to learn what the software is supposed to do.

Developers trivialize things and interpret them in far "superior" ways that lead to huge gaps of "they never told us".

Development has to move from just coding, to learning to first understand what details are being managed, and how those details interact in a system in all the stages the details/data exist.

If we believe every business is becoming a software business, the reverse is true, all software developers must understand the business more and continually develop the skills to be the bridge between business goals and technology.

How to do that?

Shut the hell up and learn.

Ask (and learn) why things are done a certain way. Uncover any competitive advantages the business has from doing things a certain way before getting on the high horse and deciding to improve the world because it's so obvious. Developers may be surrounded by non-techs, but they certainly might be surprised to see the organization itself does have processes and competitive advantages that have to be maintained for the business to survive.

Avoiding the classic SAP-esq kiss of death of doing it the SAP way, wiping out the competitive advantage (seen first hand), and then spending tons of money customizing and automating any ERP to get back to what they had before (and more) seems silly, but I can't say the 70% of failed software projects fare much better.

So, before we think we understand something, shut up.

Before we think we know better, shut up.

Before we think we can simplify things, shut up.

Before we think we can make things more efficient, shut up.

Shut up, listen to the people using the current systems and processes and learn what is working for them, or not, first.

Shut up and learn. Don't finish people's sentences. Don't tune out. Don't think things are beneath you. Don't think you've seen it before, or built it before.

At each step ask them if you understand their process correctly before going off to formulate a faster way of doing things for their confirmation.

Software has the power to uplift the lives of people and help them get more done with less effort. If you don't value this, don't make the rest of us look bad for your laziness and inability to continually develop your own skills.

Once you have learnt why the business does what it does, the way it does, it's fair to ask the question "How should it be?", and see what differs. That, is the beginning of what you should start thinking about.

Having integrated custom systems and built new ones to replace existing ones since '99, this is the single worst thing I see. Enough developers simply don't have a healthy paranoia of their understanding. Knowing a little bit about something can make developers just as dangerous as the "business" folks they judge for doing the same. It all comes out in the wash with the 70% software failure rate.

Without understanding the data of the business, how it interacts, exists in different stages, and how it needs to be input/output, and why, amongst other things is the leading contributor to software failure.

It's as much "the customer didn't know what they wanted" as "developers failed to understand their job is to go learn the business first and then design something to build".

To be clear, this can mean working in people's positions first hand to see what they're going through / facing that they can't explain to you.

It can mean seeing what state a business is in, infancy (no systems or processes), adolescence (some systems or processes), or maturity (a mature system and process, even if it's all manual).

Do those three scenarios equal one approach to all of them? Hell no.

There is, though, a few common things to keep in mind:

- Ask customers to teach you the business as they know it first. Pretend you're the next apprentice, or the owner's right hand man. Ask to be taught not just how to do everything, but why it's done that way.

- Your goal is to get more done with less effort. The software you design and build should not simply make less work for some, and more for others. It should free people from BEING the tools and systems, to USING the tools and systems. The people of an organization should do what they know best, instead of being computers, they should be interacting with each other, and customers.

I could go on a long time about this. But it's Sunday and I hope the positive wishes come through.

Re: Why software sucks?

#37
post #33

Earlier quoted context omitted.

I tend to think that splitting development into API and front end solves some of this. The main problem with "enterprise" software is that it's done cheaply, and violates levels of abstraction. Thus why it frequently requires specific versions of antiquated technology ("Our CRM requires IE6", "We can't upgrade past Windows 2000"). If it was designed properly, you could easily rip out both parts and iteratively redesi…

Seconded. The university I'm attending uses PeopleSoft (acquired by Oracle) as their ERP system, and it's horrendous. Not a week goes by where I don't hear students and faculty members openly complain about it. I've got a live PeopleSoft installation running on a server in my apartment that I'm outfitting with code to do exactly what you mentioned - split out the back-end from the front-end. So far it's going brillia…

You know, I wanted to do something very similar with my university's installation of PeopleSoft - but my intent was more focus on improving the UI and frontend than backend. But I have to ask: how did you get a copy of PeopleSoft?

Re: Why software sucks?

#38
The human race excels at engineering shovels and hammers, knives and other primitive tools; for anything more complex than that our capabilities are still pretty much infantile.

Give it a few thousand years. If we can manage to survive it, the miserable suckiness of our software will taper off.

Re: Why software sucks?

#39
post #37

Earlier quoted context omitted.

Seconded. The university I'm attending uses PeopleSoft (acquired by Oracle) as their ERP system, and it's horrendous. Not a week goes by where I don't hear students and faculty members openly complain about it. I've got a live PeopleSoft installation running on a server in my apartment that I'm outfitting with code to do exactly what you mentioned - split out the back-end from the front-end. So far it's going brillia…

You know, I wanted to do something very similar with my university's installation of PeopleSoft - but my intent was more focus on improving the UI and frontend than backend. But I have to ask: how did you get a copy of PeopleSoft?

Actually, what I'm working on involves both front-end and back-end. I've got a UI that trades data back and forth with a web service endpoint called Integration Broker within PeopleSoft. I'm focused on enrollment right now, and currently I've got a system that allows me to enroll in classes using the new UI on a live PeopleSoft install - all without touching/modifying the business logic in the delivered vanilla PeopleSoft implementation.

Re. the PeopleSoft copy - Oracle provides all of their software (and master license codes) for download for evaluation purposes through a portal called eDelivery. I had to read a few hundred pages of documentation, but after a month I was able to get all the components to talk together. I'm trying to convince Oracle to give me a non-support license so I can cover myself legally, but I'm getting the silent treatment since it's just me and I don't have the budget of a CTO lol.

Re: Why software sucks?

#40
post #18

Earlier quoted context omitted.

Those of us who have been around for a while look at what Google are doing with a sense of deja vu http://en.wikipedia.org/wiki/NeWS And NeWS was better in the sense that it used PS for everything rather than an unholy mess of JavaScript, CSS, HTML, etc etc.

It just goes to show that market forces do not care about technical merit and ultimate purpose in the least. NeWS never got traction, yet the advance of the web is inexorable. Why? Well the web is supported everywhere because it was simple. The fact that it is available everywhere (which is actually pretty amazing and unique in the entire history of media if you stop and think about it) meant people kept pushing the…

Well. You're getting downvoted for wishing death on people you've never met.

>The good news is it will evolve and improve, and soon enough the grey beards who remember that there could have been a better way will all be dead; a lot like UNIX actually ;)

That sounds like some sort of evil plot. For that matter my beard isn't anywhere close to being gray and I know that things could have been better. And if you didn't have +8000 karma I would think you were trolling.

That you're not just makes it worse.

Post reply on HN