web developer & system programmer

coder . cl

ramblings and thoughts on programming...


foss scraped projects

published: 04-01-2011 / updated: 04-01-2011
posted in: development, programming, projects, tips
by Daniel Molina Wegener

FOSS is beauty, you can find a wide variety of prebuilt software solutions and many people thinks that is a fact that everything is done. Many people also sells software solutions based upon those prebuilt software solutions, but the pitfall on this is the problem that you can’t replace custom software development. You just can find components, but not at all. For example many people thinks in Joomla as replacement for a wide variety of systems. A great problem for who faces a custom software development based on that CMS platform.


custom vs prebuilt

If you are thinking to build a system based on the Web standards, probably you are wrong by picking up FOSS projects as prebuilt solutions. I don’t mean frameworks, you can use frameworks, that are very optimal while you are creating custom software. You will face problems when you try to use the wrong software piece to solve an unrelated problem. For example, if you try to use Joomla as shoping cart, probably you will face various problems if you try to integrate with payment gateways, others than PayPal, that have complex implementations, such as Web Services.

I’ve faced many times half done systems. Tipically, a customer contracts a company or a freelancer, the company sells or the freelancer a software solution that is placed as the solution for the customer problem, and then the required system is not completed. Usually the company that sells the software solution has been payed for that half made system and the company that has bought the system, do not wants to pay again. Along the time, I’ve learned that I must not take projects where the customer have some experience with those prebuilt solutions, like Joomla for a different purpose than the real target of the acquired platform.

A custom development has a cost, and it must be paid completely. If your customer do not wants to pay for that or suggest you to use certain prebuilt platform, skip that project… It will become a nightmare. You must take that project only if the acquired platform fits the real needs of your customer. Otherwise, you must build the system by yourself.

A custom development is very flexible. A prebuilt solution, is not flexible. Usually you must learn its API and how it works, and you will be in need of doing ugly hacks on that platform. If you need to create a system, use some framework, get expertise on that framework and learn its patterns very well.


facing half made projects

If you handle a half made project, try to sell a rewrite. If you are good enough to fix that project, you must convince your customer that implementing new features on that project will have a higher cost he keeps you fixing the source code. If a system is well designed, and it’s using the proper patterns — architectural ones or design ones — the code will be very maintainable. Otherwise, the code will be hard to maintain. Usually half made systems have ugly code inside.

To handle half made projects, you must have enough experience reading code to understand it without the need of any comment inside. Without documentation, and probably without support from anyone. So, if you can sell a rewrite from the start, that will be very good, since you will not require to reverse engineer the source code. If you keep fixing the source code for a long time, without good luck on selling a rewrite, try to leave that project. If you make a table with pros and cons between the current platform and the proper rewrite, you will help your customer to take the right desicion about what to do with the system.

If you use a framework, you will be forced to use architectural patterns and design patterns, so the custom development will be more easy to handle and properly developed. If you get that half made project based on a framework, probably you have good luck taking projects, and fixing that project will be more easy than fixing a custom development that is based on a prebuilt platform with a different target than the customer requirements.


be practical, do not be an hero

You must setup the proper software architecture before you begin the development. For example, the worst desicion about handling DHTML is to mix two or more JavaScript frameworks. If you will use a JavaScript framework to handle client side dynamic HTML, choose one and only one framework. I have seen some sites that are using up to three different frameworks at once. The same applies to server side frameworks. I’ve seen sites that are mixing prebuilt software solutions with plain server side language and third party server side libraries.

You must not break your neck trying to implement features that do not exists in the framework that you are using, but if you find a plugin, a component or third party library that follows the same line of development which your framework uses, just do not waste your time rebuilding the solution, and do the proper integration with that component. For example, when I’ve created the jquery-validators plugin for jQuery, I didn’t found a plugin with custom validations, custom messages and supporting individual control setup, and I’ve sold that development as part of another project convincing my customer that the plugin should get feedback from Internet users, and everything happened as I’ve said. Once I’ve released the plugin, I’ve received at least 8 emails with feedback from Internet users.

In few hours I’ve fixed some bugs and enhanced that plugin. It was released with BSD license, so any user can modify the source to adapt it to his needs and also, I can continue using that plugin in my projects.


licensing issues

How can I know which lincense can I use in projects?. How can I know which license must have the third party components that I can use in my projects?.

GPL
The GPL license have a freeing behavior. Everything linked to GPL products must have the same GPL license.
LGPL
The LGPL license have a half-freeing behavior. Everything linked to LGPL products can have any license, but if you modify that LGPL component, you must release the source code.
BSD
The BSD license have an ethical behavior. You can do anything that you want with BSD licensed project — including the action of closing that project — but you must preserve the Copyright notice.

I recommend — on strictly closed source projects — to seek third party components licensed under LGPL, BSD, Apache, MIT, Python Public License and similar ones, respecting always the author of the project. For more information about FOSS licenses, you can visit the Open Source Initiative.


closing this talk

I hope that you will not face a half made project if you don’t have enough experience. I hope that you will work with the proper guidance on those projects, and you will do enough efforts to understand and fix that code. Also I hope that you will stop using third party software solutions that have a different purpose, other than solving your customer specific problem, that usually is not a trivial problem.


No coments yet.

post a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>