Pair Hour

My experiences show that pair programming is not only a development practice, but a culture you learn and master by practicing. I’ve been working in development teams where pair programming is not adopted well. In most cases we prefer working alone and that causes issues related with communication problems from time to time.

To improve our pair programming skills in addtion to other development practices, I organized and facilitated a private coderetreat with 18 developers few weeks ago. I got very positive feedback from attendees showing that I am on the right direction. Coderetreat could be repeated several times a year (per month, maybe) but it is not feasible to organize it very frequently. So I tried to find new activities to improve our pair programming skills. This activity should be simple to implement by the beginners. That’s why starting to pair program full time seems not to be good option, at least at this stage.

What I found is pretty simple to implement: Pair Hour. Pair Hour can be described as “pairing (at least) 1 hour each day for 1 week”. Here are the rules:

  1. One volunteer should organize this activity, observe pairs and facilitate meetings.
  2. Every developer should develop whatever they need to do via pair programming 1 hour each day.
  3. The work could be any kind of development, like new feature development, bug fix and design.
  4. Practice TDD and Ping-pong programming as if you are in a coderetreat activity.
  5. Your pair could be your teammate, or someone else from any other team.
  6. In a daily standup meeting, each developer finds his/her pair. People can also share their experiences if they want. The meeting should not exceed 15 minutes.
  7. You should switch your pair everyday. (if you have less than 6 developers in your team, you will need pair with the same person for several times)
  8. If you cannot find a pair from your team, you should ask from people on other teams.
  9. Pair hour will start on monday with a opening ceramony.
  10. Pair hour will end on friday with a closing ceramony.
  11. In closing ceramony, we will do retrospective to share our experiences.

Closing ceramony is the time you collect feedback and adapt accordingly. You can either continue “pair hour” activity on the next weeks, or wait for few weeks and try again. This is the route that I plan to follow lately.

Next week we will experience “pair hour”. I will add what we experienced with you.

Tagged

SOA Manifesto Turkish Translation

I’ve been using SOA for several years. I encountered SOA Manifesto few days ago and as a responsible Turkish guy, I translated it into Turkish.

Let me share the translation with the Turkish speaking people as follows.

Last update date: 10th of April, 2014

 

SOA Manifestosu

(Manifestonun orjinal metnini görüntülemek için tıklayınız)

Servis yönelimi, yaptığınız şeyleri çerçeveleyen bir paradigmadır. Servis-odaklı mimari (SOA) ise servis yöneliminin uygulanması sonucu ortaya çıkan bir mimari tipidir.

Değişen iş ihtiyaçları ile örtüşen bir şekilde, artan çeviklik ve maliyet verimliliği ile sürekli sürdürülebilir iş değeri üreten organizasyonlara servis yönelim uygulayarak yardım ediyoruz.

Çalışmamız ile:

  • Teknik strateji yerine iş değerine
  • Projeye özel fayda yerine stratejik hedeflere
  • Özelleşmiş entegrasyonlar yerine gerçek anlamda birlikte çalışabilirliğe
  • Özel amaçlı uygulamalar yerine paylaşımlı servislere
  • Optimizasyon yerine esnekliğe
  • Başlangıçtaki mükemmellik arayaşı yerine evrimsel iyileştirmeye

öncelik vermeye karar kıldık. Soldaki maddelere değer vermekle beraber, sağdaki maddeleri daha değerli bulmaktayız.

Yol Gösterici İlkeler

Şu ilkeleri takip ediyoruz:

  • Organizasyonların sosyal ve güç yapılarına saygı gösterin.
  • SOA’nın eninde sonunda birçok seviyede değişiklik talep edeceğinin farkında olun.
  • SOA farklı şekillerde benimsenebilir. Çabaları yönetilebilir ve sınırlar içinde anlamlı değerlerde tutun.
  • Ürünler ve standartlar size ne SOA’yı, ne de servis yönelim paradigmasını verir.
  • SOA çok çeşitli teknoloji ve standart kullanarak gerçekleştirilebilir.
  • Endüstri temelli, genel geçer kabul gören, topluluk standartlarına uygun kurumsal standartlar ve politikalar geliştirin.
  • İçeride çeşitliliğe izin verirken dışarıda benzerliğin peşinde koşun.
  • İş ve teknoloji paydaşları ile işbirliği ile servisleri belirleyin.
  • Mevcuttaki ve gelecekteki kullanım şeklini de göz önünde bulundurarak servis kullanımını en üst seviyeye çıkarın.
  • Servislerin iş gereksinimlerini ve hedeflerini yerine getirdiğini teyit edin.
  • Gerçekteki kullanımına bakarak servisleri ve servislerin düzenini evrimleştirin.
  • Farklı oranlarda farklı yönleri değişen sistemleri ayırın.
  • Gizli bağımlılıkları azaltın ve tüm dış bağımlılıkları dayanıklılığı arttırmak ve değişimin etkilerini azaltmak için yayınlayın.
  • Tüm soyutlama seviyelerinde, her servisi birbirine bağlı ve yönetilebilir işlev birimleri çevresinde düzenleyin.

Yazarlar

Ali Arsanjani
Grady Booch
Toufic Boubez
Paul C. Brown
David Chappell
John deVadoss
Thomas Erl
Nicolai Josuttis
Dirk Krafzig
Mark Little
Brian Loesgen
Anne Thomas Manes
Joe McKendrick
Steve Ross-Talbot
Stefan Tilkov
Clemens Utschig-Utschig
Herbjörn Wilhelmsen

Ana Sayfa    İmza Atın    İmzaları Görün    Manifesto Hakkında    PDF    Yazarlar Hakkında    Teşekkür    Duyurunun Videosu    Çevirmenler Hakkında

Creative Commons Attribution-Share Alike 3.0 Unported License
Copyright © 2009-2013, SOA Manifestosu Yazarları
İletişim:moderator@soa-manifesto.org

Tagged ,

Using BitBucket as Assignment Submission System For The Courses

When I was studing computer science in the Marmara University, we were sending the project documents and the codes we developed in the courses to the instructors via floppy disks. The deadlines were strict. If we missed the deadlines, the projects were rejected. In some cases, we were losing grades on the every single day after the deadline. For example, if we submit our projects 5 days late, we were able to get at most 50 points.

I know that project submission method is different in many other universities. In some courses, people send files to instructors via emails. In others, there exist submit pages and students upload the files via these pages. If the deadline is reached, submit button disappears and no one can submit after the deadline.

Sometimes students are able to submit projects by using command line tools, like we use in coursera submissions.

Even though these methods are handy and pretty easy to use, instructors cannot gather the following useful information very easily.

  1. Instructors cannot follow the status of the project without asking the project team members.
  2. Instructors have lots of throubles while running the projects if the project is not build in correct way.
  3. Instructors cannot understand how project is developed if there is no efficient documentation.
  4. For group projects, instructors cannot detect who has worked on the development of the project and who does nothing.

The world is changing and even the philosophy and principles of software development are changing. We have to find a new submission method that should make the instructors’ life easier and should let the students develop software as if these are open source projects.

BitBucket Based Submission System

Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. The source code of all projects and course assignments has to be maintained in version control systems.

Git is a distributed revision control and source code management (SCM) system with an emphasis on speed. Git will be used for managing the codebase and the project. Therefore, it is important to learn how git is used in detail.

Bitbucket is a web-based hosting service for projects that use either the Mercurial or Git revision control systems. Bitbucket offers both commercial plans and free accounts. It offers free accounts with an unlimited number of private repositories (which can have up to five users in the case of free accounts). The project teams will use bitbucket.org for hosting code repositories.

Let’s say that you are in a team of 3 students and you are to build a software as an assignment of your course. The rules for managing code and submitting the assignments are as simple as follows:

  1. Each team member should have a BitBucket account.
  2. One member should create a team via “create a team” page of bitbucket.
  3. The admin of the team account should add the other members to the team settings. The team should have a separate name and an email address. No one except the instructors and the team members is allowed to join to the team.
  4. Account of the instructor should also be added to the team as a team member.
  5. Important notice: The free plan in BitBucket gives you a team account with five members on an unlimited number of private repositories. That’s why, it is not possible to let the 6th developer access the team’s private repository.
  6. If it is an assignment (and the code has to be kept as private due to course regulations), a private repository should be created.
  7. If there is no need to keep the source private (and allowed by the instructor), than it is not mandatory to create a private repository. The team can create a public repository to make the code open to public. In that case, the team size and the number of people who can access the public repository can exceed 5 members. Note that it is important not to accept pull requests from outside the team.
  8. Code should be maintained in BitBucket. Instructors can check the commit history and the code to guide the team throughout the project.
  9. Read me” file has to be available in the root of the project describing the details of the project, such as how we can build and run the project, how to install prerequisite technologies, etc.
  10. All documents (i.e. analysis documents, design documents, presentations, papers, progress reports, etc.) related with the project should also be committed to the project repository. That allows the teams to version documents as well.
  11. Any Vagrantfile, or config file can also be managed in the repository to make deployment and delivery easier.
  12. The team members should push their commits to the private repository. That let’s the instructors follow who works on the project and who does nothing.
  13. When the deadline is reached, there is no way to stop the team from developing the project. But that’s fine..
  14. When the instructor wants to evaluate the project, the instructor schedules a cronjob at the time of the deadline that clones all repos (this can be done with a single POST to the API) for later examination and grading. [Thanks Erik van Zijst for the tip]

Why BitBucket, not GitHub

The main reason to prefer BitBucket is the ability of users to create unlimited number of private repositories for free. On GitHub, only paid users are able to create private repositories.

Actually both Github and BitBucket have offerings to university students. If you register with your university email address and verify it, BitBucket offers you unlimited free private repositories. Also GitHub offers free micro plan, which lets the students be able to create 5 private repositories for free.

BitBucket and Git 101

I got several requests to give information about how to use BitBucket and Git from scratch. That information will be valuable to the students or to the ones who has not been experienced git or Bitucket before.

Please check the documentation section git-scm.com for learning git. Knowing git is the main prerequisite for following the submission steps. After you learn how to install & configure git, checkout, commit, push and pull commands, it is time to use BitBucket for your projects. Creating a repository and pushing your codebase to it is as easy as follows.

  1. Log on to BitBucket.
  2. Set up a repository.
  3. Click clone in the webapp in your repository and copy the command to your clipboard.
  4. Paste the command into your terminal (assuming you have git installed).
  5. Copy all files for your project into the directory you cloned.
  6. Type ‘git push’ and enter your BitBucket password.

I recommend to read Atlassian’s BitBucket 101 Tutorial, basic git commands to use BitBucket and tutorial for first time BitBucket and git users if you need more details.

Conclusion

The main objective of BitBucket based submission system is to let students manage their assignments as if they are open source projects and make the submission super easy by not submitting anything. The evaluation process will become easier than the ones in old submission methods. That will be good for both instructors and the students.

Edits

  • [03.10.2013] The 14th step is updated with the warning of Erik van Zijst. For more info, please refer to his comment.
  • [04.10.2013] Added information about the offers BitBucket and GitHub have for university students.
  • [07.10.2013] Added “BitBucket and Git 101” section to give more beginner level information
Tagged , ,

Scrum Mind Map XL (Extended version with the details from Scrum Guide)

I prepared a mind map about Scrum with the help of several references few months ago. It contained main Scrum topics with few details to let us understand Scrum. You can get it from the link below.

I had been thinking about improving the content of the mind map by adding details from the Scrum Guide prepared by Ken Schwaber and Jeff Sutherland. After reading the Scrum Guide again, I prepared an extended version of the mind map by adding more details and extra concepts that are not stated in the guide. I marked extra concepts that are not stated in Scrum Guide in red in order not to cause any confusion. You can find the mind map below.

Scrum Mind Map XL (Extended version with the details from Scrum Guide) [PNG]

I hope the map can help you as much as it helps to me.

Tagged ,

New blog about Agile Development in Turkish: Agilistanbul.com

Few months ago I started to blog about Scrum, XP, Software Craftsmanship and Agile (including development practices and organizational transformation) in my native language Turkish: Agilistanbul.com. That was a good step in my professional life because I got a chance to share my ideas with the people in Turkey. I feel that there exists a lack of Agile resources in Turkish. Even though the majority of users interested in Agile knows English, I am sure that people feel comfortable when they read the concepts in native language. Now people read my words and feel my passion and energy on building better organizations and team developing software.

I will continue to share my experience and knowledge in this blog in English not only about Agile but also about other programming related topics as well.

Tagged

The Elephant in the Room: Motivation

I had a talk today in “Agile Approach in Project Management” seminar of IPYD (İstanbul Proje Yönetimi Derneği / Istanbul Project Management Institute) today. I introduced several practical tips to improve motivation throughout agile transformation. Here are the slides of my presentation. You can download the slides from SlideShare page too.

I met with great people, especially with Ahmet Taşpınar. I hope I can meet them in the future again.

Git Branching Model for Efficient Development

I had a talk at Sony about Git Branching Model today. I tried to summarize what I learned from the current implementations of git workflows and tried to share my experiences. I would like to thank to people who provides detailed information about git workflows in their blogs.

A Successful Git Branching Model” by Vincent Driessen
A Git Workflow for Agile Teams” by Rein Henrichs
Merge or Rebase” by Atlassian SourceTree
git pull –rebase by default” by Dean Strelau
A Rebase Workflow for Git” by Randy Fay
A Deep Dive into the Mysteries of Revision Control” by David Soria Parra

Tagged

The Engine of Software Development: Testing and Test Driven Development

I had a talk today in GittiGidiyor/eBay about testing and test driven development. I really enjoyed during the talk, especially while my colleagues was sharing their own experiences. The synergy was awesome.

I hope you also enjoy the slides. As written in the presentation, “do not let your software rot, write tests to keep your software alive”…

Tagged ,

Professional Software Development, Practices and Ethics

I had a talk in Marmara University, Faculty of Engineering, Computer Science Engineering department to senior (4th year) students today. I enjoyed and loved it. Even though it was a little bit long (2:45 hours), I enjoyed every second. Thanks a lot to all the ones who came and listened.

Tagged , , ,

Unzip a specific folder of a compressed file & exclude some folders from extraction

You have a huge zip file with thousands of files in it. You want to extract a specific folder inside the zip, but you also want to exclude some files and folders from the extraction.

Assume that compressed_file.zip file contains the following folder and file structure:

You can check the zip content by unzip -l compressed_file.zip command.

  • path/
  • path/to/
  • path/to/extract/
  • path/to/extract/file1.txt
  • path/to/exclude
  • path/to/exclude/file2.txt

You want to extract just path/to/extract/ folder, but want to exclude any folders under exclude folder.

unzip compressed_file.zip path/to/extract/* -x *exclude*

When you run the command above, you will only get the following content.

  • path/
  • path/to/
  • path/to/extract/
  • path/to/extract/file1.txt

With the command above, only path/to/extract folders exist. Exclude folders do not exist.

By the way, the performance is lighting fast:) Enjoy!

Tagged