You are currently browsing the category archive for the ‘Development’ category.
There is little doubt that organic farming is the right way to farm – how could it be otherwise? Organic farming does not rely on toxic input anywhere in the production chain and results in a product that is better, healthier and more natural for consumers. Even though it is practiced on a smaller scale, organic farming is gaining market share of a discerning consumer where the invisible aspects of the end product are considered superior.
The software craftsmanship movement is a lot like organic farming – a well crafted, testable, separated solution using patterns, practices, tools and conventions understood by all software craftsmen is, without a doubt, the right way to build software.
Organic farmers are probably, in a way, better farmers than their inorganic counterparts. An appreciation for the entire ecosystem is required to fight off parasites and disease – wild plants are encouraged around fields to keep vermin away and livestock roam free over sparsely populated lands to fend of the diseases associated with being cooped up. Inorganic farmers, while having to understand more about the science of high intensity farming and all the products and equipment available on the market, have less of a need to understand the holistic natural environment.
Likewise, the self-proclaimed members of the software craftsmanship movement are generally (and on average) better developers than their cubicle bound corporate counterparts. These developers spend personal time learning new languages, techniques and patterns – continuously improving their skills and pushing their own craftsmanship. While a corporate developer may tinker with the latest tool demonstrated by the product vendor after sipping the (possibly toxic) Kool-aid, the software craftsman with pick apart and debate with his peers while pointing out that the already available open source framework is superior anyway.
Inorganic farmers would scoff at the thought of being considered less of a farmer than their organic counterparts – after all, there is nothing trivial about managing a highly mechanised farm covering thousands of hectares. They would rightly argue that there is more to inorganic farming than taking a soil sample to a lab and matching it up with barrels of chemicals. Inorganic farmers will also point out that organic farming, on its own, cannot cater to the needs of the market – billions of people need to be fed and often this needs to be done in an environment that has substandard land fertility, erratic weather patterns downright nasty bugs. Besides, organic farming is slow (land needs to lie fallow) and risky (disease can wipe out entire crops).
Corporate developers, while acknowledging and sometimes holding in high regard the software craftsmen, are fairly convinced that the pure approach advocated does not work in their environment. Corporate developers have legacy systems, tight deadlines, users who want nothing more than a spreadsheet and, unfortunately, an entire multinational corporation that is fairly dismissive of the IT cost centre – where individual ability is less important than vendor position in Gartner’s magic quadrant. Corporate developers have a special set of needs that have less to do with quality of the end product than budgets, quarters, politics, non-coding architects, committees, fascist data centre operators and a whole bunch of stuff that renders code quality, maintainability and craftsmanship quaint and somewhat pointless.
The biggest argument against organic farming is the cost. Luckily discerning consumers are being educated and becoming prepared to pay a premium for not being unwittingly poisoned, but the cost of producing a certain quality of product with available resources is always going to be higher than the inorganic counterpart.
Writing good software is complex and hard and therefore expensive. Although elite developers will be able to churn it out quickly, the effort and skill is too high for your average corporate development shop. While in the long run this may be toxic (costly) for their employers, the application needs to get out the door today and paid for in this quarter so a bit of junk food may be in order. After all, things can be detoxified later when the application is rewritten.
I don’t know this for certain, but I am sure that organic farmers hang out at organic farmers markets (or wherever they hang out) and lament the upgrade of their favourite seed spreader to double as a (shock, horror) pesticide spreader. “John Deer has gone evil” they will say, “What an epic fail! John Deer should encourage people to do organic farming”.
The developers who hang out in corners of the Internet flaming the latest offerings, betas and blog posts from large vendors are not ‘better’ developers than everyone else, nor are they ‘elite’. They are organic developers that are trying to make the software world a better, safer and less toxic place for us all. The organic developers also forget, occasionally, the tools, equipment, skills and arability of the corporate or casual development environment that is not interested, or ready, to fully embrace organic development.
As a consumer, if I tried to only buy organic food I would limit my choices and be hindered by cost so I am glad to have both and hope that the big commercial farmers are gradually learning some of the lessons learned in organic farming.
Disclaimer: I was brought up on small farms and can milk a cow and plough a field, but I don’t claim to know much about farming – organic or otherwise. Please do not take farming advice from a developer.
Given a good enough specification software can be developed anywhere in the world, making it attractive to do it where people are cheapest, so where does this leave first world developers with expensive lifestyles?
The cost of developing software is largely in the cost of human resources. Development workstations, tool licences, source control and bandwidth are negligible compared to the burn cost of the actual developer and it stands to reason that cheaper salaries should make for cheaper software. The cost of people is influenced by a number of factors, such as the seniority, but what is interesting is the income demands of skilled people that have expensive lifestyles. It is this phenomenon that has created the primary driver behind the outsourcing industry where people are clearly cheaper to employ in Bangalore than in London.
If we were to believe that same-skilled people are a fraction of the cost in another country because of their lifestyles, the obvious question to ask is why isn’t all software development outsourced and virtually no developers living in expensive parts of the world. Making use of outsourced skills is a bit more complicated than simply mapping developer roles to commodity resources regardless of location and the quality of the final deliverable is affected by more than just the individuals’ technical abilities.
However, the use of outsourcing models is increasing and will continue to increase. It is the desire of ‘elite’ developers to work better and more efficiently that drives the practices and culture that allow developers to work remotely – which could be anywhere. Use of test driven development, continuous integration, collaboration technologies, cloud deployments, GIT-style source control, Google Wave and other technologies are becoming mainstream and used, not by the select few, but the masses of developers spread all over the globe.
So why is there still on-site and insourced development work still available in London or New York? How should developers align their careers in order to be safe from the axe when some large chunk of business gets moved to a cheaper location. Below are some styles of development that still seem to retain the services of expensive people.
1. Shortest Route
A lot of one or two man consulting gigs that exist for a few months cannot make use of remote resources because the business wants the work done simply, fast and now. The effort and time involved in finding remote people, writing a specification, getting all the infrastructure in place and the communication latency is simply too much overhead to bother with. It is easier to have someone who can come on site, have a meeting, sit down and get coding. The sort of work tends to be short-term, fiddly and with little disciplined project management.
2. Big Branded Consulting
Big consulting companies have the scale to offer services that include any combination of people and skills for fairly high rates and are able to pull it off because of their brand and penetration in the customer. Big consulting companies have some really good people (often not even technical) that are able to open up opportunities and allow commodity developers to step in and do the work – keeping the customer is happy. (Of course they can also switch out to outsourcing models when it suits the deal.)
3. Product Centric
Being a specialist on some specific product doing ‘configuration’ development allows developers to be seen as part of the overall expense of implementing a particular package, rather than a per hour development resource. It doesn’t even matter if the work is technically difficult, as long as it requires an intimate understanding of a product for which there are few generally available skills.
Getting data from one system into another, no matter how simple the technology, is no trivial task. There are undocumented ‘business rules’ that need to be catered for, confusing mapping and changes to processes that have to be uncovered on site and in person in order to coax an interface into existence.
Some businesses need to be close to their development teams, be that for real business reasons (such as financial traders) or because the business model is trying to change the world – in some cases it is good to have a trusted development team with a track record. These teams are generally responsive to the needs of the business and are able to churn out systems and features that delight the users at a predictable and valuable pace.
The startup culture is more than just about getting software developed for the lowest possible price. Startups need to be agile and responsive and all staff at a startup have to have a special relationship that goes beyond handing out development tasks. Startups, by the nature of how they operate and market seem to need to be located physically close to where the buzz is happening in order to get attention.
7. Bleeding Edge
Some individuals or groups of developers are able to market themselves as leaders in a particular technology, stack or approach and find that work will always come to them. This group doesn’t have it easy though – what is bleeding edge now is mainstream tomorrow due to their own efforts and they have to continually reinvent themselves and discover new paradigms to shift. Although a lot of developers aspire to be in this category there is little room and it is highly competitive.
So if you are a developer sitting in a first world country wanting to justify the rate that matches your lifestyle ambitions you need to be constantly aware of the value that you are adding to the people who are paying you to write code. If you are looking at making lots of money being a generic, commodity developer then you face stiff competition from literally millions of people who can do the same thing.
Make sure that you find a style that is valuable and has a future as you chart your career.