Live data from Hacker News

Organizing complexity is the most important skill in software development

johndcook.com

21–30 of 286 posts

Re: Organizing complexity is the most important skill in software development

#21

This is incredibly true. I once turned 60kLoC of classic ASP in VBScript into about 20kLoC of python/django including templates. And added a bunch of features that would have been impossible on the old code-base. It turned the job from hellish (features were impossible to add) to very nearly boring (there wasn't much to do anymore). So with this newfound freedom I built some machines to automate the data entry and on…

I've done a few similar things at my previous employer. Basically, taken it upon myself to write internal reporting applications, to much success. I've also done some other small things (AHK, etc..) which worked out well.

Point is, I've been modestly bringing these up during interviews when asked what I've been doing the past few years. It is always glossed over.

I don't think companies want or recognize that they want someone who will be able to handle these tasks. If they knew these tasks needed to be done, they'd hire for it, right?

Seems some of the most important things that can be done for a company may be hidden to the executive team.

Re: Organizing complexity is the most important skill in software development

#22
This pretty much aligns with my take on that from four years ago: http://berislav.lopac.net/post/13061099545/the-most-importan...

As wise men said: All problems in software can be solved with more layers of abstraction, except of the problem of too many layers of abstraction.

Re: Organizing complexity is the most important skill in software development

#23
post #10

The most important skill in operations: systematic debugging. If the developers did well at organizing, this is much easier. The most important skill in low-level technical support: diplomacy. The most important skill in high-level technical support: figuring out what people are actually complaining about. Note that many low-level technical support problems look like high-level problems, and vice versa.

I find diplomacy a highly important skill as a developer as well. Strangely I feel I've become worse at it as the years go on.

Re: Organizing complexity is the most important skill in software development

#24
I agree that it is an important skill in engineering to recognize when the complexity got too high - At that point you need to take a step back (or several steps back) and find a different path to the solution - Sometimes that means throwing away large amounts of code. It's about acknowledging (and correcting) small mistakes to make sure that they don't pile up into a giant, disastrous one.

Another thing I learned is that dumb, explicit code is highly desirable - It's better to have 10 dumb components to handle 10 different use cases than 1 clever component that can handle all 10 cases.

I think the most important skill is being able to break down problems into their essential parts and then addressing each part individually but without losing track of the big picture.

Re: Organizing complexity is the most important skill in software development

#25
No part of a system is the most important part, from a car to a huge organization, all parts are equally required to interact and hence make such system 'work'.

Having a clear functional organization at the start (and respect it throughout development) is very important, but after that is equally important to code clean and efficient code, to test, to debug, etc. Then, going up and dow on the solution stack is important to make the right decision on hardware, OS, server, services, etc.

Re: Organizing complexity is the most important skill in software development

#26

There is just a nice magical moment though when you grok what an application does and how it is organized, especially when you didn't write it, which is likely the most often case. I think a large issue is when an application has new people working on it or entirely new teams that maintain it. That is when the original authors methodology and organization of the application falls to the immediate need of the day. The…

This. Organization is in the eye of the beholder. I've seen my code bases taken over and completely reversed, and frankly I have done the same. If only there was a better way to communicate exactly what you were trying to do.

Re: Organizing complexity is the most important skill in software development

#27

Arguably, this is what higher level languages like Java and C++ provide. Tight organizational language metaphors that help implement design patterns in a thoughtful, consistently structured manner.

That's kind of like saying that McDonalds provides a healthy meal because they have salads on the menu. The truth is that most people still eat the burgers and fries.

Although higher level languages provide some features for organization, you still must have the discipline and know what you're doing to use them properly.

Re: Organizing complexity is the most important skill in software development

#28

This is incredibly true. I once turned 60kLoC of classic ASP in VBScript into about 20kLoC of python/django including templates. And added a bunch of features that would have been impossible on the old code-base. It turned the job from hellish (features were impossible to add) to very nearly boring (there wasn't much to do anymore). So with this newfound freedom I built some machines to automate the data entry and on…

> Sadly there's (seemingly) no way to interview people for this ability

In a recent interview, I spent 45 minutes pairing with a current employee. Our goal was to take a (contrived) piece of legacy code, clean it up, and add a new feature to it. I imagine it was a very telling experience for them, and I feel it was more useful than the whiteboarding we'd done before.

Hopefully we as an industry will keep iterating on this sort of interview.

Re: Organizing complexity is the most important skill in software development

#29
Organisational skill is actually an entrepreneurial skill. I'm learning the hard way that there are two diametrically opposing skills you need to master for both running a business and programming effectively:

1. Skills in Creating 2. Skills in Organising those creations

The thing is, the Creating part is always exciting but it's disruptive in nature. The Organising part is boring because it's about taming or tempering the creation in such a way that it can be referenced later on (just like filing your invoices, or timesheets - yuck - but necessary).

Unless you've got a systematic method to organise your creations, you will always be alone with your ideas, find it hard to resume creative chains of efforts and ultimately flounder without profit.

Both in business and in programming.

Damn right it's the most important software development skill.

Re: Organizing complexity is the most important skill in software development

#30
On the topic of organization and related to another post about good Software Development books. What are some books that teach code organization as discussed in this post. One I can think of is "Refactoring" by Martin Fowler.

What are some others?

Post reply on HN