Thursday, May 31, 2007

Microsoft Surface - A Whole New Experience

Tired of the mouse and keyboard? Wish you just had a virtual table where you could lay out your pics and shuffle them with your hands? What if you could choose your menu by "pointing" out to the interesting items on the table, and maybe take a good look at the ingredients and the calorie values before you do so? What if you could open a map on that table, and then click interesting areas, and get vidoes and pictures, and driving directions?

What if you would have a unique "touchy and feely" bridge between your real world, and the digital world?

Futuristic? Well, check out Microsoft Surface at http://www.microsoft.com/surface/

Mind blowing stuff!!!

Monday, May 28, 2007

Multi-Level Cubes?

We came across an interesting problem today, which I can best describe as multi-level cubes. So what are multi-level cubes? Let me try and explain with an example...

In any cube, we have data points (sales figures, inventory stock numbers etc) representing some measurable quantity for a given combination of dimension values - location, time, product category etc. Now, what if we have data points representing these same measurable quantities, but some of these are at a lower level in a multi-level dimension than others? For example, consider that I have sales figures for individual stores in Pune, but a consolidated sales number for ALL stores in Mumbai? Can I create a cube with these kinds of multi-level dimensions, with data at varying levels of granularity?

What are the implications? Drill down and roll ups now work for some combinations of dimensions, but cannot be done for some other combinations. Queries need to present some leaf nodes, and in other combinations, need to present aggregated values!

Possible? I am not sure - but definitely sounds like an interesting problem to look into!

Thursday, May 24, 2007

CNBC Shoot

We had a shoot for CNBC today. The episode will be telecast on the 9/10 June in the evening. For more details, see this entry on my K3G blog.

What follows is the basic pitch I used…

Intro – 17 years, 1000 releases

At Persistent, we have been providing complete product development lifecycle services for our customers for seventeen years… over 1000 product releases for some of the top software product companies, as well as start ups and enterprise customers…

Go To Live - VSTS

Persistent’s value offering today is this combined expertise and experience in building products – an offering we call “Go To Live”, based on Microsoft VSTS, where we provide services for the complete product development life cycle – from concept to deployment, performance engineering, usability engineering, deployment support and monitoring – end to end… Based on best practices in development and management, our “Go To Live” offering enables us to effectively manage the two key issues facing product companies: time to market, and zero risk of engineering failure.

VSTS end to end, 20% productivity

Microsoft’s VSTS has been critical to Persistent’s Go To Live model – it provides us with a single unified platform for design and development, testing and tracking, with end to end traceability, as well as high extensibility and integration with other third party products and components. We have easily seen up to 20% productivity gains for our development and management teams using VSTS.. the common database provides ability to generate traceability data and productivity metrics that was never possible before…

VSTS extensibility - integration

The most exciting part of VSTS is that its almost limitlessly extensible… at Persistent, we have built connectors to some of the third party source control systems, for example.. as well as to our internal MIS systems.. a project manager therefore can easily correlate the efforts spent on the project with the total resource allocation in the HR system, and the invoices and billing data generated by the finance applications… with VSTS, this kind of integration and extensibility is easily possible…

VSTS process elements

We have been able to customize VSTS for processes that we have refined and optimized over the years – from heavy duty CMM based processes to agile, SCRUM based projects, we can have our teams process ready in 2 hours

Using VSTS event and notifications, we can monitor and trace interesting events, including bugs filed, resource additions/deletions, and trigger appropriate actions – you can take an indisciplined team, and enforce guidelines and best practices through the system.. customer is happy, development teams are happy, and of course, managers have a lot less to do!

Business Opportunity

I think there is a huge business opportunity here for partners to develop these connectors and bridges to other systems… in a real world, you will always need to integrate with other sources of data and business systems..

Conclusion

At the end of the day, any software that gives you 80% of the functionality at 20% of the cost is a winner… VSTS goes much beyond that 80%..

Monday, May 21, 2007

Hooked on SCRUM

We have started using SCRUM recently in some of our projects, and while it's still early days, there are a few things I love about SCRUM.

For one, it's all about being agile and incremental. This is great for certain kinds of projects, including internal competency building, bug fixing, web site development etc. By forcing the team to do short sprints, and discuss often, SCRUM ensures that the throughput is much higher than in traditional models like Waterfall.

Does SCRUM work on all kinds of projects? Maybe, maybe not. Too early for me to say - but I do feel that when building large systems, Waterfall might be a better idea - spend some serious time thinking of the bigger picture, and come up with the design etc, before you get agile and start thinking incremental.

Isn't SCRUM going to waste too much time in meetings? Could be. You got to control the meetings. For example, the SCRUM meeting in the mornings should be restricted to 15 mins, and just focus on a quick task status update, and not a design discussion. Remember, even at 15 mins per meeting, a ten person team will easily "waste" 2.5 person hours per day - for a 2 week sprint, that's a loss of almost 4-5 person days. But in terms of the ability to identify bottlenecks and keep the team running at full speed, the advantage of this investment is probably worth it.

How do we factor design and testing when we do incremental implementations using SCRUM? You can! Remember, SCRUM only mandates agile development of "stories"; it does NOT keep you from defining HOW those stories will be implemented. In fact, investigations, design activities, and testing, are integral to any development process, and it holds in SCRUM too. You take a story, and then define tasks that represent how you will implement that story. The tasks will include design and testing!

SCRUM is informal. It expects the team to be made of "equal" members, and everyone takes collective responsibility. Practical? Not always - but I am sure with time, team members will get there. Till then, I would expect the SCRUM master to double up as mentor and manager! Diluting SCRUM? Maybe - but at the end of the day, it's making the process work for you, not working for the process itself!

Thursday, May 17, 2007

The Arjuna Program

Persistent is launching an awesome program for managers and future business leaders, called the Arjuna Program.

According to Dr Ashok Korwar, an ex IIMA faculty, and senior acamedician and consultant, good Managers should be Arjuna personified - they should be doers, backed by knowledge and vision, and driven by principles.

Are you an Arjuna?

Sunday, May 13, 2007

SSRS Filtering

When defining a report using SSRS, you can use the Filters tab to define a filter - this is similar to the SQL WHERE clause, with a major distinction: unlike in the WHERE case, the filtering happens on the client side after the data has been fetched from the data source.

Hence, use the filters judiciously and replace it with WHERE as much as possible!

However, there are times when you need these filters. For example, you might be connecting to a data source that does not support the WHERE clause - like binding to a ADO.NET Dataset.

Filtering can also be used to enforce identity-based authentication and restrict access to data. For example, you may have a sales report that allows users to specify the region for which he wants to view the data. This parameter can be populated from a lookup dataset. We can now set up a filter based on an expression that restricts the choices for a given user based on his Windows identity.

SSRS Authentication Best Practices

SSRS provides connection pooling, for improving performance. However, pooling works only when the connection strings are exactly the same. If you use Windows Integrated Security, or Credentials Supplied by User options with SSRS, connection pooling across users will not work since every user will be having different login credentials.

To enable this pooling,

1) Use Shared Data Sources.
2) Use the "Credentials Stored Securely in the Reporting Server.." option with Standard or Windows-based Authentication.
3) Do not use an account with admin privileges. Instead, create a separate user and assign it to a role with read only permissions - in SQL Server 2005, you can use the db_datareader role.

While on the topic, also remember that if you want to hard-code the credentials in the connection string for some reason (especially during testing), VS.NET will not allow you to do it directly for security reasons. You can however achieve this by manually editing the RDL file.

Competency Building Plans

This is extracted from a mail I sent to management yesterday, about my plans for competency building through my group, the Microsoft Technology Practice:

Focus Areas

Based on feedback from current customers and the market, leads/opportunities, and technical innovations in the field, we have targeted the following areas as focus areas for the MTP this year:
1. SQL Server based database tuning, integration, analysis, and reporting
2. Sharepoint and Office based applications
3. .NET 3.0 and Vista applications, and issues in porting to Vista
4. Programming best pratices and component development
5. Mobile and mapping applications
6. VSTS

Competency Building Plan – Teams, Key Contributors and Contributors

1. Internal project teams have been created for each focus area. Each team:
a. is led by an identified team lead
b. has its own VSTS repository and Sharepoint project site
c. follows the SCRUM process diligently for incremental and short term project sprints
d. creates knowledge content and demoable POC applications
e. behaves just like any other project, and is a first class entity in Whizible with assigned resources
2. Every team member doing competency building is assigned to one or more of these internal project teams
3. The competency center resources have been classified into Key Contributors, Contributors and Others
a. Key Contributors are the “gurus”
b. Contributors are the resources expected to focus on certain areas (but will be usually junior resources)
c. Others can participate in competency building activities, but do not have specific hard KRAs.
d. Key Contributors and Contributors have hard KRAs against competency building activities
4. Membership in these teams will be long term for some of the key resources – most of the junior members will be rotated between competency development teams and customer teams
5. Senior members will play dual role – contributing to competency building and leading/driving customer projects at the same time
6. Specific groups of individuals will be identified as “review committees” – they will be responsible for reviewing and auditing MTP projects on various areas like database design, programming best practices, performance etc.

Competency Building Plan – Discussion Forums and Developer Sites

1. A Sharepoint site has been created for MTP developer community, for all competency building and knowledge sharing. This site hosts specific forums in all the key areas, and everyone is expected to post on these forums, and answer queries that may be posted there.
2. This activity is monitored closely, with the site also generating automated weekly reports on the activity and contributors to the forums.
3. The site will also host our knowledge repository including training material, videos, webcasts, Investigation reports and best practices
4. The site will also host reusable components created by the MTP as part of competency building or offshoots of specific customer projects
5. Shortly, this site will be opened up to the rest of the .NET community in Persistent

Competency Building Plan – Projects

1. Each project team use the competency matrix for a given focus area as starting point to come up with a product backlog (SCRUM terminology for a product feature wish list)
2. Each team works in SCRUM model, selecting target areas for competency building, and corresponding features to be implemented in the demo application
3. At the end of the sprint, the team publishes knowledge content, and has a demoable application showcasing the competencies gained in the sprint
4. The competency chart is then updated, and a new sprint planned
5. The following projects have been created at this point:
a. HealthMatrix: Based on the eMerge project requirements, this demo EMR system is a showcase of the latest and best in .NET 3.0 including workflows, WPF UI, and WCF communication protocols
b. BizTRACK: This is the showcase application of the SQL Server focus group, and showcases reporting, dashboards, database best practices and reporting capabilities. Based on Persistent’s MIS, this is also a POC for a planning and tracking, and business intelligence platform proposed for Persistent.
c. ProTRACK: This is the showcase application for the Sharepoint and Office group, and will be a real application used by MTP Managers for project tracking and monitoring, automating many of the repetitive tasks, setting reminders, and allowing most of the planning and tracking to be done using Office applications, through Open XML and Infopath based integration with Sharepoint.
6. We have a focus group that is actively looking at .NET programming best practices and component development – given the nature of this work, this team does not have its own separate project and includes senior members from customer and competency building teams
7. In addition, we have smaller demo applications being built to showcase our mobile and mapping capabilities

Competency Building Plan – Training and Certification

1. The MTP is working closely with the training department to plan and conduct training in various identified focus areas, for MTP members, as well as rest of the company
2. The MTP is also driving the PRP training and mini-projects for .NET. The 3rd such batch is currently in progress, after successful training of an ELTP batch, and 2 PRP batches in the last 6-8 months, totally around 60-70 persons.
3. We are also working aggressively on pushing e-learning and certification for all MTP team members, and this has been included as a KRA for all junior members We plan to have at least 15-20 Microsoft-certified resources in the team at the end of the year.
4. We are also aggressively identifying Microsoft-sponsored training programs and workshops, and sending senior team members for the same

Operational Processes – SCRUM

1. As mentioned earlier, the MTP is aggressively adopting SCRUM as the default process for all its projects, especially in competency building teams.
2. VSTS templates are being customized and adopted for effective and efficient SCRUM based projects
3. At this point, 50% of the MTP is on SCRUM

“Reaching Out”

1. The various focus groups have provided significant help/support/consulting to other projects/teams at Persistent in the recent past
2. We have organized training, and opened half the seats for rest of Persistent. BU Ops Leaders have been requested to send nominations
3. The MTP Developer Forums will be shortly opened up to the rest of the company and is proposed to be a one-stop shop for all developer issues and discussions, and a strong knowledge base

Interestingly, way back in February 2003, I had sent this mail:

Background

1. Technology is moving too fast, and we need a lot of dedicated effort simply to catch up and stay in touch. We have barely managed to stay abreast of developments in .NET, Web Services, Microsoft Office and Tools and other areas. Security is another major area; so is bioinformatics. We are lagging behind in many of the core technology areas.

2. In many projects, people just do not get time to do investigations and prototyping unless the client expressly sanctions or requires it. This leads to potentially a lot of missed leads and possibilities.

3. There is very little knowledge sharing, and practically no mechanism wherein projects can benefit from the learnings and experience in other teams. Mechanisms like Thursday lectures, Monthly status reports are very limited in usefulness.

4. As we grow larger, the need to recruit and train people will be felt more and more strongly. Learning on the job, on billed projects, is not always possible. What we require is a good bench management and training strategy.

Setting up a Technology Incubation and R&D Group

I am proposing the setting up of a Technology Incubation and R&D Group, with the following charter:

1. To keep abreast of technology trends and groom experts in these areas.
2. To provide projects support in technology investigations, prototyping and other related activities.
3. To seed project groups with trained people.
4. To provide back office support to Bizdev.

How is this different from the earlier TID?

1. This group will not concentrate on products, but will concentrate more on technology leadership. IP generated will be a side-effect, although a very important and useful one. The PSPL board can decide/approve the high level technology directions to focus on.

2. This group will have a very minimal permanent staff, consisting of an Exec (part time), and one or two TMs/ATMs. The rest of the staff will consist strictly of the benched resources, or resources billed to customers for specific tasks.

3. Resources from the group will be freely moved to project teams and vice versa. No binding on resources allocated to the group to "stay till TID project is completed"

Interesting to see how ideas evolve, and yet, remain so much the same!

Don't Deal in Round Numbers

From Mark McCormack’s "What they don't teach you at Harvard Business School"
Category: Negotiation
Title: Don't Deal in Round Numbers
Page: 146

Round numbers beg to be negotiated, usually by counter-offer round numbers. Odd numbers sound harder, firmer, less negotiable.

I hate to hear "a hundred thousand dollars" as a number thrown out in negotiations. That's the world's most negotiable number. Make it $95,500 or $104,500. Either way you're probably going to end up with more.

Step Back and Relax

From Mark McCormack’s "What they don't teach you at Harvard Business School"
Category: Negotiation
Title: Step Back and Relax
Page: 153

Counter emotional outburts by going emotionally limp. Say anything except what you probably want to say. "Let me think about that", or "I'll call you back". Perceive it as a game with winners and losers, because that's what it is: a game of wits-and who's going to be the first to lose theirs.

Pick Your Shots

From Mark McCormack’s "What they don't teach you at Harvard Business School"
Category: Getting Ahead
Title: Pick Your Shots
Page: 77

The quickest way to lose credibility is to rage about minor offences because of a build-up over major ones. This is the corporate version of getting a divorce because your spouse squeezes toothpaste form the middle of the tube. We're all susceptible to it, but it also shows immaturity and reveals lack of good judgement. Moreover, most companies do not have the time to psychoanalyse you to find out where the real problems lie.

When you join a new company at any level, the job comes with a certain amount of chips. Your judgement as to when - and over what - to use these chips will either add to your winnings or send you looking for another game.

Act in Anger but Never React in Anger

From Mark McCormack’s "What they don't teach you at Harvard Business School"
Category: Negotiating
Title: Act in Anger but Never React in Anger
Page: 154

Anger, and other strong emotions can be effective negotiating tools, but only as a calculated act, never as a reaction. I read somewhere that a photo of Nikita Khrushchev’s historic shoe-pounding incident at the UN revealed that he was still wearing both his shoes. A third “for-pounding-only” shoe? That’s calculation.

How to Determine Value

From Mark McCormack’s "What they don't teach you at Harvard Business School"
Category: Marketability
Title: How to Determine Value
Page: 127

A lot of times you cannot. But the usual business answers - "what someone is willing to pay" or "what it costs us to make" - are often worse than no answer at all.

In determining the value of what you are selling, it's helpful to ask yourself these questions:

How unique is it? Can they buy it for less from our competitor? If so, are there some real qualitative advantages to our product?

Can I sell it for more to their competition?

How badly or quickly do they need it?

What would it cost to replace it?

Are there any precedents that help me?

Is there a "passion factor"?

Is this a one-time deal, or is this the future?

When you have a pretty good idea of value, don't be afraid to name your price. There is an advantage in going first in the negotiation. When it is guesswork, try to protect yourself in other ways in the event of success: We arranged a business meeting between Norfolk and Western Railway and the president of Fuji Iron and Steel for $10,000 (in the mid-60s) at a golf course. Later we found out this had generated $17 million in business for Norfolk. Later, I have often asked myself why we did not add "and 1 percent of any business this generates". I am sure they would have said "Fine"!

Divide and Conquer

From Mark McCormack’s "What they don't teach you at Harvard Business School"
Category: Strategems
Title: Divide and Conquer
Page: 135

This is probably more appropriately phrased "Unite and Conquer". Suggest the same idea to two or more different key executives in the same company, and get them to agree independently that the idea is sound. Then, when they come together to discuss the issue, they will probably agree with you! You can use your discussions with one to influence the other, and act as the middleman. (Bill, Bob really likes this. Bob, Bill really likes this)

Each will feel reassured and less at risk, and will also be able to take credit for the decision. You can force a decision without appearing to do so!

Commentary:
It isn't about lying. A lot of decisions at the executive level are grey areas; not black and white. The idea of this tip is, you can discuss with key people who matter and influence decisions that way, using each other's thoughts very effectively to come up with a best solution acceptable by all. If you wait till the day the decision is made, the executives (or people waiting to make the decision) can get into a lot of personal and ego issues, which can make them do things you do not want them to do.

Let me give you an example. If I have to decide how to split responsibilities between three senior people, its best when I talk to them separately and use each other's thoughts during my individual meetings, before all three come together to discuss how best to proceed :)

Saturday, May 12, 2007

TechnoSparsh 2007

We had a day long event a month back in my group, the Microsoft Technology Practice. Initially planned as a set of presentations, the idea soon blossomed into TechnoSparsh 2007. With lots of technical presentations, treasure hunt, booth decorations, and various fun and game events like dunb charades and mad ads, the event was a roaring success. Everyone participated in full strength and with extremely high levels of commitment, and it was great to see the kind of rapport and team spirit that was on evident display on that day, as well as in the run up to the event.

We plan to make this an annual event, and something that will be eagerly awaited by everyone!

Here's a tribute to the hard work and dedication of my team - our first TechnoSparsh poster!

SQL Server Reporting Services - Caching

Reporting Services allows caching of reports. But, how do you enable the first user to benefit from the cache? The solution is to pre-populate the cache. SSRS provides a NULL option for delivering and rendering data-driven subscriptions. When such a data driven subscription is executed, the query is executed and results available in the cache, without rendering or delivering the report to anyone. And when your first user demands the report – you already have it in the cache!

Another interesting problem is invalidating the cache. SQL Server 2005 provides query notifications through the Service Broker infrastructure. Using QN, your application can request the database to notify you when relevant data is changed – the database does this by posting the notification in the Service Broker, which is then picked up by your application’s event handler. This handler can then invalidate any application cache.

Can we use this approach on the Reporting Services cache? Yes, we can – using the exposed SOAP APIs! Using the FlushCache(String Report) method of the ReportingService2005 class will flush the cache for the named report (you have to specify the full path name). The ReportingService2005 proxy class allows you to call various web service methods exposed by SSRS.

ADO.NET Data Access Options

Every application works on data. And nowadays, almost every application works on XML. When connecting to a database using ADO.NET, you have a myriad of options: how do you decide which one is best?

Here's a quick guide:

DataSets and DataReaders are excellent if you are very comfortable with the relational model, and need high performance and complete control over your data. This is also great if you have data-bound UI controls in your application. Of course, if you need to hold data in memory (for example, WinForms applications with data binding), require client side sorting and searching, or require manipulating data from different sources, use DataSets. DataReaders are great for fast, read-only access to data.

On the other hand, if you want to expose your data to other B2B/B2C applications, or if you are handling unstructured, sparse data, use SQLXML. SQLXML is also great for loading bulk data into relational tables.

Architects...

Becoming an Architect is a journey towards becoming one who dreams of a solution, rather than the one who builds it.

Quote of the Day

It's not enough to get better. You need to get better faster than the others are getting better!

Thursday, May 10, 2007

10 Essential Competencies for IT Professionals

Came across this nice article by Jeff Relkin describing the 10 Essential Competenciesfor IT Professionals. Interesting to note that many of these skills are non-technical. Yet, how many of us take this seriously enough in our career growth plans?

Here are the 10 competencies, with my own comments sprinkled in...

#1: Understanding existing and emerging technologies
A great idea would be to google for "top ten technologies" for the year, and make sure you are on talking terms with these technologies! You cannot be a Master at all, but you definitely should aim to be a Jack of all!

#2: Designing technical architecture
#3: Integrating systems
Can you design your solutions to reuse and build on top of what is already existing? Is it extensible? Will it scale? Will it actually work?

#4: Understanding business practices, approaches, organization, politics, and culture
Lot of skills needs here, but one should be critically aware of politics of management, budget processes and priorities, and know what your managements wants to hear! One should be aware that the image you project (of yourself, your work, your priorities, the health of the project.. whatever) inside your teams may not necessasily be the same one you need to project to your management!

#5: Managing projects; planning, prioritizing, and administering work
Long term versus short term, urgent versus important. If you can master that, you are on the right track!

#6: Communicating and listening; gathering information
We are all consultants, we need to listen, understand and say the right things! No two ways about that!

#7: Focusing on results
Incremental results all the time. Don't chase perfection. Follow the 80-20 rule. Always ask yourself - could I deliver something more valuable to the customer in the same time? Remember, time is always at a premium!

#8: Thinking strategically
Think of the future, add value. Provide thought leadership; do not be a donkey worker!

#9: Influencing and persuading
From your customers to your managers to your reportees, it's all about communication and pursuasion!

#10: Being adaptable
Do not aim to be a guru in one technology - by the time you reach there, the world would have moved on! Be adaptable! Be focussed - on the change!!!