Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

Yazılım Projelerinin Başarısını Etkileyen Faktörler

Merhabalar, uzun zamandır bilgisayarımın karşısına oturup 2 satır bir şeyler karalamak için vakit bulamamıştım. Bugün hazır fırsat bulmuşken size bulunduğum yazılım projelerde karşılaştığım zorluklardan ve başarı faktörlerine ilişkin tecrübelerimi aktarmak istiyorum.

Öncelikle projeler ister büyük ister küçük olsun, herkesin bildiği gibi zaman ve maliyet çok önemlidir. İçinde bulunduğumuz teknoloji çağı göz önüne alındığında, hız çok önem kazandı ve pazara erken girebilmek rekabet avantajı sağlamakta. Bu yüzden bir yazılım projesinde gereksiz detaylarla vakit öldürmek bana sorarsanız vakit kaybından başka bir şey değil. Ama bu basitliği optimum seviyede tutabilmek de çok önemlidir. “Keep it simple but not simplistic“.

Çoğu iş yeri yazılım projelerinde WATERFALL(Şelale) modelini kullanırken, şimdilerde ise SCRUM çok revaçta. Ama bana sorarsanız kullandığınız metodolojiden ziyade, kendinizi rahat hissettiğiniz ve kurumunuza uygun olabilecek bir yöntem belirlemek çok önemli. Waterfall metodu işten çok süreçlere odaklanırken Scrum ise işe ve çalışır uygulamaya odaklanıyor. Günümüz ihtiyaçlarına Scrum daha çok cevap veriyor gibi görünüyor ancak burada çalışan insanların da kültürleri çok önemli, Scrum’ın prensipleri basit gibi görünse de uygulaması gerçekten çok zor.

Bence bu metodolojiler gelip geçici, yarın başka bir moda çıkacak ve Scrum’ı da unutacağız. Birileri verdikleri sertifikalar sayesinde servetlerine servet katacak :)  Tabi ki bunları bilmek gerek, artılarını eksilerini değerlendirip dağarcığımızı geliştirmeliyiz buna hiç itirazım yok. Çünkü bu işe kafa yormuş insanlar güzel pratikler ortaya koymuştur mutlaka. Ancak demek istediğim kendimizi bir kalıba sokmak için neden efor sarf edelim. Ekibimizin verimli olduğu yöntemleri araştırıp, belki de ekibe göre farklı yöntemler uygulayalım. Burada önemli olan metodoloji değil insan olmalı.

Diğer bir konu ise takım elemanlarının seçimi. Bu hepsinden daha önemli bence. Bir projeye başlarken o projenin zorluğu, süresi, ar-ge gerektirip gerektirmediği, Third parti firmalarla iletişim gereklilikleri, zaman, kalite, maliyet gibi kriterler değerlendirilmeli ve takım üyeleri bunlara göre seçilmeli. Tabi en önemlisi de daha önce bu konuda tecrübeli ekipte en az 1 kişi bulunsa iyi olur. Tecrübe gerçekten çok önemli. Daha önce proje deneyimi olmayan yeni mezunlardan oluşan bir takım, takım üyeleri ne kadar zeki olursa olsun başarısız olacaktır. Bu yüzden tecrübeli ve tecrübesiz takım üyeleri harmanlanmalıdır.

Genellikle projelere sıkışık deadline’lar verilmesi işin daha erken biteceği gibi saçma bir düşünceye sebep olmaktadır. Örneğin normal şartlarda 6 ay sürecek bir projeye 3 ay vermek bazen de ters teperek 9 ayda bitmesine dahi sebep olabilir. Verilen deadlinelar inandırıcı olmalı ki takım üyeleri bitirebileceklerine inansın ve ona göre kaliteden ödün vermeden işlerini yapabilsinler. Kısa sürede bitirmek için kaliteden ödün vermek, rastgele kod yazmak ileride daha büyük maliyete sebep olduğuna defalarca şahit oldum.

Önemli konulardan bir tanesi de ENTEGRASYON’lardır. Bazen bir projede zamandan kazanmak için Third parti firma yazılımları kullanılır. Bu kötü bir şey değil kesinlikle ancak bu kararı alırken çok dikkat etmek gerekir. Alacağınız modül öncelikle know-how ‘ı sizin işinize yaramayacak bir modül olmalı. Yazılımın çekirdeğini dış bir firmaya emanet etmek bazen çok riskli olabilir ki bazen önce maliyeti düşük görünen modül daha sonra sizden bakım ve ek geliştirmelerle birlikte kabusa dönüşebilir.  “Bir projede ne kadar çok entegrasyon varsa projenin fail olma olasılığı o kadar fazladır.” Ayrıca bakım ve hata çıktığında hangi modülden kaynaklandığını araştırıp bulmak da ayrı bir maliyet. O yüzden entegrasyon yapacaksanız çok dikkatli olmanız gerekiyor.

MOTİVASYON : En önemli konulardan bir tanesi. Siz ne kadar uğraşırsanız uğraşın mutsuz ve motivasyonu düşük yazılımcı iyi iş çıkaramaz. Bu yüzden gerek çalışma şartları, gerek ücret, gerek ekip içi arkadaşlık, gerek iş tatmini gibi daha sayabileceğimiz bir çok konuda takım üyelerini beslemek gerekir. Bazen çok önemli bir ekip üyesini kayda değmeyecek sebeplerle elden kaçırmanın maliyeti tahminlerin çok üzerindedir. Çalışanlara adil olanaklar sağlamak ve samimi olmak bunda en önemli kriterlerden bir tanesi bana sorarsanız. İşler bir şekilde yürür ancak, turnover’ın çok fazla olduğu IT sektöründe, tecrübeyi elde tutmak rekabet avantajı sağlayacaktır.

Şimdilik benden bu kadar.

 

 

 

Reklamlar

Ağustos 31, 2013 Posted by | Proje Yönetimi, Yazılım | , , , | 1 Yorum

PPM Workplan’da yanlış hesaplanan gerçekleşen adam gün düzeltmek.

Geçenlerde şirkette şöyle bir problemimiz oldu. Bir kullanıcının workplan’da schulded effort(gerçekleşen adam gün) da çok büyük bir değer yazdığını farkettik. Bütün timesheet’lerini tek tek taradım ancak workplan’daki değeri yazması çok zordu ve ppm’in bu değeri yanlış hesapladığını farkettik. Sorunun ise senkronizasyon bozukluğundan kaynaklandığını öğrendim ve bu işi tekrar senkronize etmek için aşağıdaki işlemleri yaptım sırasıyla.

Önce veritabanında aşağıdaki db scriptini çalıştırdım. Buradaki pfm_request_id senkronizasyonu bozuk olan işin numarası. 
Update pm_work_plans set source=’NEEDS_TM_SYNC’ where Project_id=(select Project_id from pm_projects where pfm_request_id=35893)
Daha sonra komut çalıştırmak için cygwin açılır ve aşağıdaki script’ler sırasıyla çalıştırılır. Alttaki scriptteki project no ilgili requestin project_id sidir.

 cd c:/ppm/bin

$ sh kPMTMSync.sh -projectno 34643 -username admin -password admin

Sonrasında problem düzeldi.

Nisan 10, 2012 Posted by | PPM | , , , , , , , | Yorum bırakın

PPM Service Pack Geçişi

Geçenlerde şirkette PPM 8.0 üzerine bazı sorunlarımızın düzeleceğini umut ederek Service Pack  geçelim dedik. Bunun için bütün uygulamalarımızda olduğu gibi önce test ortamında sonucu görüp bir sıkıntı olmazsa proda almayı uygun gördük.
Komutları çalıştırmak için yine CYWIN’den yararlanacağız. Bunun için
PPM bin dizinene CYWIN’i getiriyoruz.
CYWIN-> cd c:\ppm\bin

– Server CYWIN’den stop edilip PPM klasörü yedeği alınır.
sh kStop.sh -now admin

– SP paketim PPM home dizinine atılır

– kDeploy -i SP4

– sh kJSPCompiler.sh

– sh.kHtmlupdate.sh

– server açılır. sh kStart.sh

Aralık 25, 2011 Posted by | PPM | , , | Yorum bırakın

10 Adımda PPM prod ortamından test ortamına restore işlemi

Öncelikle ppm için bazı komutları çalıştırabilmek için
CYWIN (komut çalıştırmak için kullandığımız bir program) denilen bir programdan faydalanacağız.

1- CYWIN-> cd c:\ppm\bin ile ppm dizinine geliyoruz
2-Yine CYWIN’de sh kStop.sh ile prod ortamını ve test ortamını ayrı ayrı kapatıyoruz
3-DAha sonra PPM’İn iki şeması olan ppmXX_rml ve ppmXX_usr ‘ların prod ortamından birer dumpını alıyoruz.
4- Test db si üzerindeki eski şemalar drop edilir
5- Allta yazdığım CreateKintanaUser.sql ile ppmXX_usr kullanıcı oluşturulur ve yeni şifre verilir.
6- CreateRMLUser.sql ile ppmXX_rml kullanıcısı oluşturulur. (Şifre verilecek)
7-Altta yazdığım GrantSysPrivs.sql sorgusunu sys as dba olarak login olarak ppmXX_usr için çalıştır.
8- Testte CYWIN-> cd c:\ppm\bin ve sh kJAVACompiler.sh
9- Testte CYWIN-> cd c:\ppm\bin ve sh khtmlupdate.sh
10- TEstte CYWIN-> cd c:\ppm\bin ve sh kStart.sh

–$Project: Dev – Kintana$
–$Folder: system$
–$Workfile: CreateKintanaUser.sql$

/*
+=============================================================+
|            Copyright (c) 1995 – 2006 Kintana, Inc.
|                      All Rights Reserved
+=============================================================+
|
|    File Name:    create_knta_user.sql
|    Object Name:
|    Description:
|       KNTA User creation script
|
+=============================================================+
|
|  Notes
+=============================================================+
*/

PROMPT
PROMPT — Name of the ITG server database schema
DEFINE KNTA_USERNAME = &1;

PROMPT
PROMPT — Password of the ITG server database schema
DEFINE KNTA_PASSWORD = &2;

PROMPT
PROMPT — Name of the DATA tablespace
DEFINE DATA_TABLESPACE = &3;

PROMPT
PROMPT — Name of the INDEX Tablespace
DEFINE INDEX_TABLESPACE = &4;

PROMPT
PROMPT — Name of the CLOB tablespace
DEFINE CLOB_TABLESPACE = &6;

WHENEVER SQLERROR EXIT 1;

CREATE USER &KNTA_USERNAME
IDENTIFIED BY “&KNTA_PASSWORD”
DEFAULT TABLESPACE &DATA_TABLESPACE
QUOTA UNLIMITED ON &DATA_TABLESPACE
QUOTA UNLIMITED ON &INDEX_TABLESPACE
QUOTA UNLIMITED ON &CLOB_TABLESPACE;

grant connect to &KNTA_USERNAME;

grant create session       to &KNTA_USERNAME;
grant create database link to &KNTA_USERNAME;
grant create procedure     to &KNTA_USERNAME;
grant create sequence      to &KNTA_USERNAME;
grant create synonym       to &KNTA_USERNAME;
grant create table         to &KNTA_USERNAME;
grant create view          to &KNTA_USERNAME;
grant create trigger       to &KNTA_USERNAME;

— In addition to the above grants, the installer will ask for ‘grant select on v$parameter to &KNTA_USERNAME’
— for which you may have to connect as sys.

exit;

–$Project: Dev – Kintana$
–$Folder: system$
–$Workfile: CreateRMLUser.sql$

/*

+=============================================================+
|    Copyright (c) 1995 – 2006 Kintana, Inc.
|                      All Rights Reserved
+=============================================================+
|
|    File Name:      KNTA_CREATE_RML_SCHEMA.SQL
|    Description:    Create the RML Schema on Install/Upgrade
|    Author:         Timothy Lam
|
+=============================================================+
| This script does the following to setup the Meta Layer Schema:
| 1. Create RML schema
|
| Usage (As System user):
| knta_create_rml_schema [rml_user] [rml_pwd] [DATA_TABLESPACE]
|   [TEMP_TABLESPACE]
|
| The script will connect you as Kintana User, so you must have
| Kintana user created.
* *************************************************************** */

— create RML User

— already connected as system

PROMPT
PROMPT — Enter the name the ITG RML schema to create
DEFINE RML_USERNAME = &1;

PROMPT
PROMPT — Enter the password the ITG RML schema name
DEFINE RML_PASSWORD = &2;

PROMPT
PROMPT — Enter the DATA tablespace
DEFINE DATA_TABLESPACE = &3;

SET SERVEROUTPUT ON SIZE 999999;

WHENEVER SQLERROR EXIT FAILURE ROLLBACK;

CREATE USER &RML_USERNAME
IDENTIFIED BY “&RML_PASSWORD”
DEFAULT TABLESPACE &DATA_TABLESPACE;

grant create session to &RML_USERNAME;
grant create table to &RML_USERNAME;
grant create view to &RML_USERNAME;
grant create synonym to &RML_USERNAME;
grant resource to &RML_USERNAME;

exit

–$Project: Dev – Kintana$
–$Folder: sys$
–$Workfile: GrantSysPrivs.sql$
–$Date: 11/12/08 1:11:56 PM PST$
–$Revision: 4$


— HP PPM Center: GrantSysPrivs.sql

— This script is provided as part of the Mercury ITG installation and upgrage
— to help you grant the necessary SYS level privileges.  When prompted you can
— run the following command:

— sqlplus sys/<sys_password>@<sid> @GrantSysPrivs.sql <db_user>

PROMPT — This script is provided as part of the HP PPM installation and
PROMPT — upgrade to help you grant the necessary SYS level privileges to the
PROMPT — ITG Schema.  In order to do this the script needs the name of the
PROMPT — Schema (DB_USERNAME in server.conf)
PROMPT

define db_user = &ITG_SCHEMA_NAME;

grant select  on v_$parameter to &db_user;

— Needed for Statistic Calculation
grant execute on dbms_stats   to &db_user;
grant select  on v_$mystat    to &db_user;
grant select  on v_$process   to &db_user;
grant select  on v_$session   to &db_user;
–grant execute on DBMS_SHARED_POOL to &db_user;

exit;

 

NOT : Scriptler anlaşılacağı üzere alıntıdır.

Aralık 24, 2011 Posted by | PPM | , , , , , | 3 Yorum

PPM’de veritabanından paydaşların(stakeholders) listesini almak.

Merhaba arkadaşlar , daha önceki yazımızda PPM nedir kısaca bir giriş yapmıştık . PPM’in insanları en çok zorlayan tarafı eminim ki raporlama kısmıdır. Veritabanı oldukça karışık ve bir sorguyu oluşturabilmek için tırmalamak gerekebiliyor. Ben de bu konu ile ilgili Türkçe kaynak olmadığı için bulduğum pratik bilgileri sizlerle zaman içinde paylaşıyor olacağım.

İlk konumuz bir SELECT ifadesi. Projelere eklenen paydaşların yani Stakeholders olarak atanan
kişilerin bir listesini alabilmek. Aşağıdaki sayfaya Projenin ilk sayfasına geldikten sonra en üstte yer
alan Katılımcıları Yapılandır(Configure participants) butonu yardımı ile ulaşabiliyorsunuz.
Sorgumuz ise aşağıdaki gibi.
1. Get delimited list of user ID’s for all stakeholders of the specified project
select PM_UTILS.get_prj_stakeholders() from dual
2. Get delimited list of all project stakeholder usernames for the specified project
select PM_UTILS.get_prj_stakeholder_usernames() from dual
3. Get delimited list of all project stakeholder full names for the specified project
select PM_UTILS.get_prj_stakeholder_name_list() from dual
Buradaki Request id sini bildiğimiz bir işin Project id sini aşağıdaki sorgu yardımı ile bulabiliriz.
select project_id from PM_PROJECTS t WHERE t.PFM_REQUEST_ID=

Ekim 25, 2011 Posted by | PPM | , , , | Yorum bırakın

HP PPM (Project and Portfolio Management) Nedir?

Kodun içinden biraz sıyrılıp farklı bir konuda kısaca bilgi vermeye çalışacağım. Ürünümüzün adı : PPM , HP’nin talep yönetimi(demand management),proje ve program yönetimi(Project-Program management) üzerine geliştirmiş olduğu esnek bir yazılım. Ha nerden merak saldın derseniz , şirkette yazılım geliştirme süreçlerini bu araç ile takip ediyoruz. Bir çok noktada sıkıntıları olsa da , veritabanı çok karmaşık olsa da genel itibariyle güzel bir program. Altyapı olarak JSP ve Oracle kullanıyor. Windows ve Linux işletim sistemlerinde koşabiliyor.

Program genel itibari ile 2 taraflı 1.Arayüz (JSF) ve 2.Workbench

Workbench yani admin panelinde bütün süreçlerin tanımlaması yapılıyor , alanlar ,userlar, yetki grupları , istek tipleri,validasyonlar,notifikasyonlar vs.

Ben örnek bir senaryo üzerinden yazılımın nasıl işlediğini anlatıp, programı hiç bilmeyen ve görmeyenler için bir örnekleme yapacağım. Örneğin şirketimizde işlerin büyüklüğüne göre süreçleri 3’e ayırdık : DEĞİŞİKLİK,GELİŞTİRME ve PROJE. Bu 3 tip içinde farklı süreçler tanımlanıyor. Değişiklik sürecindeki adımlarımız sırasıyla : Atamalar,Analiz,Yazılım,Fonksiyonel Test,Son kullanıcı kabul testi Dağıtım Onayı,Canlıya Geçiş,Kapanış. PPM Workbench’te her bir adımı bir workflow step olarak tanımlıyoruz. Her bir adımda hangi user group’un onayına gidecek kime mail gidecek belirliyoruz.

Daha sonra DEĞİŞİKLİK süreci için hangi alanlar gerekiyorsa hepsini tanımlıyoruz örnek vermek gerekirse bu sürecin analisti kim,yazılımcısı kim,planlanan adam günü kaç,hangi ekibe ait bir süreç vs bunları da Request ler altında tanımlayıp bu request şu workflow’u kullanacak diye tanımlamasını yapıyoruz.

PPM Web Arayüzü

PPM Workbench Arayüzü

Sürecin tanımlamasında çok detay var ancak ben sadece PPM nedir,neye benziyor ve ne işe yarıyor biraz canlandırmak istedim. Eğer firmanızda PPM kullanıyorsanız ve sorularınız olursa bana mail adresimden ulaşabilirsiniz.

Detaylı bilgiyi HP’nin kendi sitesinden de edinebilirsiniz.

http://www8.hp.com/us/en/software/software-product.html?compURI=tcm:245-937033

Ekim 14, 2011 Posted by | PPM | , , , | Yorum bırakın