A Way To Distributed Extreme Programming
Life is soo pragmatic, in our daily life as a software engineer sometime we just closely think in technical aspects. For example do you remember how you are passionate to learn a technical things about the technology, you really like to play the cube in SSAS 2008, you really like to build better XAML, or even you really like to prepare your Azure ready application in your localhost.
Developing software nowadays seem fascinating and easy. Visual Studio as a tools in Engineering layer provide much (and much) quality toolbox, API, and compiler. The problem is when your are thinking out of the box, when you need to build better software with your team. The are plenty problem such as
- Codes syncronization between peers
- Dividing the task, workitem, and roles
- Communication and cognitive problem
Those problems are old problems, every one might be know the answer. let me lists the answer for you
- A Visual Studio Team system (whoaa…. you are really MSFT geek if you answer this)
- Software Engineering (hemm….)
In this post i will discuss about the second answer. Well as you know, Software Engineering is consisting three main components. A Process, A Method, and A Tool. Tool? yeah there are a plenty out there starting from my fav like Smart Assembly, JetBrain stuffs, and of course Visual Studio. A method is some guidance that you might expect to build better software in the term engineering like Extreme Programming, Scrum, Rational Unified Process, or even Hajar Bleh method. And last but not least is a process, process is a framework style to build a software like Iterative, Incremental, Waterfall… or you said MSF
The picture above is my way to visualize the Software engineering as multi layer component. Take a look the picture the tool is a “tiny” component but in the upper posistion. Process and method is really old in many pragmatic developer they know the xaml but they can’t answer the different between incremental and iterative… and they simply said
“Oh boy.. client wont ask you about that.. even they don’t see your codes.. so let’s we build as fast as possible..as pragmatic as possible, with the best quaility tool”
Let’s think more deeply the above statement in the term.
- Team environment development (when two heads and more will cause more slash, crash, and pop up idea)
- Quality, Scalability, and Performance (1000 concurent users, code refactoring for performance, profiling and load testing)
- Right software for Right People (your client like your software because is effective to tackle their business problem, and efficient in their UX)
Rite? yes …. you have to answer YES…and how to achieve that, simple the answer is software engineering. The additional problem is people in developing country like us don’t have time to maintain CMMI level IV document, we are limited time and effort to draw a huge UML diagram, and furthermore client always need the software right here right now.
Agile process (a combination from Iterative and Incremental process) is the answer for that additional stuff, you can see alot people love Scrum, Sprint, Extreme Programming, etc. Many of them need great communciation skill, cognitive level of preference, and collective ownership of the system. SO what the deal, the deal is simple.
- Communication and knowledge sharing is the first class in nowaday software engineering. That’s why the VSTS or Team based IDE is birth with Agile template to make your Agile is more streamlined in the term of communciation
- Simple and quality process is needed for startups and small ISV. That’s why Microsoft still release Microsoft Solutions Framework, that’s why IBM and HP buid their own solution framework.
- Guidance pattern and method is a must, that’s way a PNP (Microsoft Pattern and Practices) group still exists, Nokia professional community is still breathing.
But we are in the country where the sufficient human skill is still exist, where the software is a “luxiourus” commodity but with limited investment. Many of IT investor / ISV build a community to educate passionate people to fullfill tomorrow meanwhile some of them prefer to build a software in a place where the actual cost is low but the with the sufficient quality people (or you simply said remote development).
Remote development or distributed development is another problem in communication and cognitive level, onsite is different than remote. There are plenty problem about this, and of course when God created the problem they give us brain to think the solution. My proposed solution is called Distributed Extreme Programming. You can read my thought at architect column in Microsoft Architecture Journal Vol 20.
Keep passionate..keep learning..
Ciao , Ridi