The Secret to Extra Rapid Application Development
5/21/2013 9:17 PM
Increasing Developer Efficiency
I am a consultant; I get paid by the hour. However, unlike some of the “Big” guys, as a boutique firm, I have to provide extra value to my clients in order to make up for: not having an infinite on demand, on call, highly billable staff of “experts” in every conceivable field that I can fly in from half way around the world and put up in a luxury hotel at my client’s expense. Not only do I have to charge less, I have to deliver more for every hour I work.
I actually think this is something all developers should try to do, whether consultants or FTE’s. One reason: you get to see results a lot faster, and you can do a lot more in a given time period and budget if everyone is working as efficiently as possible.
If you are salaried, it means less unpaid overtime. If you are an independent contractor, by demonstrating higher efficiency you can usually charge more per hour than your less efficient co-contractors of a similar skill level. (If you are getting more done than they are, you appear to have a higher skill level, thus a higher rate).
Of course, I don’t have to explain why managers like efficiency. Most just don’t know how to get it. There are, actually many ways to increase efficiency and techniques can vary by situation, however here I provide advice on a technical level that will help all good programmers deliver more. You just have to follow my prime development rule:
“Only code what you must, acquire everything else.”
Now, before developers get up in arms, when I say “acquire” I don’t mean shrink wrapped products, although, seriously, do you absolutely need to build your own email server application? (OK, in a couple cases, I have, but let’s not get distracted by my insanity.)
What I mean is: buy or use 3rd party components that are highly stable and tested to do the grunt work that is necessary for every project. Code only the core business logic of your application, stuff that no one else delivers.
And, when I say buy, I also simply mean “use”. If you find one that works, open source components can be great. The only major problem with Open Source components or free components is that when you do encounter a bug, what’s the support like? If it is a critical component to your system, having good technical support is critical for a business application. So, if you want to use Open Source, look for highly active products with a good history of stable releases; or alternatively look for products for which you can buy paid support.
As a rule, for smaller components of defined scope I will use open source stuff that I can rearrange to my taste easily. This generally limits the level of complexity of the product.
One big limitation I have with many true “Open Source” products is licensing. For a number of my clients, who generally have highly proprietary systems (in Financial Services); as well as for any application I might want to sell, I may be prohibited by the licensing policies of the code. Pay very close attention to that. I know many people, companies, “cheat” on this issue, and for a while they might get away with it, but eventually it comes back to haunt you. If nothing else, cheating on an open source license is screwing over your fellow developers. Not nice, and the Karma Penguin will get you.
The Value Proposition
Here’s the basic value proposition when weighing third party component purchases, (or using free outside components) it’s quite simple. There are a few soft questions and a few hard ones.
1) How important is the feature?
2) How generic is it? If it’s not unique to your application, it’s generic.
3) How much time do you have to support debugging this feature or set of features?
4) How much time do your developers want to spend customizing small details of look and feel, vs. something that’s already highly customizable via property settings?
5) How long will it take you to develop it? How many developer hours?
· How is your overall project timeline improved by having the feature(s) NOW + a short learning curve vs. the time it takes you to develop and test it in house?
6) What is the cost of a component library that will do this for you?
7) What is the learning curve time for the library?
So for the hard numbers.
A) Add up all the developer time to develop the feature initially. Calculate the dollar value of that time.
· How much time they need to support the feature comes into play when looking at outright purchase of the component vs. buying a subscription to the product. As well as in the open source/freeware vs. paid library.
B) Subtract off the time/cost the developers would need to spend learning the library.
C) Compare it to the cost of the library.
Now for the softer numbers:
If it’s not a central feature of your application, look at how much time you have to support fixes and tweaks to that feature. Compare that to the importance of fixes you need to make to core features.
A) One huge problem that all developers have is getting lost in feature creep for features that are “nice” but not “critical”
B) The problem is, a lot of “nice” features end up taking up more support time than “critical features”
C) Good third party libraries most likely have more “nice” features already built in to them then your users have asked for. After all, all of the other developer clients of the library have users who have asked for those features already.
D) No reason to reinvent a wheel that other people have requested.
Larger library sets have lots of components and features that all work together and can often solve multiple feature requirements within your application. So, it’s usually not a question of one feature, but that of quite a few features that can start to really add up.
Doing the numbers
Let’s say we have a Winforms database application for end users. The users want to see the data in a grid format. Here are their requirements:
A) Grid must be sortable by clicking on the column header
B) Grid must be groupable by dragging a column to a group bar, we must be able to group by multiple fields, e.g. Date, Location, etc. When grouped, the grouped columns disappear from the visible column and group values are only displayed on the group row.
C) Grid must be sortable independent of grouping
D) We need summary calculations on the group level
E) We need summary calculations over the entire grid
F) Users should be able to hide or show any/all columns.
G) Users can drag and drop columns to any order.
H) User’s need to be able to save the grid layout for later use.
I) There needs to be a preview row, like in an Outlook email list.
J) Grid must support images.
K) Editing must be able to be turned on and off by the application on a cell level depending on various programmatic conditions (e.g. user permissions, row data, column data)
L) There must be drop down editors for all editable fields. Date Time picker, Memory Editor, Number Editor, Image Editor/Chooser etc.
M) Input must be able to be validated
N) Certain cell values trigger color coded flagging, e.g. Red if a value is too high.
O) Grid must be able to export to Excel with any color coding or font options.
Some of these things the default IDE grids can do, some are relatively straightforward extensions, many are not possible at all with the default grids.
How long will it take your developers to develop a grid with these features? How many of them even know where to start?
These questions are highly dependent up on the skills and experience of your developers. However, the feature requests are very generic and common for users everywhere, and really are independent of your core business logic.
All major third party grids support these features; many free/open source grids support some of these features.
Let’s say we assign a single developer who’s salary plus overhead works out to be $52,000/year (for simplicity). This means the developer’s cost is $1,000 week (actually more like $1,060 given holidays).
Let’s assume he or she is pretty good and they can do this in 1 months’ time. That’s $4,000. (By the way, I’d like to hire this developer of yours.)
So you pay $4,000 and spend a month of having this developer work on this “feature” that is not really a core part of your business logic.
OK, so let’s compare that to a typical Grid Control product. Let’s go with the DevExpress Winforms suite for $900. That includes a grid that does all of the requirements and a ton of other Winforms controls.
Let’s assume this developer needs a week to learn the controls and master them (and given that he/she was able to write this grid from scratch in 4 weeks, my guess is that they’ll need 2 days to learn DevExpress).
If they’ve spent an entire week mastering this product, I can guarantee you they can implement it into a single form of your Windows application in about 2-3 hours max, additional forms even faster. So for simplicity sake I’m going to say that 1 week mastery learning curve included the 2-3 extra hours to pop it in your form.
Going this route, you’ve now spent $1,000 on developer time and $900 on component time. You have now spent $1,900 and have the working grid in your application two weeks sooner than you would have if it had been written from scratch.
So, you’ve saved $2,100 and 2 weeks of time. Plus that developer can reuse the control, and all the other DX Winforms controls all over the place (Office Style Ribbon Bars and Menus, Dock Panels, Tabs, Calendar/Scheduler, Reporting, etc.)
BUT WAIT! There’s more. The client services team loves the new grid, now they want something like that for the Client website! How do we do that?
Well, with either a bit of foresight, I point out that DevExpress also has an ASP.Net version of the Winforms suite, and while it is also $900. If you had purchased the DXExperience Suite for $1,499 instead of the Winforms suite (Winforms included), OR, if you went for upgrade pricing later, you could get the ASP.Net and Silverlight versions of the grid for an additional $600.
So for $600 and a bit more learning time, you can have the equivalent grid on a client facing website as well as in your Winforms application. Compare that to trying to write an ASP.Net AJAX (or MVC, or Silverlight) grid from scratch.
Now, your CFO will probably say, “I’m paying for that developer no matter what, so why spend the extra $1,900?”
Well, there is the at least 2 weeks of time that you saved and were able to get the app to your end users more swiftly, making them more efficient, sooner. In addition, during that time the developer was able to do more work, possibly using the other components to make the application even easier or more powerful for the end users, thus increasing their productivity. In particular, this is not a one time savings, that licensed developer can use those components over and over again forever. If you renew the subscription for a second year, the cost is only $400/year for subsequent years for the Winforms, or $675 for the DXperience (which includes Winforms, ASP.Net, MVC, Silverlight, WPF). Not renewing just means you get no newer releases than what was available at the end of your subscription and your priority support
Most Common Uses for Third Party Components
So where are the best areas to use third party components?
· User Interface: Whether a desktop GUI or a web application, you should almost never try to do custom components yourself. You can get an incredible amount of bang for the buck with various third party user interface libraries.
o Third party libraries provide slicker, more complex and feature rich interfaces than the default user objects in most development libraries.
o They are tested, debugged and you don’t have to mess with fixing them when there are issues. You report them.
o In particular you want to use third party libraries for:
§ Ribbons and menus
§ Data Grids!!!! Nothing enhances a user’s experience more than a great grid.
· Modern grids provide a huge set of functionality in terms of grouping, sorting, highlighting/flagging that save an immense amount coding and testing time.
· Most 3rd party grids will also save to Excel format, which is a killer feature. Yes, you could export any dataset to CSV, but what about formatting?
§ Layout controls
· Dock Panels
· Tab Pages and Tab Bars
· Navigation Bars (e.g. left side of Outlook)
· Gauges, Graphs
o Yes, you do have to learn the details and properties of the controls, but if you are using purchased libraries, most have excellent documentation and technical support and forums, and the learning curve is far smaller than the equivalent building curve.
o I tend to recommend sticking with a single library for any given user interface. Except where there is no equivalent component in your main library, avoid mixing and matching libraries.
§ First that’s two overlapping learning curves for any given application
§ Second, different libraries have different look and feel and style controller methods. If you use skinnable controls, or even a distinct look for your app, mixing libraries means multiple control mechanisms to sync up the look and feel of all components. It can suck up a lot of development time.
§ Third, you could have some negative interactions between different libraries trying to do the same thing. This isn’t a huge concern if you don’t get too crazy, but it is something you have to watch out for.
· Reporting Components
o Report Writer Tools, embedded report readers, graphing tools.
o Visual Studio comes with a stripped down Crystal Reports, and it may be OK for you but it is rather limited.
§ The full Crystal Reports is actually a pretty neat app in and of itself, and at times I’ve even purchased it for System Admins to do Network/Active Directory reporting.
§ However the SDK components are not as flexible as third party reporting tools.
o Many of the 3rd party tools now allow for binders or report aggregation where you combine multiple “reports” into a master report. This is, in my opinion, huge as it’s what most people really want to do. You usually want to see multiple report, reports in your Excel workbook or PDF.
o Many of the 3rd party tools also include end user report writer tools that you integrate onto your own form. This is big because you don’t have to buy licenses for end users that need to create custom reports; further you can more directly control what data they have access to and at what level.
· Networking Components
o If you are in .Net, there are actually a lot of great network tools, particularly as you get to 3.5 and beyond. However, the more interesting ones are sometimes in non-obvious locations and you sort of have to hunt them down. A network toolset will provide more consolidate access. (Let’s include PowerShell development with .Net for now)
o If you are in Java, there are also a large number of components, but for the same reasons I’ll mention below, 3rd party components can be useful.
o Delphi? Most version of Delphi come with the base toolset of the granddaddy of network component libraries, /nSoftwares’s IPWorks. You also have the Project JEDI libraries available.
§ JEDI has thousands of components, not only for networking, but for just about everything.
§ The only problem is, it’s rather catch as catch can, and the documentation is somewhere between outdated to non-existent for most components.
§ You end up spending a LOT of time just trying to figure out what these thousands of components are.
§ Nonetheless, every Delphi developer should have JCL and JVCL installed (Project JEDI)
o VB6 or older: You pretty much need to get third party ActiveX components to do much of anything. (Yes, I’m sure to get some dissent, but heck, you’re still using VB6…)
o C++: You aren’t doing rapid application development! (Unless you are using C++ Builder)
§ However all Delphi third party components generally have C++ Builder versions.
§ Same logic for C++ Builder as for Delphi.
o Given that these languages and others have lots of networking components what value do third party components add?
§ More complex components such as html page decoders, sophisticated request builders, streamlined emailing procedures for mass emailing and MIME attachment management.
§ Some libraries have “Fill in the blank” server components, or skeleton servers.
· A Skeleton Server is an object that you initialize and then all you have to do is write code to handle event responses. All the other complex logic of a network server application is handled for you.
· It’s the fastest way to write your own SMTP server, or your own IMAP/POP server, your own syslog server, your own webserver (again, are you insane?).
§ Many libraries also have more complex protocol support, such SOAP messaging, PayPal integration, improved Oath support etc.
o One relatively recent class of third party components are SQL Server components.
§ There have long been reporting and analysis tools for SQL Server, however with the advent of CLR a few versions back, you can now buy SQL Server function libraries.
§ SQL CLR functions are .Net assemblies that provide advanced functionality to SQL Server.
§ They install just like an extended stored procedure but give you functions that are difficult or slow to do in Transact SQL. E.g. Excel string and math functions.
§ At this time, most of these are licensed per server, which makes redistribution in a shrink-wrap application a problem, but for internal business applications, it’s not a problem.
o Document Management, Image Management, Media Management
§ Very few development tools come with much in the way of these style components.
§ Most of the major User Interface libraries come with basic document management tools (usually a RichTextEditor) and Excel/Word/PDF export capabilities.
§ There are also a lot of GUI and non-GUI tools for dealing with different file types, from Office Documents to pictures and audio video.
§ If you want to work with these files, you basically need a third party component or rely on users having applications that you can interact with installed.
· I for example have a Delphi based application that drives iTunes, WinAmp, Real Player and Windows Media Player from behind the scenes.
· Not only can I play music with these players, I can read/write, encode/decode music with these players, relative to their specific abilities, I can also manipulate their libraries to synchronize them, clean up duplicates and rearrange things, or enhance meta data.
· This is a pretty big undertaking however, supporting lots of player SDK’s and dealing with changing API’s and standards. The iTunes API alone changes extremely rapidly.
· I probably don’t recommend this method for a lot of reasons, particularly complexity, but also because of the value of the independence of not requiring the app.
· For example, you can do an incredible amount of stuff with Excel or Word API’s both within the application and by external automation. But you have to rely on the user having Office on their machine, and a version of Office that works your program. This is fine for a tightly controlled Enterprise, but can be extremely time consuming for less controlled environments.
o File Operations and Cryptography
§ Most development environments have pretty decent file system support and varying levels of cryptography support. Cryptography support is rapidly improving.
§ However, if you’d like to interface with more complex Shell events and methods on Windows, or create custom file explorers or add in panes for IE or Explorer, then a third party component that handles the complexity of the lower level shell functions can be very useful.
§ Certain higher level (object function level) cryptography components can save you a lot of time managing certificates, authorization and revocation.
Licensing Third Party Components
Third party components are generally licensed as follows:
A) Per developer or per server installed on, depending on the type of component.
a. Developer “libraries” are generally per developer
b. Server components/tools are generally licensed per server. This is true for more service oriented web engines/components and SQL Servers.
c. Some developer libraries and some sever licensed components also offer site licenses.
d. Most per developer licenses allow redistribution as long as you don’t include source code or developer components to the end user.
i. There are some libraries; particularly large, complex image processing libraries that require not only a developer license, but also a royalty license per distributed product.
ii. This royalty may or may not apply to distributions within the company, typically called “seats”
B) Depending on the vendor you can:
a. Buy individual components for a relatively expensive number
b. Buy a suite of components for only a little bit more. For example buying any one part of a suite is maybe 2/3 of the cost the suite. If you buy 2 components or component sets, you might as well buy the whole suite.
C) Subscribe or not subscribe
a. Most, but not all components provide 1 year of basic support for the cost of the library. Sometimes 6 months.
b. Almost all offer subscriptions, where you pay a possibly slightly higher upfront cost and then a lower renewal cost each subsequent year.
i. Subscriptions typically come with higher levels of support and improved response time.
ii. Many subscriptions will include source code for the component.
c. If the component/library is something you intend to expand within your project and use in multiple contexts, or in multiple projects going forward, subscriptions are extremely useful If it’s a one off, then the subscription may not be that useful.
As a rule, I prefer and recommend per developer licenses with no royalties. I am not at all a fan of 3rd party library vendors that charge you for both a developer license and a redistribution license. Sometimes, due to patents and royalties, there is no choice, but I try to avoid such fees; particularly if they apply to in-house use.
Suites are usually the best value and can often provide you with ideas and tools for improving your project in ways you hadn’t originally considered.
Knowing whether updates to a component are going to be necessary can be tricky. As a rule, I generally by subscriptions. I generally prefer the subscription model to the upgrade at will model. In particular, I like the priority support one usually gets with a subscription, and often times a subscription renewal is cheaper than an “Upgrade”
Third Party Components and Where to Get Them
This is by no means an extensive list, it’s primarily stuff that I or people I know have used, or use regularly. So if you are a component developer and I missed you, let me know about you. Just go to Component Source or TechXtend to see how minimal this list is.
A) Component Stores/Sites
a. Free/Open Source (mostly)
i. Codeplex for MS development.
ii. CodeProject for MS development.
iii. Embarcadero CodeCentral for Delphi/C++ Builder
iv. SourceForge need I say more? (Project JEDI is here)
v. NuGet for Visual Studio
vi. GitHub for multiple platforms
vii. Torry’s Delphi Pages
b. Purchased Libraries/Components Super Sites
i. Component Source (it’s like the Amazon of components)
ii. TechXtend Formerly Programmer’s Paradise
B) Some Popular Component Library Vendors
a. Super Library Vendors
1. Generally my preferred UI vendor, I have an Enterprise subscription and a VCL Subscription.
2. Great support, wide platform library (Winforms, WPF, XAML/HTML5/W8, AJAX, MVC, Silverlight, VCL, Reporting, ActiveX)
3. Desktop, Web, Mobile
1. Very similar to DevExpress, but with some neat things DX doesn’t have. Particularly for AJAX, And they get some things sooner than DX, some later.
2. They have some nice free components.
3. They also do a lot of CMS work. DNN developers and users will recognize their free controls. They also have their own CMS product, and lots of testing tools.
4. I have DevCraft Complete.
5. I like their developer tools a bit better than DX, mainly personal preference, but JustMock and their tracing tools are really nice, and they come with their main subscription for developers.
6. AJAX, MVC, Silverlight, XAML/HTML5/W8, Winforms, WPF, WinForms, Reporting, ORM.
7. Mobile/Phone, Desktop, Web
1. Along with DX, one of the oldest component vendors.
2. I’ve used and liked, just not subscribing at this time.
3. AJAX/MVC, Silverlight, Winforms, WPF, Reporting, iOS/Android
iv. Component One
1. I’ve demoed and liked it, but was already using DX and Telerik
2. Apparently purchased by GrapeCity recently, this means they have GrapeCity Excel spreadsheet components! (Sweet Suite!!!!)
3. They have some very pretty and slick looking interfaces.
4. Winforms, WPF, Silverlight, AJAX, MVC, HTML5, XAML, ActiveX
5. Windows, Mobile, Web
1. AJAX/ASP.Net/MVC, Mobile MVC, Silverlight, Winforms, XAML, WP
2. Very feature rich component set, a few more interesting components that others don’t typically have, like a diagraming component. More extensive document management support than most.
3. Licensing cost for a full subscription is a bit higher than similar suites, but again has some extra components on most platforms such that the price evens out.
vi. TMS Software
1. Less tightly integrated than the above. More like individual component collections.
3. Fast at releasing new components, often ahead of the bigger guys.
4. VCL, FireMonkey, Intraweb, ASP.Net
5. About the only FireMonkey components I can find….
1. Sort of the granddaddy of networking components.
2. Extremely extensive low level objects
3. Extremely good high level (insane level) component libraries.
4. Individual component sets get expensive, but are worthwhile.
5. RedCarpet Subscription is an INSANE deal. Seriously, it’s such a good deal I’m not sure that anyone doing lots of network development can afford NOT to buy it.
6. Unrivaled Platform Support
a. .Net/.Net CF
e. Delphi/BCB VCL
i. Mac and iOS
7. All your low level network components, regular and SSL based, all client objects you can think of, some server components.
8. Crazy High level Adapters that make me drool
f. Multiple E-Payment Systems
g. Shipping Integrator
n. 3D Secure MPI
ii. Clever Components
1. Great mid level protocol and server support (Firewall component anyone?)
2. I love their HTML and Email components
3. Cheaper than /nSoftware and sort of in the middle of their product offering.
4. ActiveX, .Net, VCL
5. Plus some really funky (good) database comparison products and tools.
6. Now offering lifetime subscriptions for both developers and corporate sites. By default you get one year of support and can renew/upgrade after that. However, they also now offer lifetime support for a reasonable price. I went ahead and did that with their mega bundle. Worth it.
c. Other Libraries
a. Windows File and Shell Components
b. Shell and Namespace Extensions
d. Licensing Components
e. Visual Application Building and Release Management
2. Great value, lots of cool, but down and dirty nasty stuff handled for you. If you need your own MTA thread safe dialog boxes and file open/save dialogs, or if you want to extend IE or Windows Explorer, or build a replacement for them, this is the place to come.
3. Very responsive support
4. I use them quite a bit.
1. Winforms Skinning components for VCL, .Net and Lazarus.
2. Skin any form and all standard controls. Support for most popular third party controls as well (e.g. DX)
3. SkinBuilder tool to make your own skins.
4. Lifetime support for one time purchase.
5. Responsive developer.
1. See my other blog entry on these guys.
2. MS Excel (and better) function support for SQL Server
3. Licensed per server (supports clustering Active/Passive is one server, A/A is 2)
4. Licensed per server, not per instance on a server.
5. Excellent, flexible support.
6. Production, Development and Express editions.
a. Production versions licensed per server
b. Development only installs on SQL Developer
c. Express is free!
7. There are both 2008 later versions and 2005 versions.
8. You can individual function libraries (e.g. String Functions) or a suite of almost everything or a Plus Suite of everything.
9. The plus suite includes advanced financial modeling, beyond what you can do in normal Excel. (e.g. Black Scholes, etc.)
1. Very extensive, professional high end graphing software.
2. Next step beyond the graphing components found in the major suites.
3. Scientific, Business, Polar/Smith charts etc.
4. Winforms, ASP.Net, ActiveX, DLL, VCL
Considerations for Contractors and Consultants
When you are writing code for hire for someone, be sure to alert them that you want to use X components. Explain what that entails for licensing (why I prefer royalty free developer licenses), and future development, and get their sign off.
A big selling point to using these tools is that you can get the work done faster (and thus cheaper) or you can give them a lot more functionality for a specific cost.
The downside is that if they want someone else (say in house) to modify the code in the future, that developer will need a developer license for the library (or they can just call you).
How do you, as an independent developer cover the cost? This is a simple estimate. I estimate how many clients will use this product in a given year, how many hours will I get from them, and then divide the cost of the library by the number of total hours among all clients to find out a dollar amount to add to your rate.
I think this is pretty fair because these components are making you more efficient, delivering greater value to the client, so their cost is adding to your overall value, and thus your rate.
Finally, one really good reason for independent contractors and consultants to use third party libraries: scalability. The key to making it big is to minimize development cost, while maximizing sales. To this end, as web developers quickly realize (and it’s true for most developers) the key is to develop “canned solutions” that you can customize and reuse over and over again for multiple clients.
Now, true custom development is hard to “can.” However, you can “can” the most common reusable pieces. This is called Object Oriented Development, and it applies at a business level as well as a programming level. Become familiar with your favorite library or two, start extending them and developing your own libraries around them, and then reuse that in all of your solutions. I won’t tell you how to account for reusing prior work (where allowed by contract), I think you can figure that out well enough.
I see third party components as a cheap way of getting more of “me” to spread out among clients and get more work done. This is true for managers of in house development as well. Using third party components lets you get a lot more finished and reliable code out of your developers.
In summary, I really advocate concentrating on core business logic, everything else you should leave to people who are paid to deal with details you don’t have time to mess with. This is particularly true for in house development, which is where you most often see RAD methodologies employed. But I even think it’s true for independent software developers. One of my biggest thrill is to get some new program only to discover it’s using components that I recognize. For one thing, it greatly simplifies my learning curve on the new product. If I open it up and see groupable grid control from DX, Telerik, Infragistics etc. I already know many things I can do with that programs data.
Now to be fair, learning and then integrating these libraries into your applications can take time, but the time it takes is far less than the time of actually developing, testing and patching the in house code, and you get a lot more features than you are likely to be able to deliver on your own. As I mentioned in the cost example, if you have a developer that works for $52K including overhead that can write me a grid like that, I know lots of people, including myself that want to snag that developer.
Even so, even with the super developer, you still save money by using third party components.