views:

82

answers:

3

Based on my own experience and on experience of my friends I see that many companies have some strange ideas to develop their own frameworks and SW factories (builds skeleton of application for you). These ideas are usually based on belief that own framework will be much better than anything else available. How to deal with such ideas and how to explain that it is not always good way to go?

Why I think internal frameworks / factories are not good:

  • Budget & Resources - There is usually only some initial budget to create framework. Nobody thinks about budget needed to maintain and support framework. Nobody can even estimate budget and resources needed for maintaing. At the beginning nobody thinks about maintaining multiple versions of framework to support already existing applications.
  • Lack of experience - Framework is usually created by people without any such experience or with support of "consultants" - generally much more expensive people with similar skill set.
  • Architecture / design - any architectural problem in framework affects all applications build using this framework. Bad design decissions in framework force developers to code applications in the bad way.
  • Technical debt - bad code in framwork is technical debt.
  • False belief of silver bullet - managers believe that own framework / factory is silver bullet. All application will be written in the same way and it will be easily maintainable. My experience is that it is simple not truth. Even with SW factory each application is specific.
  • Insufficient documentation - documentation is first part affected by low budget. Framework without documentation is useless. Reflector (.NET) is my best friend.
  • Insufficient user group - internal framework has only small user group. Small user group means small experience. If I'm using public tool / framework and I have a problem, I can ask question on SO (or similar web) or just try to find answer on google. With internal framework it is not possible.
  • Policy - company policy force you to use the framework to vindicate framework costs. This goes so far that the framework is chosen before the first requirement is gathered.
  • Complains to framework are prohibited.
  • Usage of other frameworks is prohibited.

Why I think companies are doing this:

  • Arrogance & egoism - sombody in company believes that he can do it better.
  • Ignorance - ignoring existing frameworks / solutions and the fact that only good frameworks survived long enough to be popular. Ignoring user group and already available informations on the Internet.
  • Management failure and incompetence - not understanding the impact (especially long term) of this decission. Decission based on incorrect informations. Management without SW development background.

I understand that sometimes own solution or framework for specialized scenario is needed but I'm tired with all these "great internal frameworks" for creating web or desktop applications. Am I wrong? Are these frameworks really needed (.NET and Java world)? Can you provide me some example or reason why it is good to have internal framework / factory?

Edit:

Thanks for answers but I expected some advice how to deal with a problem as a developer (except changing a job) not as a manager.

+3  A: 

Generalization is bad, but here is what I've noticed, especially in large enterprise projects:

  • Such behavior is generally driven by one of few more software engineers (they usually name themselve software architect) that fall into the descriptions you wrote in your question. Everybody needs to be proud of something to have the courage to wake up in the morning. I will add that they are usually CV driven for that reason and try to apply the latest design patterns without thinking about business implications and ROI. The key is NOT to hire that kind of person (or try to coach him/her to understand business consequences of his/her choices). Trying to make them proud of working for the company instead of working on their framework may help too.

  • Missed deadlines, bugs, high turn-over tend to be solved by applying fancy methodologies (usually badly implemented) like scrum or hired highly priced consultants that will make things worse,... instead of removing (or coaching) the persons that shouldn't have been hired at the first place.

  • Removing the person in question is in most case a bad thing since he OWN the thing. So teach him/her to understand consequences of his/her choices is probably the most appropriate way to solve the problem. But to do that, you need a good manager.

So my only advice would be:

Hire better managers that understand very well both business and software development. They won't hire that kind of person or will try to teach them how to consider business in addition of pure software development. They will also understands that the most powerful motivation fuel for employees is making them proud of working for that company.

Pierre 303
Unfortunately hiring managers is out of developer control.
Ladislav Mrnka
Developer has more control that you think. For exemple, a developer can decide to not accept a job, and its related manager.
Pierre 303
Sure that is a choice. But I think it should be the last one. You can always change the job - and meet new framework.
Ladislav Mrnka
+3  A: 

In my experience the most common cause of excess frameworks is... bored developers! Uninspired developers find that developing frameworks to solve their problems is much more fun than actually solving those problems - the end result is frameworks that suffer from all of the above (because of course the developer only did the fun bits), and possibly don't even solve the actual problem (because the goal was to have fun, not to solve the problem).

The solution is tricky - its difficult to know what it is that motivates developers as everyone is motivated by different things, however motivated developers who are busy doing things that they enjoy don't see to suffer from this ailment!

That said, well thought out frameworks when properly used are definitely a good thing - However if its only going to be used internally then it might be better to instead think of it as an extension to re factoring and code re-use rather than as a framework.

A classic sign that someone is suffering from bored developer framework syndrome is when a framework is being developed to solve the general case when there isn't yet a solution for the specific case:

  • How can you know how to solve the general case until you have solved at least one specific case?
  • Until you've had to solve the general case a few times you are only guessing that a framework is even needed.

The second case of course leads to the worst sort of framework - the mammoth generic framework that is only ever used once, to solve a problem which is far simpler than the framework itself.

Instead consider these sorts of frameworks more as an exercise in "extensive refactoring" - if the framework is produced as a way of grouping and tidying common code on an as-needed basis then the framework will grow in size and complexity dynamically - having already solved the problem before you start producing frameworks is nice too as it means you are already experts in whatever it is the framework needs to do.

Finally, try to keep developers from being bored (they get up to all sorts of mischief otherwise!)

Kragen
LOL! Step 1 to keeping developers from being bored: unicorns and rainbows.
BoltClock
What's that unicorn thing ?
Pierre 303
Good point. I have never thought about it this way.
Ladislav Mrnka
+1  A: 

I would add some other reasons these things evolve, and I have seen this in more than one place: - Developer lock-in. Once you have the devs coding in a non-transferable skill set, it's harder for them to leave. - Author lock-in. Once you have several apps under maintenance dependent on the framework, you have the organisation dependent on the administrative group. - Political control. The centralisation allows the framework to become a channel for political control.

Sentinel
This is what I am afraid of.
Ladislav Mrnka
It also makes it more difficult to bring in new people, and the sort of organization that will try to lock developers in like that is likely to have fairly high turnover anyway.
David Thornley