DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports Events Over 2 million developers have joined DZone. Join Today! Thanks for visiting DZone today,
Edit Profile Manage Email Subscriptions Moderation Admin Console How to Post to DZone Article Submission Guidelines
View Profile
Sign Out
Refcards
Trend Reports
Events
Zones
Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
  1. DZone
  2. Software Design and Architecture
  3. Microservices
  4. Software Architecture with Nail Guns

Software Architecture with Nail Guns

Oren Eini user avatar by
Oren Eini
·
Feb. 15, 13 · Interview
Like (0)
Save
Tweet
Share
2.01K Views

Join the DZone community and get the full member experience.

Join For Free

as you probably know, i get called quite a lot to customers to “assist” in failing or problematic software projects. maybe the performance isn’t nearly what it should be, maybe it is so very hard to make changes, maybe it is… one of the thousand and one things that can go wrong, and usually does.

internally, i divide those projects into two broad categories: the stupid and the nail guns.

i rarely get called to projects that fall under the stupid category. when it happens, it is usually because someone new came in, looked at the codebase and called for help. i love working with stupid code bases. they are easy to understand, if hard to work with, and it is pretty obvious what is wrong. and the team is usually very receptive about getting advice on how to fix it.

but i usually am called for nail gun projects, and those are so much more complex…

but before i can talk about them, i need to explain first what i meant when i say “nail gun projects”. consider an interesting fact. absolutely no one will publish an article saying “we did nothing special, we had nothing out of the ordinary, and we shipped roughly on time, roughly on budget and with about the expected feature set. the client was reasonably happy.” and even if someone would post that, no one would read it.

think about your life, as an example. you wake up, walk the dogs, take kids to school, go to work, come back from work, fall asleep reading this sentence, watch some tv, eat along the way, sleep. rinse, repeat.

now, let us go and look at the paper. at the time of this writing, those were the top stories at cnn:

  • egypt deploys troops to quell clashes
  • iraq unrest: 4 soldiers killed, 4 abducted
  • malian troops reach rebel stronghold
  • syrian rebels attack prison
  • dozens killed in venezuela prison riot
  • 3 feared dead in antarctic plane crash
  • musician held for fake loan applications

hopefully, there is a big disconnect between your life and those sort of news.

now, let us think about the sort of posts, articles and books that you have been reading. you won’t find any book called: "delivering ok projects”

and most of the literature about software projects is on one of two ends: we did something incredibly hard, and we did it well or we did something (obvious, usually) and we failed really badly. people who read those books tend to look at those books (either kind) and almost blindly adopt the suggested practices. usually without looking at that section called “when it is appropriate to do what we do”.

probably the best example is the waterfall methodology, originated in the 1970  paper " managing the development of large software systems " from winston w. royce.

from the paper:

…the implementation described above is risky and invites failure

as you can imagine, no one actually listened, and the rest is history.

how about those nail guns again?

well, imagine that you are a contractor, and here are you tools of the trade:

they are good tools, and they served you well for a while. but now you are reading about “nail guns usage for better, faster and more effective framing or roofing". in the study, you read how there was a need to nail 3,000 shingles and using a nail gun the team was successfully able to complete the task with higher efficiency over the use of the standard hammer.

being a conscientious professional, you head the advice and immediately buy the best nail gun you can find:


(this is just a random nail gun picture, i don’t know what brand, nor really care.)

and indeed, a nail gun is a great tool when you need to nail a lot of things very fast. but it is a highly effective tool that is extremely limited in what it can do.

but you know that a nail gun is 333% more efficient than the hammer, so you throw it away. and then you get a request: can you hang this picture on the wall, please?

it would be easy with a hammer, but with a nail gun:

it isn’t the stupid / lazy / ignorant people that go for the nail gun solutions.

it is the really hard working people, the guys who really try to make things better. of course, what usually happen is this:

and here we get back to the projects that i usually get called for. those are projects that were created by really smart people, with the best of intentions, and with the clear understanding that they want to get quality stuff done.

the problem is that they are using nail guns for the architecture. for example, let us just look at this post. and the end is already written.

Software architecture

Published at DZone with permission of Oren Eini, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • Best Practices for Writing Clean and Maintainable Code
  • The 31 Flavors of Data Lineage and Why Vanilla Doesn’t Cut It
  • Distributed Stateful Edge Platforms
  • Project Hygiene

Comments

Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends: