Current Favourite Books for .NET Developers

Posted on by Andrew | Leave a comment

I have been asked a couple of times recently to give the list of books I think are most important.

I have collated this list by asking a series of other people. I have tried to get them in the right order.

The list is for a .NET developer working in an agile environment.

Top 10 books (in a rough order of my preference):

  1. 1. Clean Code (a *must* read)
  2. 2. The Art Of Unit Testing (with examples in .NET)
  3. 3. C# In Depth (second edition)
  4. 4. Clean Coder
  5. 5. Agile estimating and planning
  6. 6. Working effectively with legacy code
  7. 7. Agile estimating and planning
  8. 8. Testing ASP.NET Web Applications
  9. 9. Continuous Integration in .NET
  10. 10. Head First Design Patterns

 

More Involved but ultimately rewarding

  1. 1. Continuous Delivery
  2. 2. Implementing Lean Software Development: From Concept to Cash

 

Posted in Junior Developers | Leave a comment


CMZero

Posted on by Andrew | Leave a comment

Our newest product is nearing an alpha release. We are pursuing the leanest of lean start-up methodologies, so I guess the first release will be full of bugs and be primarily for us to use as internal customers. Watch cmzero.com, at the moment it is just a home page. We are still designing the logo.

The product is designed as a Content Management System purely for small blocks of text, as small as labels on a submittable form. The aim is to remove many of the horrors of coding that resx files show. Also will hopefully mean that people can get away from having to release new mobile apps in order to change a few labels.

In order to make this work properly for customers, we are going to have to iteratively improve this product. We are looking at getting some trial sites using our products. One of the key issues will be caching, and how to make sure that sites can work when our product is unavailable, we don’t anticipate our servers being down but we need to allow for network issues between environments. We think these can all be overcome relatively easily.

The next big step will be to get content easily editable and manageable. We have concentrated on localisation and version control so far, it will be interesting to see if that really helps!

I think we need to get a few free customers first and then look into a freemium model. Going back to the Lean Startup model, we will learn quickly if that is really the best way forwards.

Posted in New Projects | Leave a comment


Knowledge of the system – worst reason to promote someone?

Posted on by Andrew | Leave a comment

One of the reasons a lot of developers get promoted at work is due to “knowledge of the system”. They know how everything works for a project, company or similar and therefore can perform tasks that brand new developers can’t.

On the face of it this seems to suggest that giving promotions to developers with this experience would seem prudent. I have begun to witness instances where this may well not be the case. As someone who has been promoted in the past where experience is a factor I can see both sides.

Any problems with this approach seem to begin when someone is seemingly able to “make things happen” so they get recognition. Tasks that some developers take a day to achieve can be done in a few minutes by an old hand. Is this person doing the task as well as the other guy and is the system such a mess that only people who have experience know the way through the maze. In an ideal world everyone should easily be able to make most things happen. Maybe a system shouldn’t need one person who knows it all, maybe it should be more manageable. If a system has been well built and the code well maintained, in theory any competent developer should be able to work on a system. The first few weeks of any large system are not going to be the most productive but 6 months in this should be the case.

When you get a situation that a system has been constructed badly and is hard to maintain, the person who has been their a long time has had to have had a part to play, in some cases “blame”. Therefore to promote them is to possibly en-grain more bad practices and reduce chances of the system improving. Thus it could be the worst reason to promote someone?

The counter argument to this occurs when someone has been with a company for a long time and  has been under immense pressure to get something out of the door from management and has had to make compromises to the standards they would have liked to maintain. Maybe they have now acquired the trust that is needed for them to argue for changes and be listened to. Maybe any new changes need a deep knowledge of the system in order to know the gotchas that will mean a restructure/refactor/etc is possible.

Thorough knowledge of the system also requires a very good memory, a skill not everyone has and is why you will meet some developers who have been with a company for a long time and don’t know anywhere near as much about a system. Often people who know systems have put themselves forwards to achieve tasks as well, another good feature.

I guess this post is going to provide little to no benefit to developers judging their peers but I hope someone who is having to make similar decisions from outside the development team, about a developer, might consider things a little more carefully.

Posted in Uncategorized | Leave a comment


Training Junior Developers

Posted on by Andrew | Leave a comment

More recently I have been thinking through the best way I can work to get Junior Developer’s trained up and useful members of a development team. Especially with outsourcing as a consideration. I am not sure there is any silver bullet as experience really does tell. However trust, time and exposure to senior developers is important.

Firstly I think understanding what the junior wants to do is key. If they want to be a front end developer then focus on that rather than database skills. Round pegs don’t fit square holes and the learning will be much slower. It is still important that they value the surrounding skills but a little knowledge is enough, especially when they are starting out. You can’t learn everything.

The next most important thing for me is getting them to learn how to take responsibility for themselves. If a developer knows they sorts of things they are expected to be able to achieve, how they should get help and how they should get things checked, they have the skills to produce. Once a junior can produce something of value, they will get a boost in confidence. From here encouraging them to manage their own learning is key.

Senior developers and managers should definitely suggest things for a junior to learn but really a junior should manage this themselves. A mentor is a good option as it provides a focus for a junior developer to work with. A manager or mentor might seek agreement on what is going to be learnt, in order to be able to test progress but the junior has to want it. In truth study out of work is pretty key. Study might mean working on sample projects, open source projects or even paid side work.

In London we are very lucky to have a range of places hosting great conferences, talking shops, presentations etc. Get Junior developers along to these. They will show the range of skills and passion out there. Hopefully it will help light the fire.

I still believe we need to have some form of structure to help Junior Developers get a foothold in the industry but the usual people management techniques apply nonetheless.

The challenge is very acute in outsourcing. I think the only way it can work is if the Junior developer is colocated with good and open Senior Developers. As much as I have tried to motivate from across the internet, it is really all about the people you interact with on a daily basis that can make it happen. Basically I haven’t got this to work yet!

 

Posted in Junior Developers, Uncategorized | Leave a comment


Tech companies getting vocal about school Comp Sci

Posted on by Andrew | Leave a comment

Today there has been a lot of publicity about the announcement from many tech companies, including Google and Microsoft, about the poor teaching of Computer Science. The BBC reported it as such: http://bbc.in/txcz7a.

I really agree with the premise of this article, in that we don’t really teach the right things to our kids. I have long argued that teaching touch typing would be one useful starting point: http://www.artificialgold.com/blog/2010/11/16/touch-typing-cure-for-saving-front-line-service-in-government/

However teaching programming is an over simplified concept. I think teaching databases and some simple scripting is appropriate. However I would think that for most young students, they simply don’t have the appetite for programming whilst at school, even during their A levels. Getting Maths, English and Science is much more important. I didn’t really learn programming until I was 22, I had good exposure to it before then, part of my Maths Degree, including a very useful placement year as part of my degree but still didn’t get the fire.

I think that people do realistically need to be taught on the job, with better structures in place. There is definitely no harm in refining the school courses but I think the real problem exists with the path into work.

An accountant, lawyer, engineer, HR professional, purchasing professional, doctor etc all have a fully planned route into the profession. Programming is less defined and subsequently less suited to this structure but as a career is currently at the other extreme; read a book on your own and try and find a job. In fairness there are some graduate schemes and certain companies that really look to do this right. However I have been to quite a few talks by noted people in the London Tech Scene and none ever think about this as a key issue. Indeed at one talk by Fred George of Forward, on Programmer Anarchy, it was clear that a new developer would really struggle to survive. The definition of a junior developer was someone contributing to user groups or open source projects. They just wanted to leach the best programmers from other companies (and it would be tempting for most!).

I think we should consider formalising graduate progression into development but it wont be easy. A good start could easily be the great and the good at least spending more time thinking about this.

The reason it is not happening is that training someone up takes time and can be a distraction from the day job. However not doing it means you are going to have to do a lot more yourself. There are even things in the way we code that could make things easier. Actually adopting simpler coding architectures could be one (technical point I agree).

Overall, great to hear this initiative but I think we need more focus on progression into developer careers too. It is not an easy proposition though.

 

Posted in Junior Developers | Leave a comment


Continuous Delivery, key to success?

Posted on by Andrew | Leave a comment

I was asked to reply to Paul Stack’s post here: http://www.paulstack.co.uk/blog/post/is-implementing-continuous-delivery-the-key-to-success.aspx

His question was whether Continuous Delivery is the key to success of an development project. It was an interesting point from a small business or project start-up perspective.

Read my comment on the post for a full opinion but basically I think all these types of approaches are important and start-ups should trust their technical experts when they advise investment in these things. However getting a something live is the key, and is really the main driver for Continuous Delivery anyway.

My beliefs on this sort of thing are pretty much driven by the Lean Principles. Getting, things used as early as possible is the key. Continuous Delivery can really help but for true start-ups it might not be that useful as the first thing to do, but I would suggest you keep it in mind and instill it as soon as possible.

Posted in Continuous Delivery, New Projects | Leave a comment


Continuous Delivery

Posted on by Andrew | Leave a comment

Recently we have been taking much more interest in Continuous Delivery. Working on early stage start up projects continuous delivery is pretty much assumed. You put code up the server all the time and don’t really think about it. Getting new features and early SEO traffic is more important than stability.If you don’t have a lot of traffic you can live with the downtime for a release and even be prepared to release a bug you didn’t find in testing. In these environments I often find releasing code up to live can happen at least once a day.

Not having much traffic at the start makes this risk pretty low. However you can’t really carry on like this forever. As soon as you have even a steady stream of traffic to your site you will want to have much higher up time and lower risk of releasing bugs. This is when Continuous Delivery becomes more of a challenge. I have recently read “Continuous Delivery” by David Farley and Jez Humble (http://amzn.to/qSrrgo).
This is a detailed book with many different topics but the key ones I think are most pertinent for small businesses are automated testing and continuous integration. Most projects now use Source Control but Continuous Integration is still not adopted widely enough.

Automated testing is, on the face of it, expensive for a business owner to sign off. But they really do stop the releasing of bugs being so easy and mean that you can  more confidently put code up to live faster. As we mainly work on web projects, acceptance tests for us are all about automating the browser. We can get our main features properly tested and then run automatic scripts against them. This allows our developers to run these when they make changes to certain areas of the site and for our them to be run all the time against our code base. As soon as one fails, all the developers must stop to find out what has gone wrong.

Automated testing is hard to do right but once you have the right techniques and infrastructure in place it does get a lot easier. I have also found it is making me design pages in a cleaner way, if a page is becoming hard to test then it is probably doing too much.

Continuous Integration is more the software development manager’s dream. I can get our developers all working together and then be instantly aware when one of them has made a breaking change. I get an email and my dashboard goes red. Again sponsors of projects don’t get all that excited about this sort of thing and it can be a hard sell but any informed project sponsor should insist on this being in place. If code that wont build is committed then I know, if a unit test fails (suggesting something is coded wrongly) then I know, if automation tests are failing (suggesting the site functionality is broken or changed) I know. I can also add other checks in such as code cleanliness and so forth. It means I don’t have to micro manage my developers and also they know they need to work in such a way to get work to live.

There are many other areas of continuous delivery of interest but I am not going to cover them all now. I can only leave you with a recommendation to read the book!

Posted in Continuous Delivery, Continuous Integration, Uncategorized | Leave a comment


Specflow for Restaurant Sale project

Posted on by Andrew | Leave a comment

I have been interested in Web Automation for BDD  in Web projects for some time. I have had exposure to Cucumber using Capybara in one .NET project but in truth I always found that running a team of .NET developers on a Ruby code project quite tough.

Recently I have been doing more with Specflow and Watin, specifically on our www.restaurant-sale.co.uk project. The benefit over Cucumber being that through our team we have very little Ruby experience. Indeed we even investigated recruiting .NET developers with Ruby exposure, that proved very difficult! With Specflow and Watin our existing developers have been able to get up to speed much easier.

Also as all our developers are familiar with .NET code, I have been able to enforce all the SOLID principles and comfortably get refactoring working well. Our normal Code Review process has enforced this. Notionally Specflow also seems to run faster than Cucumber with Caybara.

One other annoying thing about Caybara is the fact that you need to run older versions of Firefox. Watin works with IE and other browsers.

I am not saying that this approach is the best for all teams, more that if you have a team wanting to get up to speed with Web Automation for your acceptance tests, getting a .NET team to learn this concept AND Ruby at once is a tough ride.

Realising this is making me wonder about revisiting MSBuild rather than Rake scripts for my builds. That is another decision though!! I may just use IronRuby and .NET precompiled components.

One thing I will say though is that Web Automation is now more and more accessible to all teams, there are many options so get doing it!

Posted in Acceptance Tests, New Projects | Leave a comment


Restaurant-sale.co.uk going live

Posted on by Andrew | Leave a comment

Our latest project www.restaurant-sale.co.uk is now going live! It is a vertical based Business Sales website. It focusses on restaurant sales.

Restaurant Sales are a tough business for business agents and getting in front of a dedicated restaurant buying audience is key.

Artificial Gold are the sole developer and a minority shareholder in this project. The main shareholder is Neil Pearce, a business sales agent.

Together, hopefully, the business will be a success! We are the technical partner so I am happy to detail our technical details:

  • MVC3 Website
  • SOA structure
  • Fluent NHibernate Data Access
  • Unit Tested, Integration Tested (using Sql Lite)
  • .NET 4.0
  • Structure Map DI
  • Rake scripts
  • TeamCity

 

Future plans for the development suite include

  • Cucumber Automated Testing
  • Google Location Mapping and JQuery API

 

We plan to use location based searching for v1.1 of the site. We are aware of the sensitivity of exact locations for businesses for sale in terms of employee security and business reputation so we are going to address this concept with real sensitivity. We went down the route of a property type location search at first and this just didn’t fit the business. So we have ripped it out for v1 and after our research will attack it in v1.1

Any thoughts? Let us know!

Andrew

PS: Buying a domain name is so hard and took us ages to agree on, what are your thoughts!!

Posted in New Projects | Leave a comment


Recruiting overseas for specific skills

Posted on by Andrew | Leave a comment

I am in another recruiting phase for a particular website. It has been a mixed journey so far. For technical types this will be a ASP.NET MVC website using TDD or BDD.

For cost reasons collocating in the UK would not have been feasible, I still think this is the most ideal solution if you have enough money. Therefore I have been trying to outsource the development.

I had started working with a company in the Philippines but their interest in the project waned when the necessity for TDD became a blocker, they had tried to recruit experienced TDD of BDD developers but seemed to have very little success. The next conversation was about training their existing developers but that proved too tough to pull off.

Since then I have advertised the job on odesk and had floods of applicants! This was not that surprising but showed the level of talent out there. The next challenge is working out the best value developer on the site to do the job, do you get what you pay for on here? At the moment I have some good candidates.

Another route I have taken is try to and find suitable candidates through linkedin.com. At the moment I have not had much response but I have been able to target the exact skills in certain of their groups. Recruiters have long targeted the groups I have been a member of and I will see how that route goes.

One other successful route I have taken, more for the design elements of the project, is my existing network. I am having the design done by an old employee in India. This is great as I know I can trust the level of work, however he is not able to work full time for me.

I guess this is not of much specific interest but hopefully will be of some interest to anyone looking to explore the different technical recruitment avenues available.

Posted in Uncategorized | Leave a comment


: Really. Maybe we should travel Monday and come back Thursday? Up for Baseball though

2012/05/13

Mothers Day in the US means a holiday...

2012/05/13

Best 404 page about...

2012/05/11

Join : Get $25 free trial and help alleviate poverty. via

2012/05/07

Join : Get $25 free trial and help alleviate poverty. via << Great Idea!

2012/04/30

That worked well. Couple of small issues when regenerating feature files but closing VS down and starting again seemed to fix it

2012/04/24

Excellent. Out of town this weekend but will try that early next week. Looks like a good migration path. Thanks!

2012/04/20

reason being that until I can get all developers onto specrun and licensed etc it is tough to switch fully

2012/04/19

one thing I would love is ability to run either NUnit or SR against my feature files. Would provide me an effective migration path.

2012/04/19

See for video on basic functionality. Very enlightening.

2012/04/15