2014年3月20日木曜日

Redmine、ちゃんと使ってる?

結局RemineやJIRAがもてはやされ、デファクトスタンダードになりつつあるのって、ビジネスのスピードが上がったからだと思うんだ。

なので、その意義は情報をオープンにすること、企画と開発など部門間をシームレスにすることにある。


旧態依然としてたスタイルをチケット管理システムに置き換えただけではそのメリットが十分に生かされてるとはいえない。

とはいえ個人的には、所謂TiDD的な使い方とは別に、チケット管理システム活用の意義は大きいと考えてもいる。
期限と担当を明確にできるという点、さらにはタスクがオープンになるという点だけでも、価値はある。



つーか本質・原点はそこなのかもしれない。

2013年10月17日木曜日

テスタブルコード>>>>リーダブルコード

だな。


人の作ったコードの単体試験項目を作りながらそんなことを考えた。


リーダブル≒テスタブルであると思うが、
可読性というのは定義が非常に曖昧だ。

そこで、テスト駆動ですよ。
実装者にテストコード(UnitTest)を義務付けることで、
テスタブルに書くことが習慣づくはず。


コーディングは正解のない世界のため、
スタイルやポリシーによる差異が発生するのは仕方ないと思う。
それを最低限揃えるために規約を設けたりするわけだし。

だけどね、もしプロとしてコードを書くなら
それよりも優先されるのはマナーだと思うんだ。
一生そのコードのメンテも自分でやるならいいけど、
きっとそうじゃないよね。

だから、プロダクトコードはテスタブルでリーダブルじゃなきゃいけないのだ。


人の作ったコードの単体試験項目を作りながらそんなことを考えた。


ドキュメントはない。
いや、腐るほどあるのだが開発者が欲しい情報はない。
そもそも単体試験はホワイトボックスが基本なのだから、
実装担当者と異なる人が担当するのは効率・品質の観点からしても
いかがなものかと思う。


人の作ったコードの単体試験項目を作りながらそんなことを考えた。



(単体)テストが嫌いっていう技術者は多いけど、
それってテストしにくい作りになっているからかもしれませんよ。


これ以上は愚痴っぽくなるのでこの辺で。

2013年8月30日金曜日

アジャイル手法批判の多くは的を射ていない

ウォーターフォールはガチガチで、
アジャイルはユルユルだという風説の流布はやめていただきたい。


(スクラムでいうところの)スプリントでやることは、
基本的にはウォーターフォールプロセスになります。

アジャイルは開発スコープを絞ってイテレーションし、
インクリメンタルに開発するプロセスだというだけです。

テンプレに当てはめれば、
要件定義→設計→開発→テスト(→リリース)と進めるのは変わりません。

※ちなみにテスト駆動という手法もありますが、あれは開発をドライブさせるためのものであり、テスト駆動だからテストしなくてよい、ということにはなりません。

もちろんアジャイルマニフェストにあるように、
アジャイル開発はドキュメントよりもソフトウェアを重視するのが基本思想です。
ただし、あくまで「より重視する」だけです。


そもそもドキュメントは成果物の話なので、
それは各プロジェクトごとに個別に定義していくものであるはず。
(アジャイル開発=ドキュメントを作らない、ではない)

まぁ、言ってしまえばドキュメントが充実している=ガチガチなプロジェクトっていう図式すら多くの場合成り立たないのですが


仕様変更への対応も同様で、イテレーションプロセスであるため、
「受け入れ(対応し)やすい」というメリットがアジャイルにはあります。
しかし、それと「受け入れるかどうか」はまた別の問題で、要望・変更管理の話です。
(一般的に優れたSEであれば、ウォーターフォールでもやっているはず)


ガチガチかユルユルかは品質の観点なので、
プロジェクトがQCDの優先度をどう置くかの話であって、
プロセスの話ではありません。


ではウォーターフォールのメリットは?
やりたいことが明確に定まっている場合は、
ウォーターフォールで一歩ずつ着実に進めたほうが効果あるかもしれません。

しかし、やりたいことが明確に定まっているエンドユーザーなど現実的には存在しません。
(もちろん、エンジニアが引き出していくのは前提に置いたとしても)

それこそ、単純に既存のものを移行するような場合くらいでしょうか。
(その場合でも、移行リスクの大きさによってはメリットとデメリットが逆転するでしょう)


上記の点を踏まえれば、
「アジャイル開発は儲からない」「赤字になりやすい」という批判が、
(少なくとも理論上は)成り立たないことが分かるはずです。
※導入にあたって、高いハードルを超えなければいけない現場が多いのは否定しません。

だから私はアジャイルに希望を見出しているのです。


2013年7月18日木曜日

「Agile Conference Tokyo 2013」に行ってきた

Agile Conference Tokyo 2013に行ってきた。

もうね、かっこよくブログにまとめることは無理だと思い知ったので(笑)、
思ったこと感じたことをただつらつらと書くことにする。

[基調講演]

戦略としてのカンバン: ビジネスイノベーション のために

アジャイルを実践するには組織として理解していることが重要である。
ビジネスモデルに適しているか、という点から考えなければいけない。

今までの自分を投げ出せるかどうか。
IT部門を切り離しているのすら時代遅れである。
IT・ビジネス・テクノロジーが一体となっていないといけない。
ごもっともな意見である。

エンジニアリングですら実現方法の一つでしかない。
そこを踏まえて開発会社は自らの存在価値を見出していかなければいけない。

アプローチ

・リーン・スタートアップ
・ビジネスモデル・イノベーション
・継続的デリバリー
の融合へ挑戦する

そこでカンバンですよ。

ユーザストーリーの本質を考える

バックログのマネージメントをしがちになってしまう。
未来のことは書いていないことを意識しましょう。
ユーザストーリーに疑問を持つこと。
なぜ、そのストーリーが必要なのか?
そこに思考をシフトするのだ。

危機感を持っていない人はダメです。
ばらばらのものを組み上げるのがイノベーションではないっ!



[Session 1]
アジャイルな企業のTo Beモデルを提示する

Scaled Agile Framework (SAFe)のご紹介

うーむ。。

アジャイル開発の大きな魅力の一つが、
エンジニア一人ひとりがよりプロダクトの価値に密接に関わることだと思っている。

システマチックに仕上げていくことで開発が楽しくなくなってしまうのであれば、アジャイル開発の魅力そのものが失われてしまうのではないか。

・アジャイルプロセスを取り入れました!
・(生産性とか)成果出しました!
じゃ意味が無い。

少なくともそれは、僕が魅了されたアジャイル開発ではない。
大手企業は皆こんなかんじなのかな。。



[Session 2]
スクラムと品質

若手のいるチームでの成功事例。
面白かったんだけど、やっぱり少しシステマチックな香りがして。。

目指すところはボトムアップ型の自律組織であるはずなのだが、
なんだかそんな感じもしなかったな。

ただし、効率的な教育を行えるという点においてもアジャイル開発が有効だってことの裏付けにはなる講演。

あとね、やっぱりプロダクトの価値向上についてが語られない。
個人的にそこがとても大事なんだと思うんだけどな。

ドキュメントよりソフトウェアに価値を置くという思想は、
そもそもそこから来てるんでしょ?



[特別講演]
エンタープライズ規模におけるカンバンの運用

これが今回一番面白かった!

上司が変わると仕事のやり方が変わるのは嫌だ。
そう、だから現場からボトムアップしていくのだ。

かんばんは改善のためだけの道具ではない。
仕事を整流化する。
滞留する真因は何なのか。
それを明らかにすることに本質がある。

改善の目的とは、
・全社的な人作り
・共通な価値観
・共通な仕事の仕方

所詮組織を形成するのは人なのである。
個人のモチベーションが上がるようにしないといけない。

常にやり方を変えていくんだ。
毎日がイノベートなんだっ!

開発だけでなく営業戦略につながるカンバン。
組織横断なアジャイル。
やっぱり一気通貫の世界は憧れるな。。

導入はやはり上層部とコンセンサスをとっておくのが理想。
そもそも今の組織を変えたいか変えたくないか。
支える人がいないと続かない。

振り返りは業務観点だけじゃない。
ここでも人重視。いいなぁ。

KPTで発言が出てこないなら、それがチームの問題である
改善したいという思いがあるのか?
挨拶、勤務態度など基本的なところから取り組む
種をまけばいつか花が咲くのだ

そのためのファシリテーターだよな、うん。

組織横断のカンバンとか、無理ゲーかもしれないけど、
成功事例を提示されることで夢を描けるのだよ。



[Session 3]
大規模分散アジャイルを支えるプラットフォーム

スクラムオブスクラムの話とか始まっちゃうと、
まぁちょっと待ってくれ、ってなるな(笑)

なんとなくこれまでの経験上、IBM関連の講演は自分にはあってないみたい。。

あ、自分が今仕事で使ってる一人かんばん(笑)にペンディングステータスを作らないと。
優先度高いけど、外部要因で止まってるタスクを今まで放置しちゃってたのよね。



[Session 4]
コンパクトなチームでのアジャイル開発とその実践

開発にだけフォーカス当ててちゃダメ。
サービス全体のアジリティを上げていく。

で、サービスのスコープを広げた時に、
フルスタックエンジニアは見つからない。
育てるのも大変。

テクノロジーの理解×適切なツールで解決しよう。

結構面白そうなツールも紹介されていた。
一番具体的だったかも。

cacoo

名前は知ってたから、結構有名なのかな。
講演では特に触れられなかったけど、今度触ってみよう。

pivotal tracker

電子カンバンかな?
複数のストーリーをエピックとして束ねられるらしい。
bugzilla・githubと連動できるとは言っていたけど、
redmineと連動できないのかなぁ?

ただし付箋かんばんでアナログもやってる。
アナログ大事。
オレもそう思う。
アナログだからこそのメリットは間違い無くある。

つーか、jenkinsに話しかけるとテストしてくれるプラグインとか熱いな

herok

非機能要件のプライオリティーが高いと、
開発チームにとっての負荷は高くなる。

専任エンジニアがいるならAWSはいい選択肢だけど、
小規模チームだとそれは難しいため、herokを導入したそうな。

料金はAWSとくらべてどうなんだろ?



[Session 5]
事例から見るアジャイルの失敗と成功

変更管理が重要。
変更分を考慮したスケジュールをスプリントに組み込んでおく。

作業の詳細化(タスクブレーク)が非常に役立ったとか、
どや顔で言われても。。ウォータフォールだってやんなきゃだめでしょ。

つーかコレができないマネージャーとか、
何をマネージメントしてるのかと問い詰めたい。
#まぁ実際現場で出来てる人、ほとんどいないのは知ってるけどね。。

開発ワークフローのブラッシュアップっていうところを、
KPTに入れるのはよさげだ。

なぜアジャイルなのかをきちんと考えることが大事。
個人的に強く言いたいのは、ドキュメントは動かないのだよ。

仕様決定者全員が集まって合意を取る場所は必要。
開発チーム以外も含めて、プロジェクト関係者全員に参画・当事者意識を求めるのが
アジャイル開発なのだ!

まぁとどのつまり、
アジャイル開発はやりがいや楽しさを与えてくれるかもしれないけど、
相当な厳しさも連れてくるのだ。

読んで時のごとく「スプリント」。
だけど、ずーっと全力疾走なんて人間はできないのです。
チーム状況を見つつ、その辺の折り合いもちゃんとつけていく技量も求められますね。

2013年6月13日木曜日

「アジャイル開発におけるリーダーシップとは」に行ってきた

絶えない技術革新が進む業界のドライブ感とは裏腹に、
GoogleやAppleではない小人たちは大分追い詰められているように思う。

小人の中の更にひよっ子の自分にとって、
これから先もIT業界で生きていくための解が
「アジャイル」というキーワードに隠されている気がする。

そんな思いから、
「アジャイル開発におけるリーダーシップとは」なるセミナーに参加してきた。
#5/23だから大分時間が経ってるな。。

セミナー情報
講演資料

自分が感じたこと、思ったことを整理するために書いているだけなので、
本編とは関係あるようでなかったり、その逆であったりします。


プロダクトオーナーの方が重要じゃね?

いわゆるスクラム開発のリーダーという観点だと、
スクラムマスターというのが一番しっくりくるのは分かる。

ただそれが所謂これまでのリーダーと大きく違うかというと、
そんなことはない気がする。

トップダウン型のリーダーであっても、
その人が真に優れているなら、
プロジェクトを推進するためにファシリテーターになることもあるだろうし。
#実際そういう人たちを見てきたと思う

スクラム開発で本当に難しいのはプロダクトオーナーではなかろうか。
こんなことを言っていること自体が古いのかもしれないけど。
自分がスクラム開発を開始しよう、体制を整備しようと考えた時に、
プロダクトオーナーを決めるのに一番迷う気がする。。


結局新規に向いてるんだな

不透明なことが多い新規開発に向いている点は理解できる。
でも完全に新規じゃないにしても、
多かれ少なかれ新しい技術要素っていうのは入ってくるわけで。

探索という側面が全くない開発なんてないと思うから、
完全にアジャイルプロセスでやるわけじゃなくても、
ニュアンスは積極的に取り入れていった方がいいきがする。


プライドの高い人は

スクラムのリーダーに向いていないそうな。
僕は、腰は低いけど実はプライドが高かったりする。
向いていないのか。。


知識だけでは意味が無い、行動しないと。

いい言葉だ(そして少し耳が痛い)。


疑問点

結局実のところ見積もりというか、お金の話の解決が必要な気がしていて。
受託開発でそれって現実味あるのかなぁ。
後はウォータフォールだとフェーズごとで人数の山谷が想像しやすいけど、
アジャイルだとどう考えるんだろ。


XPにはプログラマー個人にベースとなる能力が必要

そうなのよね。。
なので、やはり組織としては土台と教育っていうところを
もっと深く考えないといけない。
それはアジャイル云々関係なくそうですね。


Servant Leadership

empathizeは該当する日本語がない?みたい。
当事者意識ってことなのかな。。


引き続き考えていくこと

スクラムを実施するにはエンジニアの基礎体力が必須。
マネージメントは技術力がなくてはいけないが、技術に特化することは難しい。

トップダウンからボトムアップ型にシフトするには?



2013年2月18日月曜日

Developers Summit 2013 に行ってきた。

デブサミ2013に参加して来ました。
今年は色んなものをほっぽり出しつつ、仕事を人に押し付けつつ、2日ともフル参戦してみました。

各セクションの詳細については資料もアップされるし、色んなところで丁寧にまとめられるだろうから、個人的に感じたことだけ書いていきます。


アプリなのか、サイトなのか、それが問題だ。


やはりスマートホン・タブレットに対する熱は未だ冷めやらず。
スマートデバイス対応はサービスの形態にかかわらずもはや必須だけれど、
アプリとサイトのメリデメをしっかり把握しておく必要がありそうです。


Javaっ子なら次はScala?


押し寄せる「関数型」の波に怯える今日この頃。。
Java開発者はScalaならとっつきやすいって話が聞けたので興味津々。
一番収穫だったのは「関数型言語」なんてのは明確には存在せず、
あくまで開発スタイルにすぎないって分かったこと。

どうでもいいけど「Haskell」ってつい最近まで「ハスクル」って読むと思ってた。。


やっぱクラウドっしょ


正直アプリ開発側に寄って業務に携わってると、インフラ運用・保守とかそこまで意識しなかったりする。
規模にもよるんだろうけど、大体インフラ専門チームがいるし。

でクラウド系のセクション聞いていると、いかにインフラがサービスにとってネックになっていたかっていうのが、明言しなくても熱として伝わってきて少なからず衝撃を受けるのです。
(わかっちゃいたけど、的な)

DevOpsなんて話しもあるけど、あくまで近々の世界な気がする。
2日で5000台サーバ増強した、なんて話聞いたら、そりゃクラウドにシフトしてくだろうと。

AWSが最右翼ですかね?


アジャイルとかウォータフォールとか、言葉に踊らされちゃいけない


スクラムとかチケット駆動とかアジャイル開発やってみたくてしょうがないんだけど、
あくまで開発プロセスに過ぎないってのは肝に銘じておかなきゃいけませんね。

どの開発手法がいいのかってことと、プロジェクトの成否ってのはまた別の話ですから。

ただ、ウォーターフォールに固執することが負のサイクルにつながっているケースが多いのは間違いないと思う(クライアントも開発者も楽しくない)。
現場にいきなりアジャイル取り込むのは中々難しいと思うけど、

ちょっと勉強してエッセンス的なところから少しづつ取り入れてみたいな。



本買った


デブサミの雰囲気にやられて(笑)2冊ほど本買いました。


ホントはScalaの本も欲しかったんだけど、なんせ技術書は高いのでお財布が悲鳴を。。
まぁ、一度にたくさん買っちゃうとたいてい読まなくなっちゃうしね。


何はともあれ


デブサミの一番いいところは、やっぱり業界とそこで生きる人達の前向きなエネルギーを感じられることです。
とても楽しい二日間でした。

Developerの端くれとして、僕も明日からまたがんばるぞー。


2013年1月4日金曜日

Mac から Windows にリモートデスクトップ接続

Windows7 Home から Windows8 Pro に切り替えました。
せっかく Pro にしたのだから憧れの(笑)リモートデスクトップに挑戦。

①Microsoft Remote Desktop Connection Client のインストール

MacからWindowsにリモート接続するのにはいろいろ方法があるみたい。
無料という言葉に惹かれてMicrosoft Remote Desktop Connection Clientを利用することにした。

こちらから


②Microsoft Remote Desktop Connection Client の起動

どうもMac App Store以外からダウンロードしたアプリを利用するには設定を変更しなければならないらしい。

[システム環境設定]→[セキュリティとプライバシー]→[一般]→[すべてのアプリケーションを許可]


上記で起動できるようになりました。


あとはアプリを起動して接続先のIPを入力したら無事つながりましたー。
マシン名で接続、あるいは固定IP振るとかはとりあえずめんどくさいのでやらない。
リモート接続やってみたかっただけだもの。。

参考