• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Engineering Overkill in Java

 
Bartender
Posts: 280
12
  • Number of slices to send:
    Optional 'thank-you' note:
This is just an informal poll/discussion, if anyone is interested. I'm in a position where I need to think about this stuff a lot more lately and I want to avoid being in my own echo chamber.

After almost 30 years of Java "lessons learned" (hopefully), is it fair to say that most experienced Java devs have learned to take it easy with all the...

- Frameworks (or custom "sub-frameworks")
- Over-engineering
- Abstractions / facades
- YAGNI "just in case we need it"
- Deep inheritance structures (i.e. prefer composition over inheritance)
- Over-use or eagerness to employ "patterns" (or other trendy stuff)
- Add your own if you want

I've definitely taken a turn in recent years (5-10) to keep things more on the simple side, and only add complexity or verbosity required to follow many "best practices" when it's obviously needed. I would say it has worked out fairly well. Being careful not to over-build, and only employing popular paradigms or certain expensive 'best practices' where you see an obvious improvement from them at the very least tends to give you a smaller code base, in my experience.

Anyone feel differently (or the same)? Or are we still over-engineering stuff?
 
Saloon Keeper
Posts: 15608
366
  • Number of slices to send:
    Optional 'thank-you' note:
While I agree with the philosophy of YAGNI, I often still find myself falling into the trap of over-engineering parts of my application. Practice and preaching are two different things!

A stupid thing I do is start a project, work on it until I've spent too much time on parts that I don't need right away, create a Git branch to backup the extra bits, and then throw away everything that is not necessary for my next immediate goal.

I find that Test Driven Development helps prevent this, but the problem with TDD is that it feels like a lot of overhead if you're just trying to write a quick and dirty bit of code to prototype an idea. Of course, if you're just prototyping, then you're probably not doing a lot of engineering in the first place.

Having a backlog with user stories also helps prevent over-engineering. If you focus on implementing one user-story at the time, the temptation to design more than you need is reduced.
 
Marshal
Posts: 8880
638
  • Number of slices to send:
    Optional 'thank-you' note:
While it is inevitable sometimes, I find important not to fall into the traps of workarounds and rather stick to officially supported features, whether it is of a framework you use, or cloud provider services, or something on that line when you develop your system.

And if you find you need a workaround, that's not necessarily what you indeed need to do, worth speaking with product by explaining consequences of a, b, and c, so it may appear that that something might not that important after all - so you avoid over complicating parts of your system.
 
Lou Hamers
Bartender
Posts: 280
12
  • Number of slices to send:
    Optional 'thank-you' note:
I've become pretty ruthless about throwing away code when I start to think it's over engineered. The fact that you can toss it into git and forget about it helps a lot, and I do the same. I think as long as it's removed from the latest real branch, we're good.

Ahh... "workarounds" - i.e. monkey patches/technical debt/etc. I wish we had an easy solution to prevent that stuff. The only real strategy I know is to eliminate it after it happens, put aside the time to refactor and improve on a routine basis. Very hard to do in an environment where you're always putting out fires or on a super aggressive schedule.
 
reply
    Bookmark Topic Watch Topic
  • New Topic
vceplus-200-125    | boson-200-125    | training-cissp    | actualtests-cissp    | techexams-cissp    | gratisexams-300-075    | pearsonitcertification-210-260    | examsboost-210-260    | examsforall-210-260    | dumps4free-210-260    | reddit-210-260    | cisexams-352-001    | itexamfox-352-001    | passguaranteed-352-001    | passeasily-352-001    | freeccnastudyguide-200-120    | gocertify-200-120    | passcerty-200-120    | certifyguide-70-980    | dumpscollection-70-980    | examcollection-70-534    | cbtnuggets-210-065    | examfiles-400-051    | passitdump-400-051    | pearsonitcertification-70-462    | anderseide-70-347    | thomas-70-533    | research-1V0-605    | topix-102-400    | certdepot-EX200    | pearsonit-640-916    | itproguru-70-533    | reddit-100-105    | channel9-70-346    | anderseide-70-346    | theiia-IIA-CIA-PART3    | certificationHP-hp0-s41    | pearsonitcertification-640-916    | anderMicrosoft-70-534    | cathMicrosoft-70-462    | examcollection-cca-500    | techexams-gcih    | mslearn-70-346    | measureup-70-486    | pass4sure-hp0-s41    | iiba-640-916    | itsecurity-sscp    | cbtnuggets-300-320    | blogged-70-486    | pass4sure-IIA-CIA-PART1    | cbtnuggets-100-101    | developerhandbook-70-486    | lpicisco-101    | mylearn-1V0-605    | tomsitpro-cism    | gnosis-101    | channel9Mic-70-534    | ipass-IIA-CIA-PART1    | forcerts-70-417    | tests-sy0-401    | ipasstheciaexam-IIA-CIA-PART3    | mostcisco-300-135    | buildazure-70-533    | cloudera-cca-500    | pdf4cert-2v0-621    | f5cisco-101    | gocertify-1z0-062    | quora-640-916    | micrcosoft-70-480    | brain2pass-70-417    | examcompass-sy0-401    | global-EX200    | iassc-ICGB    | vceplus-300-115    | quizlet-810-403    | cbtnuggets-70-697    | educationOracle-1Z0-434    | channel9-70-534    | officialcerts-400-051    | examsboost-IIA-CIA-PART1    | networktut-300-135    | teststarter-300-206    | pluralsight-70-486    | coding-70-486    | freeccna-100-101    | digitaltut-300-101    | iiba-CBAP    | virtuallymikebrown-640-916    | isaca-cism    | whizlabs-pmp    | techexams-70-980    | ciscopress-300-115    | techtarget-cism    | pearsonitcertification-300-070    | testking-2v0-621    | isacaNew-cism    | simplilearn-pmi-rmp    | simplilearn-pmp    | educationOracle-1z0-809    | education-1z0-809    | teachertube-1Z0-434    | villanovau-CBAP    | quora-300-206    | certifyguide-300-208    | cbtnuggets-100-105    | flydumps-70-417    | gratisexams-1V0-605    | ituonline-1z0-062    | techexams-cas-002    | simplilearn-70-534    | pluralsight-70-697    | theiia-IIA-CIA-PART1    | itexamtips-400-051    | pearsonitcertification-EX200    | pluralsight-70-480    | learn-hp0-s42    | giac-gpen    | mindhub-102-400    | coursesmsu-CBAP    | examsforall-2v0-621    | developerhandbook-70-487    | root-EX200    | coderanch-1z0-809    | getfreedumps-1z0-062    | comptia-cas-002    | quora-1z0-809    | boson-300-135    | killtest-2v0-621    | learncia-IIA-CIA-PART3    | computer-gcih    | universitycloudera-cca-500    | itexamrun-70-410    | certificationHPv2-hp0-s41    | certskills-100-105    | skipitnow-70-417    | gocertify-sy0-401    | prep4sure-70-417    | simplilearn-cisa    |
http://www.pmsas.pr.gov.br/wp-content/    | http://www.pmsas.pr.gov.br/wp-content/    |