Archive for February, 2008

Software Startups, the gorilla guide. Part 2

Wednesday, February 27th, 2008

In part 1 we spoke about getting started, and interacting with you customer. Today I’ll clear a few things up about cocktail napkin specs and the advantages of sitting on-site, amongst other things.
Also please note that what I’m saying in this guide might not apply to everybody, this works for me, and works well. I think smaller teams might benefit from some of these tactics.

Dangers of cocktail napkins
Like most things in life you would have to take the good with the bad. Cocktail napkin specs can be a potential hazard to any development process if handled incorrectly. Bear in mind that you make the notes as you’re discussing the requirements with the user. From personal experience, I’ve learned that hastily scribbled notes whilst listening to the customer can look like an extreme form of abstract modern art.

So it’s important to ensure you make the notes clear and readable. Also, don’t be shy to ask if Uncle Joe or Joe Jnr. has some documentation already explaining some of the processes; user created documentation can shed light on previously unexplored areas.

On-site vs. off-site
The dangers of cocktail napkin specs can be minimized by actually spending a lot of time on-site at the customer. Be honest, the most time wasted is time spent not really knowing what the customer wants, rather than chopping around in the code with the hope of producing something that resembles the Cookie Recipes requirements.

I find sitting on-site at least 60-70% off the time is extremely valuable. If something in you notes does not make sense, it takes 2 minutes to run down to Joe Jnr. and clear up the issue with him. With the requirement still fresh in your mind, you can get back to your workstation and produce the perfect solution. Also get Joe Jnr. to sit next to you and show him what you’ve done, if a change is required and it’s possible to do it quickly do it as Joe Jnr. explains it to you.

Once again, if sitting on-site is not possible, e-mail Joe Jnr. with an overview of how you see the problem, and then phone him. Clarifying issues can assist you in producing a well thought out solution.

If you’re not sitting on-site, try and produce a workable release every 2-4 days. This way when Joe Jnr. has a free minute he can have a look at that change you discussed earlier and get back to you with his feedback. Have a look at ClickOnce deployment, if you’re wondering about how to deploy your regular builds. Also if you do not want to release so often, make a screen cast. This way you can focus on the features/changes you created without the need to send the user the entire application. I discovered this fantastic open source solution that makes this easy.

Lose the red tape processes
I recently spent some time doing contract work for a company. To make a long story short they have a helpdesk system that tracks change and support logs. On this system they have a preferred release and release version; now looking at the data contained in the two fields, they look pretty much identical. But beware the brave man, dare you select the wrong values for these fields ;not that this would happen because only certain individuals can change them. The point I’m trying to make is that it took me 40 minutes to discern from no less than 4 people on what Release version and preferred release the log should be. I’m not saying the process is wrong, if it works, great! All I’m saying is keep it simple, keep it clear and precise.

I know processes need to be in place to protect both you and the customer. But too stringent processes could pretty soon leave you without any customers at all.

So…keep your processes lean and flexible, your customers will thank you for it. This brings me to another point, which is :

E-mails:the scourge
E-mail is a brilliant communication medium. But it still does not beat telephonic or face to face communication. In the above example, if someone had just walked to me, and explained what everything should be and how things worked, it would’ve taken 5 minutes. Instead a quagmire of misunderstood e-mails flew around for 40 minutes and eventually I placed the log on any status that the helpdesk allowed me to select and save.

When trying to explain something to Joe Jnr. via e-mail, always give him a call and discuss it as well. The customer will not feel helpless and dumb. Believe me there aren’t many things as bad as a customer that has a perception that he’s an idiot. In the word of Mr. Allan Cooper "Imagine users as very intelligent but very busy."

Frameworks, technologies and other technical jargon
Uncle Joe could not care less about what you use to write his system. Whilst on the other hand Joe Jnr. is a big fan of Microsoft and read about all the cool stuff you can do with .Net.

In my experience, most users could not give two ducks in a dry pond about what programming language, database or framework you use to develop their application. But in the interest of those readers that are a bit geeky, I’ll handle the technical considerations in Part 3.

That’s it for part 2, thank you for reading. Check back soon for part 3.

CSLA.Net: Step-by-Step – Web forms Episode II: The Update strikes back.

Saturday, February 16th, 2008

Welcome back! See I told you, you needn’t wait another 2 months for the next installment.

Today, we’ll have a look at updating an existing customer and adding a new customer via our web interface. I would like to mention that, these tutorials barely touch the surface of the CSLA.Net framework. To fully grasp the framework, buy Rockford Lhotka’s book Expert VB.Net Business Object, the value you’ll get by reading the book will definitely be worth the cost.

Also, to get a more detailed look at how to do things, be sure to check out the ProjectTracker project that comes with the framework.

Right, with that out of the way, let’s get started. Open the NorthwindWEB project; we created in the last post. Select the detailsview control, in my case it has the very original name of DetailsView1, and click on the little arrow top-right. Tick the Enable Inserting and Enable Editing checkboxes. It should look something like this:

clip_image002

You’ll notice that the DetailsView control now has 2 hyperlinks entitled Edit and New

image

You’ll notice that when you click on either of the links, it automatically changes the detailsview to edit mode and the hyperlinks’ text to either Update or Insert, depending on which link you clicked:

image_3

I’m just going to show you the quick and dirty way, managing your application state and object persistence is up to you.

Let’s first look at updating your customer. Open up your code view and add the following code:

Protected Sub dsCustomer_UpdateObject(ByVal sender As Object, ByVal e As Csla.Web.UpdateObjectArgs)
Handles dsCustomer.UpdateObject
Csla.Data.DataMapper.Map(e.Values, myCustomer)
myCustomer.Save()
End Sub

Remember we declared our Customer object, earlier. As soon as you click on update your changes will be saved. Now that was easy, wasn’t it?

Now for the Insert. In the global.asax file I’ve added the following in the Session_Start sub, this is to ensure I can persist the current object throughout the application:

Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
Dim myCustomer As Northwind.Library.Customer = Northwind.Library.Customer.GetCustomer(3)
Session.Add("CustomerObject", myCustomer)
End Sub

Next in the DetailsView’s ItemCommand Sub I’ve added the following:

Protected Sub DetailsView1_ItemCommand(ByVal sender As Object,
ByVal e As System.Web.UI.WebControls.DetailsViewCommandEventArgs) Handles DetailsView1.ItemCommand
If e.CommandName = "New" Then
myCustomer = Customer.NewCustomer
Session("CustomerObject") = myCustomer
End If
End Sub

and then in the datasource’s InsertObject sub add the following:

Protected Sub dsCustomer_InsertObject(ByVal sender As Object, ByVal e As Csla.Web.InsertObjectArgs)
Handles dsCustomer.InsertObject
myCustomer = Session("CustomerObject")
Csla.Data.DataMapper.Map(e.Values, myCustomer, "CustomerID")
myCustomer.Save()
End Sub

So what’ll happen is that as soon as you click on the new link. A Customer.NewCustomer Object will be save in your Session’s CustomerObject. The as the page reloads, it shows the Customer object stored in the session. This object is then saved to the database.

I hope this made sense, it certainly is a quick and dirty way of doing it. Check the Project Tracker’s web project to see a proper implementation.

Until next time..cheerio.

Visual Studio Tool for Office, oh my!

Tuesday, February 12th, 2008

If you want to see something really, really cool, start playing around with the new Visual Studio Tools for Office included in the latest Visual Studio 2008 release.

Something that used to be a real pain in the neck, when it came to integration work with office, were made extremely easy. The reason I started looking at integration with MS Office is I’m currently busy writing a funky little Helpdesk add-in for Outlook. It’s a simple app in-house IT teams can install for their users to submit support tickets, and this also allows the IT team and users to accurately track support tickets and their progress.

The application is accessed via a menu in Outlook:

image

The options for the Helpdesk add-in can be found by going to Tools>Options and clicking on the Helpdesk tab:

image_3

 

Yes, it’s not trickery! You can add tabs to the options form in Outlook! How cool is that?

So, go check it out…. You’ll like it.


Google Analytics integration offered by Wordpress Google Analytics Plugin