Friday, December 9, 2011

Microsoft LightSwitch limitations

For those who are unfamiliar with Microsoft LightSwitch, the tool is an addition to Visual Studio 2010 for creating Line of Business applications with or without coding. It can be compared to VisualFoxPro to some degree and some people believe it may ultimately replace MS Access. The tool allows business users to create data centric applications. It's a wonderful tool and really good at quickly creating simple applications. However, like with any technology, it comes with some limitations.

Since we have recently been building LightSwitch applications in the real world,  here are some notes on limitations we encountered:

  • N to N relationships are not out of box (can be done in WCF RIA Services). 
  • One cannot call SPs other than via WCF RIA Services library 
  • Object_Inserted event is fired when transactions are still running (so you can’t fire up some stored procedure because the item is not yet committed to DB ) 
  • One cannot directly access XAML (code) of some screen (At least we have not seen how to do that.) 
  • Membership is provided out of box (UI for users management also) and therefore developers are unable to bind some table in his custom DB do for example User in the system 
  • One is unable to hook in some events like an "OK" click on modal window when creating a new item 

Wednesday, October 26, 2011

Building mobile apps - build once, run (almost) anywhere


vladFor those of you who are interested in mobile application development, I would highly encourage taking a look at Sencha. I spent the last two days at their SenchaCon annual developer’s conference and cannot resist being completely impressed by their products as well as people.
During the conference they introduced several updates to their current frameworks including Ext JS, Sencha Touch, and Designer. They also introduced a new cloud offering called Sencha.IO. However, while Ext JS is a great framework and Sencha.IO is a very interesting new cloud offering, the real story here is Sencha Touch.

As everyone knows, mobile development market is fairly defragmented. To build mobile applications for leading platforms such as iOS, Android, and BlackBerry, developers need to build the same application in completely different frameworks and languages. To support all three, developers must literally write the application three times. What a waste of time. To solve this issue, one can use a third party framework. Several months ago I evaluated three leading JavaScript frameworks including Appcelerator , JQuery Mobile  and Sencha Touch . To create complex mobile apps quickly and with the least amount of pain, Sencha Touch was hands down a winner. While the other two have a potential, Appcelerator was simply too buggy and JQuery Mobile while easy to use resulted in UI differences between platforms. What looked great on an iPhone was terrible on Android when built by jQuery. Sencha Touch does not suffer from these limitations. While its learning curve is much steeper than jQuery, I feel that benefits outweigh the downsides.

As a result, Ignite standardized on Sencha Touch and we are building mobile applications in that framework now. Our own findings as well discussions I had with people around SenchaCon reveal that Sencha Touch really is a great framework. As the same time, when building large mobile applications not everything can be solved with it.  For instance, because the framework leverages Webkit browser on the device, developers may need to use something like PhoneGap to access native APIs such as camera, contacts, geolocation and others. Also, some of the developers talked about leveraging PhoneGap to improve speed of the application and moved some of the business logic to it. One other exciting product in their mobile ecosystem is the Sencha Designer. In 2.0 developers be able to build mobile apps using their UI builder. What takes us hours now can take us minutes. The resulting code will be MVC. Something we are very excited about, of course. To be honest it’s not all roses even with Sencha. Multi-platform mobile development is tough and many developers have to deal with workarounds just to support multiple devices within the same app. However, I think Sencha Touch is clearly a leader in this space.

Thursday, April 7, 2011

How to outsource successfully

At its core, outsourcing is an act of contracting jobs and services typically performed by organizations’ employees to third parties. While the benefits behind outsourcing seem quite compelling, not all outsourcing efforts are always successful. This is not unlike the use of internal resources. Not all internal company projects are always successful. Thus, when outsourcing, companies need to understand several key criteria. Specifically, before outsourcing a particular job, role, process, or department, companies need to: 
  1. Understand their overall company objectives and goals. For example, if the company desires to be a market leader in making widgets, it may not want to outsource the widget design process unless it believes that by doing so it can increase its leadership position.
  2. Have a strategic vision and plan. Without the understanding of the overall company mission, incorrect process can be outsourced.
  3. Select the right vendor. Naturally, this is because the success of outsourcing hinges directly on capabilities of vendors. This point is crucial because by outsourcing, companies naturally relinquish some control to a vendor. For example, if an internal employee does not perform his/her duties to satisfaction, the company has several tools at its disposal such use of better motivation, disciplinary action or termination. This is much more difficult with vendors, because performance of individual employees as well as their motivational factors are often abstracted and hidden.
  4. Ongoing management of relationships is also very important. While the subcontractor itself is an entity, work is ultimately performed by people. These people may or may not know the specific goals set by their customer. They may not understand what is important, and want is not as critical. They may not be motivated by the same factors as their customer. However, if the company can manage to create a close relationship with the subcontractor’s employees, they may create an environment where these employees are their natural extension rather than some abstracted resource.
  5. Further, a properly structured contract is very important. As an example, a software development project with a fixed bid where the customer can change both the timeline and features is an incorrectly structured contract. This is because while the price to the company is fixed, if features are added, the subcontractor’s cost will increase without it being appropriately compensated for such increase. This will inevitably lead to poor quality and deterioration of the relationship.
  6. Open communication is always critical whether this is internal communication or communication between the customer and the subcontractor.  Without open communication, both the company employees and the subcontractor’s employees are left to their assumptions relative to best way to perform the job.  With any luck, such environment leads to productive work; however, companies should not rely on luck. Having open communication will thus insure that all parties are on the same page.
  7. Not unlike internal resource allocation outsourcing must have support from senior management.
  8. Lastly, companies should financially justify outsourcing. This does not mean that outsourcing must always cost less compared to using an internal resource, but given the company objectives, outsourcing must positively contribute to net profits, the return on investment and cash flow.