Re: Re: Barriers to adoption / keys to acceptance
Greg Young <gregoryyoung1 <at> gmail.com>
2008-05-02 02:21:08 GMT
This sounds like a very dysfunctional organization ... I would doubt
that they would ever get themselves out of such a state no matter what
you do unless they completely clean house.
The law of two feet always applies.
Not everywhere is like that.
Greg
On Thu, May 1, 2008 at 7:15 PM, hendrypa <hendrymail <at> gmail.com> wrote:
>
>
>
>
>
>
> Scott, your post PERFECTLY represents everything I feel all this time.
> In every projects I have worked on, unfortunately no one put enough
> appreciation to design.
> Leads never care about good design, which is very reasonable
> considering he has to care more about survival in the business, ie
> letting all developers do whatever they want as long as the job is
> done ASAP, and all identified bugs are fixed. If the current way works
> well (in business term), then why care about design?
> Peer reviews tend to be intendted to spot potential bug or coding
> convention (like naming, loging, bracket stuffs). But every design
> talk would be quickly dumped as an unproductive discussion.
> If the leads don't care, it's almost impossible to even talk about
> design with the team. Any attempt to discuss TDD, DDD, and stuffs will
> just turn yourself into a weird geek talking non-sense academic
> theory, listening to whom will not do you any practical benefit.
> Problem is, people who can get the job done the quickest way possible,
> is much more higly valued both from business and technical point of
> view. The most horrible part, the defect fixer (support team) is
> separate team from the developer team. So they, the sloppy developers,
> do not have to care about paying for any of their sins. All they care
> is to finish their job in quickest way possible using mean necessary,
> committing all the sins you can name.
> Probably like u said, I just have bad luck as well. But my experience
> has always prooven that all fancy design and technique, including DDD,
> can't work in the pressure of real world business. In most places,
> definition of bad developers has always been those who can't put
> priority onto making things happen ASAP, over wasting time on keeping
> design and practice, or those caring for fixing things that are not
> exactly broken.
> Unlike TDD, DDD IMO doesn't slow down development process, if not even
> makes faster in some cases. But the learning curve does need time,
> something the team never has enough.
>
> --- In domaindrivendesign <at> yahoogroups.com, "Scott Hurlbert"
> <scott@...> wrote:
> >
> > Eric,
> >
> > Very interesting questions. What follows are just my opinion, based
> on my
> > unique set of experiences.
> >
> > Lead developers think it's quicker to hack
> > Perhaps I've just had bad luck or chosen poorly, but every lead I've
> > worked with has thought it was too slow to do team oriented design once
> > coding had started.
> >
> > I've work with a couple that would "humor" design and analysis
> before team
> > coding began but from that point forward, and on all subsequent
> releases, it
> > was hack-and-hope.
> >
> > What's most amazing was in every case these guys were pretty decent
> > coders.
> >
> > Design is relegated to initial meetings, before any big changes,
> where the
> > changes are explained and some design is talked about.
> > Great fear of changing working code
> > Redesign does not happen because the code is "working" or "in
> production."
> > When a simplifying change is suggested, the response is inevitably, "No,
> > don't do that it'll cause too many code changes - we'll have to do full
> > regression testing and that's too dangerous for this release," or
> "No, that
> > change will effect too much of the code, it's too dangerous."
> >
> > Even if you point out that the reason why the change touches so
> much code
> > is that it simplifies areas of great confusion the fear is too
> prevalent.
> > Management values working code over code that works well
> > This relates to the fear of changing working code above, but goes
> a bit
> > deeper. When asked to make a change our team is always asked to give a
> > time estimate. This method of estimation often makes it impossible
> to take
> > advantage of deeper insights to the model. If you get insights, the
> > process of going to the lead, convincing him, getting him to go to the
> > project manager, convincing him, going to the project sponsor,
> convincing
> > them, and getting them to go to their manager (whew) is just too much.
> >
> > Also, in our organization, this path requires cutting across political
> > boundaries as well as project boundaries, making such requests
> inherently
> > negotiation rich. You are as likely to be asked to give something
> up as you
> > are to have several more requirements thrown at you. And anything
> that is
> > seen as a delay - almost without exception - is impossible to get
> approved.
> > Ironically, time and time again I have seen this cause delays due to
> bugs,
> > testing, and requirement changes that could not be easily accommodated
> > because of a lack of a better model.
> > Inadequate testing makes medium/large refactoring or restructuring
> > impossible
> > Our organization bargains downward - meaning that once the
> developers set
> > a schedule, changes to scope and requirements get taken out of
> development
> > time. This causes the developers to make many changes at the last
> minute,
> > which is error prone.
> >
> > If development is late, the time is taken out of testing - rarely
> are the
> > deadlines extended - regardless of the reasons for the delay. This
> often
> > causes bugs to be found late in the process and then rework to occur
> after
> > much of the testing is done. This results in even fewer bugs being
> found.
> >
> > Also, viewing testing as a separate process, which happens after
> > development makes big changes seem more risky.
> >
> > Because of this needless pressure late in the process, trying to get
> > people to slow down long enough to rework the model is very hard.
> > Requirements process and timeline negotiations kill the
> collaboration with
> > domain experts
> > The political process where I work makes going to the domain
> experts very
> > risky. You get your chance to talk to them all you want until you
> set the
> > schedule. After that, you may discover changes that would affect the
> > timeline and that's taboo. I've actually had the lead respond to
> one of my
> > suggestions before a meeting with, "Oh wow, that's a good idea - ok,
> don't
> > say anything in this meeting because that'll be too much work. If you
> > mention it I know they'll want us to do that."
> > DDD requires a more homogeneous team
> > The teams I've been around followed the anti-pattern of making
> everyone an
> > expert in some area of the code, making large domain changes nearly
> > impossible.
> >
> > Some of this is for historical reasons and some is because people are
> > assumed to have certain skills only - "He's good at GUI." "He's a
> DB guy."
> > etc.
> > We can do that in the next release, when we'll have more time
> > For some reason, probably human nature, it seems that everyone thinks
> > we'll do better next time. Changes to the domain that seem really
> smart to
> > make, are too risky now, but "once we have this release out, we'll
> take a
> > look at that."
> > If your current design is procedural (even in java or .net) model
> changes
> > are difficult and wide spread
> > Because of everything mentioned above, a lot of the code gets
> written in a
> > procedural manner and, as you pointed out in your book, this happens
> even
> > when working with an oop language.
> >
> > Since procedural code poorly represents most domains, supporting a
> domain
> > model (as compared to a set of procedures) is naturally supporting a
> lot of
> > changes. (And in your best Mr. Mackey voice: "Changes are bad,
> m'kay?.")
> > So those are some basic reasons. What all this means in practical
> terms is
> > that my organization is not too bad at doing one release. But in
> EVERY case
> > that I've seen the second release is a disaster and the third is
> cancelled
> > or scaled back to bug fixes and enhancements of the previous releases.
> > After that, things start to get killed or phased out. However, it's not
> > usually that clear cut. Years are spent talking about a fix, but
> > inevitably someone suggest a rewrite and that is summarily killed.
> >
> > In one case, our project manager said he wanted a small (30k LOC)
> project
> > fixed because it had a lot of bugs and suffered from frequent
> crashes. I
> > studied the app for a while and told him it was not possible to fix the
> > current program. Design flaws in the code, combined with missing
> keys in
> > the database, made it impossible to fix. (In this case the
> original coder
> > had not understood event driven apps, especially under windows, and
> he had
> > coded dozens of screens that had event code which was contradictory
> - one
> > screen would move record pointers and change recordset data being
> used by
> > another screen and so on - it was a real mess.)
> >
> > I was also able to show that the bugs they thought had been
> introduced in a
> > previous patch had indeed existed since the event code had been
> written two
> > year earlier.
> >
> > I told the managers that all this needed to be rewritten and
> suggested that
> > it would take around 9 months. They threw a fit and offshored the
> > project. At the time, there was myself and another guy working on the
> > project. When they offshored it they put 5 guys on the project (because
> > they are cheaper I guess) and told them to do the fixes that I said
> required
> > a rewrite.
> >
> > That was 16 months ago and they have yet to ship a line of code
> because they
> > cannot get the bugs to go away.
> >
> > Ok, I'm done venting. Thanks for listening.
> >
> > Scott
> >
> > PS - Eric, did you get a chance to look at the message below? I may
> have
> > missed your response:
> >
> > I'm just really jazzed about the book, and I've been trying to implement
> > some of what I've learned. I was wondering if I could ask you a
> questions?
> > (At this point all assume you say yes, if the answer is no, please
> ignore
> > all below
> >
> > I'm working on a WebSphere app that has the following tiers:
> >
> > WEBAPP WEBSERVER DATABASE
> >
> > HTML->JSP->STRUTS------>FACADE->DataAccessObjects------->ORACLEDB
> >
> > The deployment of the left side is separate from the middle and of
> course
> > the right side is another server with Oracle installed.
> >
> > When this project got started we spent the first couple of months
> modeling.
> > We hadn't officially received approval to build anything, but we had the
> > team so we said, "let's take what we do know and forge ahead with a
> > preliminary model." In retrospect, what happened next was
> predictable, but
> > it caught me by surprise.
> >
> > We got approval to build and there was ONE PASS where the ideas were
> taken
> > out of the UML model and made into DTOs, DAOs, VALUE_OBJECTS, and the
> > FACADE. However, at this point the "model" was jettisoned, never to
> be used
> > again.
> >
> > Of course the problem with this was that we had left behind much of
> the know
> > ledge about dynamic behavior and we had not built a DOMAIN DRIVEN
> system. I
> > would call it more of a DOMAIN SUGGESTED system (ha ha).
> >
> > This has caused us many problems since. However, we've shipped the
> product
> > and the team has shrunk from 10 to 3 and we are now implementing
> subsequent
> > phases of the app. The problem is that without a DOMAIN DRIVEN
> system, much
> > of the domain logic ended up in TAGLIBS or in the STRUTS actions.
> Getting a
> > cohesive picture is very hard. Reuse is possible but a challenge -
> TAGLIBS
> > are of course reusable if they process generically enough, but the
> struts
> > actions tend to be very specific.
> >
> > As I go back now and work on bits of it, I'm able to improve them
> greatly
> > using many of the ideas suggested in he book.
> >
> > However, because of this tiering I'm unsure of where to put the domain
> > model. I would think it would be very difficult to split it across the
> > WEBAPP and the WEBSERVER. My initial thought was that it would go on one
> > side or the other. Since the WEBAPP tends to be more "free wheeling" I
> > started working on one of the subsystems and put a domain driven
> model of
> > the subsystem in place and it seemed to be a big help.
> >
> > Still, when I asked Sam to stop by and do a friendship code review, he
> > suggested that the domain model belongs on the webserver side of the
> wire.
> >
> > In our case the FACADE is a stateless session bean. Calls across the
> wire
> > here are many times slower (still fast though) than calls within the
> webapp
> > or the webserver themselves.
> >
> > Both Sam and I had thought we had read some suggestions on locating the
> > model in the book and we each grabbed our copies and tried to site
> to the
> > other the sections that proved our stand. We quickly realized that there
> > aren't any clear architectural suggestions about this in the book.
> >
> > I would think that anyone building a webapp would run into this.
> With .NET
> > it would be the ASP.NET server vs. .NET itself but the division is still
> > there.
> >
> > Any think you have to say on this would be great.
> >
> > I'm currently going back and reading through the minutes of the SVP
> Group
> > notes, but have not seen this issue addressed.
> >
> > Thanks a bunch, Scott
> >
> >
> > -----Original Message-----
> > From: Eric Evans [mailto:eric@...]
> > Sent: Friday, March 26, 2004 5:08 PM
> > To: domaindrivendesign <at> yahoogroups.com
> > Subject: [domaindrivendesign] Barriers to adoption / keys to
> acceptance
> >
> >
> > Here's a non-technical question I'd like to hear people's thoughts
> about.
> > What keeps the various aspects of domain-driven design from being
> adopted
> > in
> > an organization? What helps it spread? What arguments have proven
> > persuasive
> > (in either direction)?
> >
> > For those whose organizations do DDD in some form, especially
> where teams
> > operate this way, how did it get started? Has it spread within the
> > organization? What are the limits to its spread.
> >
> > Or, for those in places where it isn't used, what do you see as the
> > obstacles to its adoption? Is it resistance among developers?
> Managers?
> > Architects? Is there a lack of awareness or knowledge about it, or
> > skepticism about its value?
> >
> > Eric
> >
> >
> >
> > Yahoo! Groups Sponsor
> > ADVERTISEMENT
> >
> >
> >
> >
> >
> >
> ----------------------------------------------------------
> > --
> > Yahoo! Groups Links
> >
> > a.. To visit your group on the web, go to:
> > http://groups.yahoo.com/group/domaindrivendesign/
> >
> > b.. To unsubscribe from this group, send an email to:
> > domaindrivendesign-unsubscribe <at> yahoogroups.com
> >
> > c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms of
> Service.
> >
>
>
--
--
Studying for the Turing test
------------------------------------