views:

139

answers:

5

I lead a team of six developers, and over the last year we've migrated over to a Silverlight/WCF/C#/EF/SQL Server architecture for our development. We've now deployed 5 or 6 small apps using this architecture, and we are currently working on a larger system.

We've developed our own little solutions framework which we use as a template for all our new dev. Productivity is pretty good. Still, I feel the pressure to deliver more functionality for less resource, and I'm wondering if there are additional tools we should be adopting.

We are committed to .NET and Silverlight, but when I read claims of "Ruby on Rails" delivering 10x productivity increases, it makes me nervous. Is there a broadly equivalent tool/architecture/pattern for .NET? Something high level that enables you to quickly deploy enterprise functionality?

+1  A: 

Personally, I'm not aware of any such tool for .NET. But I would like to offer some food for thought.

I would suggest focusing on your architecture overall and determine just how "componentized" your system is. For example, have you utilized design patterns within your architecture? Do you have specific, reusable data layer components? Specific reusable UI layer components? Specific reusable business layer components?

While such an architecture may seem idealistic, over time, you should be able to build a library of reusable components. Then, building future systems becomes nothing more than assembling the necessary building blocks with maybe some minimal customization work (think of legos, if you will).

Occasionally (and especially at first), you'll have to write and/or refactor existing components to create your library of building blocks, of course, but hopefully you'll reap the benefits in the long run.

Maybe examine your methodology too -- is your solutions framework basically your development methodology? Or is it focused strictly on architecture and design? Maybe if you alter your approach to architecture and design, your methodology should change as well, and vice-versa.

Hope this helps.

Justin Pinkley
I have to disagree with this. I have rarely seen this pay off. Simplicity is king and the good and well thought one usually gets you into reuse way faster than anything else. Maybe you do mean v. simple reusable pieces than are revealed while you code the project's features, but from the way its explained I don't think its the case. ps. once you invest way too much time designing the system, you go into 'I only have time to code/not think' mode, and no longer realize all the simple yet valuable reuse opportunities you come accross.
eglasius
"Simplicity is king" - so true, especially in enterprise dev
CraigS
+6  A: 

ASP.NET MVC combined with some ORM is analogous to Ruby/Rails in the .NET world. I've been doing agile development with ASP.NET MVC and LINQ to SQL for the past couple of years with good results. I'd attribute my biggest productivity gains primarily to switching to a test-driven development paradigm and investing heavily in story-based development in small, frequently released iterations. The big gain comes, not necessarily in developing software faster, but in developing the right software the first time -- leading to less rework and a high ratio of features used to features developed. Further, surrounding my code with unit tests allows me to continue to develop at roughly the same rate over time while untested or under-tested code in traditional methods leads to dramatic loss of productivity as complexity increases. ASP.NET MVC is better suited to this style of development than standard web forms. You could probably achieve a lot of the same level of testability with your WCF code.

tvanfosson
+1 similar here.
eglasius
+1  A: 

Clear spec.

TDD (Test driven development) mixed with MDD (model driven development)

Source Control (as SVN and Mercurial)

Bug tracker seperated by application

Kind of following of the reported issue and commits done.

1 person in charge of cleaning the noise of the resquest formulation (ex: 3 department whant 3 new features. They are all class as critical for each dept. but some can wait until next release)

Those are the "tools" that help the team that I'm a part of to stay on track.

Muffun
+1  A: 
  1. Ruby on Rails isn't that hot compared to .NET, the only advantage they had is that they started using an ORM (Active-Record) before .NET did.. But I see you are using EF, therefore you're pretty much on par.

  2. Use a continuous integration server. This will make a build automatically each time somebody submits anything to the source control. A nice thing to do is to create a web page that contains all the builds (by links) and have the integration server update this web page. This is a must in my opinion. Also make this web page show who checked what and when, and even show the coder's source control submit description. This will keep your developers honest. CruiseControl.NET is my personal favorite to do this (because it's free.)

  3. Use a bug-tracking system, such as JIRA. It's like $20 for a team of 10 I believe. You can also use bugzilla with is a cheapo open source one.

  4. Use Agile development techniques such as a daily 15 minute scrum to figure out what everyone's doing and get everyone on the same boat. Productivity is mainly a management / motivational thing, you don't want your developers to monkey around and get lazy. Also JIRA has a nice little agile component to it (it's called 'greenhopper') such as burndown charts etc.

  5. The biggest design pattern these days for WPF/Silverlight is called MVVM. There are also frameworks like PRISM, MVVM light, and MEF to provide architecture level patterns. Although the use of these frameworks have a steep learning curve in the long run they can help you out.

Shnitzel
+1  A: 

10x ... non sense, although you can definitely get 10x differences both ways depending on the teams involved on each side ^-^

ps. I had to say it, for a real+good answer check tvanfosson's one.

eglasius