This Blog


Favorite Posts


April 2008 - Posts

  • Software Risk Management

    Part of any software project worth its salt is an analysis of risk. Many times unfortunately this analysis gets short shrift and as a consequence the project manager is essentially playing high stakes poker.

    What is software risk? In essence it's the chance of something going wrong in the development of some software. It's the danger of failure, of loss (usually monetary), of producing something that isn't what was required. By identifying the risks in a software project, assessing their likelihood, and monitoring them, we can avoid or minimize drastic harm through a risk actually occurring.

    In January 1991, Barry Boehm, then at DARPA, wrote an article called Software Risk Management: Principles and Practices for IEEE Software. In it he identified 10 software risks

    1. Personnel shortfalls
    2. Unrealistic schedules and budgets
    3. Developing the wrong budgets and properties
    4. Developing the wrong UI
    5. Gold-plating (aka Feature creep)
    6. Continuing stream of requirements changes
    7. Shortfalls in externally furnished components
    8. Shortfalls in externally performed tasks
    9. Real-time performance shortfalls
    10. Straining computer-science capabilities

    Of these risks, which ones do we, Developer Express, help mitigate (or, possibly, exacerbate)?

    Obviously, as far as you're concerned, if you own our products we are going to feature greatly with regard to possible external risks. How do we help mitigate those risks for you?

    First of all, I'd argue, is our subscription model. Not only are you mitigating the budget risk by subscribing, you are also receiving a stream of minor and major updates for a full year. Bugs will be fixed, new features will be added, and so on. And you won't have to wait too long in general for these updates -- we release minor updates approximately every three weeks on average. (It could be argued that the regular updates are a risk unto themselves -- should I update? should I wait? What happens to the stability of my software if I do update? Etc.)

    Even better, if the bug you've happened to encounter is particularly heinous -- it has no good workaround for example -- and we've fixed it, the support team will usually provide interim fixed dlls for you to use until the next minor update is released.

    Second, as just mentioned, our support team will help you find workarounds for bugs or for features we don't currently have. This is almost like having a temporary developer finding quick code solutions, maybe not fully fleshed out, that keep your development going. Our searchable Support Center and Knowledgebase feature highly in this risk mitigation as well.

    Third, you can purchase a subscription to our control and framework libraries with source code. Many customers do this to alleviate the risk that we disappear. Others do it so that they can learn our design and coding techniques and apply them to their own code. Still more actually change the code for their own purposes to remove features or add new ones. No matter why the source code is purchased, having it is ultimately a risk mitigator.

    Another risk we can help mitigate, almost accidentally as it were, is personnel shortfalls. Because we have been in the industry such a long time, you'll find it easier to find and employ developers that have used our products and that are expert in them.

    Of course, I won't pretend that it's all good news when using DevExpress' libraries. You may find a problem or require a feature that we are not going to fix or provide, or at least not to your deadline or timetable. To counter this, I would certainly advise that you perform an in-depth evaluation of the products before you start down the road of actually using them: Download, Compare, Decide. The more in-depth an evaluation you perform, the less likely you'll find roadblocks at a later stage and the lower your risk. For example, if your requirement is for an MDI application, it makes sense to try out the controls you're evaluating in that environment.

    Doing this in more breadth is known as prototyping. Prototyping is a great technique that helps alleviate many other risks as well, not necessarily those devoted to external factors. For instance, prototyping will help nail your UI, help you understand possible performance issues, reduce the risk of feature creep. Our UI controls are very amenable to prototyping; in fact, possibly too amenable, since it's hard to throw away a good-looking polished prototype.

    When managing software risk, you have two main activities: assessment and control. Assessment is identifying the risks, estimating their likelihood and the potential loss from each. Dr Charles Suscheck, with whom I worked some five years ago, used to use a simple numeric scale for each of these, say a scale of 1 to 5 for the probability of occurrence, and a scale of 1 to 10 for the potential loss. If you multiply these values together, you'll get a rank for each risk. High rank means high probability and big loss, medium rank means high likelihood and low cost or vice versa, low rank means low possibility and low cost.

    The result of this assessment is usually a ranked list of risks. After that it's a case of how to control these risks.You've got to come up with plans and strategies to mitigate these risks. Obviously the most highly ranked risks have to be continually monitored and rigorously controlled, medium risks less often (and have less detailed strategies for mitigation), and usually the lowest ranked risks are pretty much ignored.

    Anyway, if nothing else, I hope this post convinces you to assess and manage the risk in your current software project. I also hope that I've convinced you that owning DevExpress' products is not exposing you to large risk, but instead is helping alleviate the risk in your project.

  • Selling snake oil

    Something came up today with regard to the wishes of a potential customer, and I felt it important enough that I blogged about it. Plus, it's non-technical, therefore I don't have to research it and can instead just talk. Smile

    The issue was this. Joe — not his real name but I need to hang a label on him — was very interested in a particular ASP.NET control we have. Very interested. So interested in fact, he was ready to invoke a money-back guarantee on a competitor's product, and use the refunded money towards our product.

    There was a fly in the ointment, however. Joe wanted a couple of features that were in the competitor's product, but weren't in ours. In fact, these features were going to be instrumental in the application he was writing. Sounds simple enough, eh? Promise him we'll put 'em in, and grab his money. Mmm.

    As it happens, a couple of minutes sifting through the todo list for 2008.2 showed me that at least one of those items was likely to be done but I couldn't spot anything that was similar to the other. So, even simpler now?

    Heck, we have our own money-back guarantee. 60 days, no questions asked. (Well, OK, we may ask why, but we don't expect or require an answer. Knowing why just might help us make the product or our service better. It certainly doesn't affect whether you get your money back.) So Joe could just buy the product and, if we don't do what he wanted in two months, he could get the money back. Still simpler? But surely that's the situation he's in right now with the competitor's product? It would be a little ridiculous to move him into the same scenario, just two months further down the line.

    I don't want to appear holier-than-thou, but I couldn't do it. In fact, we couldn't do it. There's no way we can promise features that might appear in our products in the future just so we can get the money now. I'm a firm believer in the premise that when you buy a DevExpress product, you are buying what's in there now, not what might be in there in the future.

    This was one of the arguments we had about the roadmap the first time we drew one up. Not only would we be telling the world, including our competitors, what we were thinking of doing that year, but people may decide that they'd buy our product because they want feature X, knowing full well that feature X doesn't exist yet but is mentioned in the roadmap.

    So I told Joe that, based on my reading of the todo list, it was likely that at least one of his requirements would be coming in the next major version, but that the other may or may not be there. I could push for it, but there was just no guarantee of when these features would appear. I therefore recommended that he keep with the product he already had.

    I'm reminded of this with other things we do as well. Sometimes, we all have high hopes about what we may be able to accomplish over the short term, or our goals over the long term. We're optimists. Yes, we'll be able to complete the project on time; yes, we can paint the entire downstairs in a weekend (don't ask); yes, I'll make sure I put enough money in before-tax securities. For me, it came home to roost this week that I've failed to maintain my initial momentum to blog about using XAF, despite my promises early on. No real biggie in the larger tapestry of life, but it's a promise that wasn't kept.

    So if you're looking at a DevExpress product to buy and use, my recommendation is this: Download, compare, decide. Download the current evaluation version, compare and make your decision based on the current features and only those features. If the product is what you need, but you want to be reassured that we're still developing it, read our roadmap to see if it's mentioned. Ask us about it — my email address is julanb@devexpress.com, by the way. Perhaps read up on it in the forums and on these blogs to see what we and others are saying about it. But, in the end, buy it because it does what you want to do now.

  • DevExpress at DevConnections, Orlando

    Just a quick note to say that Mark Miller and I will be your friendly Developer Express representatives at the DevConnections conference in Orlando next week, from the evening of Sunday 20 April to the afternoon of Tuesday 22 April. We'd love to see you if you're going, so please pop on by the booth and introduce yourselves. We'll have the odd t-shirt or so to give away, especially if you happen to be XL in size (although last time we did manage to find some Ls in the strore cupboard and bring them too).

    As usual the exhibitor hours were drawn up in the time-honored fashion of cutting up numbers from newspapers, putting them in a hat, and then drawing them out at random and pasting them on a sheet of paper:

      Sunday, April 20th
       8:00 PM until 10:00 PM
      Monday, April 21st
       9:30 AM until 10:30 AM
      12:45 PM until  2:30 PM
       3:30 PM until  4:15 PM
       5:15 PM until  6:30 PM
      Tuesday, April 22nd
       9:15 AM until 10:00 AM
      12:45 PM until  2:30 PM

    Mark has a couple of sessions on Tuesday in the gap, including his well-applauded session on the Science of Great UI. You may even be present at one of the unrehearsed crashes of his Alienware laptop, always good for a hearty chuckle.

  • Benefits of XtraCharts

    I was chatting to our charting team lead recently and I asked him what features did he think XtraCharts had that would make it the choice for someone who needed charts in their application. I know what floats my boat about the product, but then again I don't have to write applications with charting in them, so I was anxious to hear his side of the story, from interactions he's had with customers either face-to-face or via support questions.

    Funnily enough the first thing he came up with was ease of use. The XtraCharts Wizard. Think of Microsoft Excel, he said, think of how you create a chart there. You use a wizard.


    Setting up charts can be difficult enough and you'd like to have a "sandbox" whereby you can try things out before committing to a particular look. So, our Charts Wizard gives you the chance to experiment with settings and to see the results there and then on your form in Visual Studio. Don't like what you see? Fine, just rollback the changes or press Cancel, and start over again. We provide mini- views, icons if you like, of what the chart would look like before you apply that type or style, much easier than trying to remember what a full-stacked spline area chart is. For best results the Wizard can be used either in the traditional page-by-page wizard interface, or you can jump directly to individual pages.

    The developers implementing the charts shouldn't just be the ones to have all the cool toys either, and so our Charts Wizard can be invoked at run-time to enable your end-users to experiment with the look and feel of their charts. Of course, once you allow that, it's a given that you must be able to tweak and customize the wizard to do things like localize the UI, hide elements of the UI you don't want your end- users to use, or add new pages to the wizard for your particular chart solution.

    All told, the ability to use the same Chart Wizard at design-time and at run-time is a strong indicator of the ease-of-use of XtraCharts.

    OK, I said, what's next on your list? He thought a bit and came up with the number of business chart types. This is possibly where I might have started with my collection of XtraCharts benefits. Did you know that, as of v2008 vol.1, we have 42 (yes, indeed, Douglas Adams fans: 42)? Go on I say, what are they, expecting him to say something like "pie, pie with one slice removed, pie with all slices removed" and so on. Nope, he gave me the list:

    2D-charts: Area, Candlestick, Full-Stacked Area, Full-Stacked Bar, Full-Stacked Spline Area, Line, Overlapped Range Bar, Point, Side-by-Side Bar, Side-by-Side Range Bar, Spline Area, Spline, Stacked Area, Stacked Bar, Stacked Spline Area, Step Line, Stock, Doughnut, Pie, Overlapped Gantt, Side-by-Side Gantt, Radar Area, Radar Line, Radar Point, Polar Area, Polar Line, Polar Point.

    3D-charts: Area Chart, Full-Stacked Area, Full-Stacked Bar, Full-Stacked Spline Area, Line, Manhattan Bar, Side-by-Side Bar, Spline Area, Spline, Stacked Area, Stacked Bar, Stacked Spline Area, Step Line, Doughnut, Pie.

    I must admit I goggled a bit at that and resolved to go back to the charts demo and check them out. (Radar Area? Sounds fascinating.) He pointed out that we have two visually distinct financial chart types: Stock and Candlestick. Stock charts were familiar to me (they show open/close and high/low prices as ticks on a vertical line, but candlestick charts were new for me.


    The next item on his "why you should use XtraCharts" list was data binding. To be precise, we can bind the X values and the series to any datasource that implements IList or IEnumerable (which covers the usual suspects like arrays and so on). Since a chart can show several series, each series can be bound to a different data source. I said I would expect that in a charting package and surely we had something beyond that. Indeed we do he said, we have Series Templates.

    This sounded interesting. Take a data source that has, conceptually, several series in it distinguished by the value in a field of the data source. So, for example, imagine a data source that has monthly sales of widgets. You want to plot each widget's monthly sales on the same chart. Rather than have to construct individual data series for each widget for this job, you use a Series Template that automatically filters each series by widget.

    Next up: different chart types plotted on a single chart. I told him to give me something interesting: surely all charting packages have that and it's almost not worth discussing it.

    He got a glint in his eye, what about secondary axes? OK, I said, cautiously, surely this is similar to trumpeting that our soda cans have ring-pulls? That our bicycles have two wheels? Surely everyone does this? He said, sure, but we have no limits on the number of secondary axes you can plot on the same chart, be they X or Y axes.


    Useful in certain circumstances, I'd have to admit, although going beyond two secondary axes or so might be difficult to read. But it's nice to have the flexibility than just a single secondary Y axis say.

    "Hot-tracking" he says. Ah, I know about this, I had a long chat with a customer on the phone about this feature recently. Hot-tracking is when you specify certain regions of your control as "hot" so that when a mouse cursor moves over it or it gets clicked you get notified. You can then display a tool-tip or invoke some action. Not only is this feature available at run-time for your end-users, so you can quickly implement drill-down and such features, but it's also available at design-time so that you can easily edit particular chart elements using the property grid.

    It was at this point that we got into the normal list of features that any charting product should have: automatic resizing of axes according to points being added or removed, gradient and other fills for area charts, skinning and theming, the usual image formats for saving charts, unlimited points in data series, etc.

  • Get to our product pages quickly. Save your fingers.

    We finally, FINALLY — you'd have thought it was difficult or something — have activated our product shortcut URLs.

    Huh, I hear you say, never heard of them. Well, OK, they're really redirectors that allow you to easily get to the web page for a particular product. So, if you want to know about XtraGrid, for example, instead of navigating through our menus to get to the main page that describes it, just type "www.devexpress.com/xtragrid" in your browser's address bar and you'll be redirected to the right place — which, to be honest, even I can never remember the exact URL.

    So all you have to do now is let go of your mouse, type "devexpress.com/" followed by the product name (typing the "www." is so yesterday, don'tcha know), and you'll get there immediately.

    Have fun!

  • Server mode using LINQ? Let's wax rhapsodic.

    In all the excitement of releasing both DXperience v2008 vol1 and our VCL Subscription build 34 on the same day a week or so ago, you may have missed this rather stunning bit of news, so I thought I'd bring it to your attention again. SD Times also phoned me up to get the inside angle, so it must be fairly important.

    Last year we launched our server mode technology for displaying data from large datasets (especially remote ones) in our grids. In pretty short order we added this "server mode" to our new ASPxGridView, our XtraGrid, and to the just-about-demoable-but-still-very-alpha version of our grid for WPF.

    In true CTO-hand-waving terms, the technology uses our XPO (eXpress Persistent Objects) product hiding behind a "simple" interface to perform all intensive data crunching on the server and only displaying what can be shown on the client grid. So, you want the first page of records for the grid? Our server mode instructs XPO to create a SQL statement that will return just that information. You want to sort of a column? The server mode gets XPO to create a SQL statement with an ORDER BY and that returns a single page of records. Grouping? Ditto, but this time only one page of group headers are returned. And so on.

    No longer did your grid in your UI have to download the whole dataset and then sort it, group it and filter it. No longer did your users have to wait that interminable period drummiong their fingers while all that data was transferred to your client program. No longer did you have to restrict those same users from displaying "all records".

    All was good, except that some customers didn't want to use XPO. Perhaps they already had their own data layer, or were using a third-party ORM, or they wanted to use it with non-database data. Sure, we said, perhaps a little too optimistically, just write another implementation of our IListServer interface. Well, I can count on one hand the number of customers who went that route — it's just not what our customer base wanted to do. They have real business problems to solve and writing IListServer implementations doesn't advance that requirement.

    So we've been asked numerous times to provide more implementations of IListServer. Well, just like our customers found out, it's a lot of work.

    Finally Alex on our XPO team decided enough was enough. He wanted to play with LINQ and he wanted to solve this problem, so he merged the two goals together and produced a new IListServer implementation, one that used a LINQ provider to serve up the data. (By "LINQ provider", I mean an implementation of IQueryable<T>.)

    It works in pretty much the same way as XPO, but instead of generating SQL statements the implementation generates LINQ queries and then invokes the LINQ provider to execute them and return the data as an enumerable list.

    This is — to this CTO anyway — an absolutely brilliant solution to the problem. It's positively elegant. Have you got some data in SQL Server database that you want to display in a grid? Use either the original server mode with XPO or the LINQ to SQL. How about some data in XML form in our ASP.NET grid? Use the new LINQ provider support. Do you use LLBLGen Pro? Try out their new LINQ to LLBLGen Pro beta with our grids. Heck, I'm feeling the need to write my own IQueryable implementation over some old data or other just so I can show that data in one of our grids.

    Suddenly, we've expanded our server mode technology over a much larger universe of data. Already there's a host of LINQ providers and they're being written all the time (there's a pretty exhaustive list on Charlie Calvert's Links to LINQ page).

    Mehul has recorded a screencast on setting the new LINQ server mode with both our XtraGrid and ASPxGridView. I urge you to watch them and to consider how you could take advantage of Alex' last few months' work.



Chat is one of the many ways you can contact members of the DevExpress Team.
We are available Monday-Friday between 7:30am and 4:30pm Pacific Time.

If you need additional product information, write to us at info@devexpress.com or call us at +1 (818) 844-3383


DevExpress engineers feature-complete Presentation Controls, IDE Productivity Tools, Business Application Frameworks, and Reporting Systems for Visual Studio, Delphi, HTML5 or iOS & Android development. Whether using WPF, ASP.NET, WinForms, HTML5 or Windows 10, DevExpress tools help you build and deliver your best in the shortest time possible.

Copyright © 1998-2018 Developer Express Inc.
All trademarks or registered trademarks are property of their respective owners