I’ll be attending the AltNetConf. Convenient for me that it’s in Austin, TX. It’s an open space conference, and I consider it the founding conference of a conversation that is “Alt.Net”. I’ll be proposing the topic: What are the Alt.Net principles?.
The definition of Alt.Net isn’t defined yet. It’s not even at a point where I can explain what it is and actually have other agree with me.
Since I know the guy who originally coined the term, I have some insight into what David meant, but I’m going to propose some principles that, together, should be the definition of Alt.Net.
First, Alt.Net inherits Agile, and IS Agile. Therefore:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
- Excellence and quality
In a world of wizard-generated, disposable software (disposed 2 years later by necessity, not choice), Alt.Net focuses us on excellence in the software we create. While the world may pay for and accept software that lives for 2 years before becoming utterly unmaintainable, we don’t accept shoddy work. We know that we can deliver high quality software faster than others can deliver low quality software, so we accept no less than the highest in quality. We strive for excellence through solid engineering practices and a high level of software education. Coincidentally, Extreme Programming helps in this area, but Alt.Net does not specifically _mean_ XP.
- Alternative Vendors
A common theme in many .Net shops is they are “Microsoft” shops. In other words, if it doesn’t come from Microsoft, they won’t use it. This makes no sense. Microsoft is not a large enough company to be the vendor to the whole world. .Net is a great platform, and we as a community have chosen the platform and choose to participate in this segment of the industry. We strongly believe that 3rd party vendors complement the .Net platform in a way that can contribute to excellent working software. In fact, some 3rd party offerings are superior to Microsoft’s offering. For instance, in a strive for excellence in an e-commerce website, a team may choose a mature O/R Mapper like NHibernate to accelerate team speed and produce a flexible data layer; however, Alt.Net does not _mean_ ORM. Open source software is a source of excellent 3rd party alternatives built on the .Net platform, and it should be used over Microsoft alternatives when they contribute to excellence; however, Alt.Net does not _mean_ open source.
- Joy in our work
We know that we will produce better software if a team is motivated and morale is high; therefore, we use libraries, tools, and practices that add joy to the working environment. We abandon or correct libraries, tools, and practices that make it a drag to work on the software. For instance, many find that Visual Studio is a bit slow to work with and that adding Resharper to the IDE adds a high level of joy while working with .Net code; however, Alt.Net does not _mean_ Resharper.
We know that we will never know everything there is to know. We strive for a greater understanding of software through studying successes and failures of the past as well as the present. We educate ourselves through many sources in order to bring the most value to our clients. We keep up with other platforms, such as Java and Ruby, so that we can apply their good ideas to .Net development and increase the quality of our .Net software. The technology is always changing, but the knowledge accumulates. We know that the knowledge applies no matter how the technology changes. With knowledge comes humility because without humility, knowledge would pass us by.
The above are principles, so they are intentionally abstract. Below, I’ll list some items that are concrete. These items apply the principles but are more directly applicable:
- Read more than just MSDN magazine and MS Press. Authors like Feathers, Fowler, Martin, Evans, etc have a lot to give (Knowledge)
- Use Resharper. It makes working with Visual Studio a (Joy). But if another vendor comes along that does even better than JetBrains, consider switching
- Use NUnit over MSTest, Subversion over TFS SCC, Infragistics/Telerik over in-the-box controls, RedGate over in-the-box SQL tools. Each of these is a better alternative to that which Microsoft provides (Alternative Vendors). Use NHibernate over hand-rolled stored procedures and especially over DataAdapter/DataSet, but if EntityFramework proves to actually be superior to NHibernate in a meaningful way, consider using it.
- Use a responsible application architecture. Don’t put everything in Page_Load like you see demonstrated at MSDN Events. Use knowledge to create an application that can stand the test of time and not be rewritten every 2 years. Deliver (high quality and excellence).
- Automate every repetitive task; builds, tests, deployments, etc – excellence and joy
The concrete examples could go on and on, and I hope AltNetConf produces a long list. I’ll be interested in having my proposed principles accepted by the community there or revised into something better. Either way, I’d like to get to a point where there is an accepted definition of Alt.Net.