Recently one of our developers showed me a tool with which he could create a CRUD application by only creating the database model, run a script and in return get pages full of data grids to update the data in the database. I forgot the name of the tool, but you probably know one of these code automation tools anyway.
The common USP of framework vendors these days seems to be automation, which doesn’t really make it an USP anymore.
You can create code in less time, no – you can create code in less time without coding! Sounds promising, but reality looks different.
Let’s take Django, the all new fancy schmancy web framework. You create your model in Python code, run the command line tool and get this beautiful looking admin interface. You saved two weeks worth of work and you feel pretty rich at that time, since you think you can sell this to your clients – without even coding!!! Then after two weeks you wake up as you figured out you spent the last 10 days learning how that admin interface actually works. Unfortunately your client needed a rich text editor and image upload in a relational data grid and all your efforts to convince Mr. Client that this is nonsense failed.
Code automation only works if you understand the underlying technology. Anything else would be like flying an Airbus with a single engine Cessna license.
This doesn’t mean that admin interface is useless, but we probably agree that it will be pretty useless, if you are unable to customize it. In order to do so, you have to understand how it’s written.
Code automation only helps us if we understand the code that was created, the result is customizable and the learning curve is smaller then the effort it would take to just “do it yourself”.
But there are good reasons for using a piece of code even if you don’t understand how it works underneath the cover or if you can’t see what’s under the hood. I am talking about libraries or components that you can plug into your application and use for a very specific purpose. There is nothing wrong with buying a piece of functionality. The cost of reinventing the wheel is much higher then just buying that PDF library for $99 or do you really want to read through the PDF ISO Specs and rewrite it from scratch? (If you now switched to your text editor and started hacking to proof something you might want to check this first)
Buying functionality makes perfectly sense if:
- You get as much as customization as you need to
- You can brand it your way, so it looks neat and integrated
- The time to learn the API is smaller then the time required to build your own (Yes, there is still bad documentation out there)
- There is some sort of support or knowledge available to speed you up
- It is compatible with your development environment
- It is not likeley to disappear from the market in the near future
One mistake I encountered a lot was to chose the component without proper evaluation. Even worse, without checking the functionality against the spec. As mentioned before using code automation requires to understand the code that was thrown at you after you pushed that button. Components, even though you don’t need to know how they are written or what they do in the background, still require you to learn how to use them. I watched people spending as much time learning how to use and customize a bought-in component as it would have take them writing the whole thing from scratch.
Automation is not a bad thing after all. Many software companies spent quite some time to develop tools that make their delevopment process more efficient. Automated build scripts, IDE plugins, or even reusable components can be a big time saver.
For our content management system we have written several modules, such as news, blogs, image library, application forms, video streaming integration etc. and every time we need one of them we spent 80% skinning the front-end user interface and save time for every component we can reuse on the back-end. The team knows each component inside out and every programmer is able to modify or customize the control. Better, even the designers know the capabilities of the controls and design the application according to the specification in the first place.
In any case, automation is good if you understand what it produced and the configuration of the automation takes less time then writing the code yourself. Buying components or libraries is great, if they do what you want, are easy to use and integrate into your application.