限界状態でのシステム開発マネジメント

普通は「ちゃんとスケジュールを引き直そう」とか「ヒアリングしてより業務に適した人材配置転換しよう」とか「増員してなんとか期限までに終わらせよう」とか、進捗が芳しくない時の改善はセオリーがある。
けれど、限界状態ではそれが当てはまらない。

限界状態とは

具体的にはこういう状態を指す。

  • 他との兼ね合い・契約の都合によりスケジュール・期限をずらせない
  • 人員誰もがフル稼働
  • 人員増加したとしても期限まで時間が短く必要知識の学習が間に合わない
  • 有意義な期間内に引継ぐ時間を確保できない
  • 業務改善しようにも目前の業務締め切りのためヒアリングの時間を作れない

「そんなの進捗管理すれば起こるわけないでしょ」と思うかもしれないけれど、本当に起こる怖い話なのだ。

どう対処すべきか?

最も重要なのはタスク管理の工数を考慮に入れつつ作業効率をなるべく維持出来るように優先度の高いタスクから終わらせていくことだ。

タスク管理の工数を考慮に入れるとは

確認時に2分で終わると判断できる対応は、後のToDoに残す工数の方が無駄である。こういう雑多な対応は本来の「優先度」という意味では低いタスクでも、プールせずに終わらせて元の業務に戻った方が合理的である。

例えば YES/NO を返信するだけで済むメールはその場で終わらせた方が良いという意味である。

作業効率をなるべく維持出来るようにとは

最もいけないのが「別件で資料を作成してくれ」「状況を一時間毎に報告してくれ」など、顧客や進捗管理者がキーとなる作業要員の作業時間を食いつぶしてしまい、終わるはずの作業が終わらなくなることだ。

つまり、進捗管理者は顧客に求められた頻度で報告をしていると期限内に終わらないという場合は、「かくかくしかじかのため○○の頻度で報告します。それ以上の頻度は作業に影響があるため間に合わないリスクが高まります」と言いきりどうするか伺うべきだ。

進捗管理者がまきとれること

最優先タスクが何かの確認は必須だが、それ以外のタスク確認・状況ヒアリングなどは極力避け、作業者から巻き取るべきだ。
リスケジュール出来そうな事項はリスケジュールする、人を増やせば取り掛かれる・対応できるタスクには別人員をアサインする、作業している人員の効率の妨げになっている事項があれば解消するなどの対応はした方が良い。

この施策後にもう期限に間に合わない状態となれば、もうその時は天命を待つ他ない。

強く主張したいこと

細やかな進捗管理が必要なのは進捗状況を管理下においていつまでに何をせねばならないか明確にすべき時のこと、稼働に余裕が存在する場合の話であって、この場合マネージメントは大きな意味を持つ。
けれどフルに稼働していて調整している余裕もない場合では直近の作業に全振りすべきであって、ベストエフォートで稼働を要すのが明らかならタスクマネージメントの大切さは相対的に下がるということなのだ。

2020年8月のMovable Typeインストールの流れ

Movable Type を前回使ったのは10年程前だろうか。久しぶりに試したヴァージョン7は凄くいい感じ。

特に大きく躓かず導入出来たのは○、編集しやすくなっていたのは◎。

昔はPHPで動的に生成した方が楽だと思っていたけれど、最近は違うものの見方もするようになった。

ビジネス用途ではリスク回避は非常に重要な観点になる。静的に生成して同期させるだけの方が低負荷&シンプル構成で安定性高く運用出来る⇒サーバー台数を節約出来るってメリットがある。

導入しやすさ・対応ミドルウェアは正直なところWORDPRESSと比較すると勝てない気がしている。nginx + Perl-FPM環境を作って利用してみたいと思ったけれど、1日かけて実現できなかったから諦めることにした。

2020年8月時点で正常に行えたインストールの流れを載せておく。

テスト用サーバー導入環境

CentOS 7 (Minimal) on Windows 10

以下ソフトウェアで実現する

  • apache
  • perl (CGI)
  • MariaDB

テスト用サーバー導入手順

# SELinux 無効化

vi /etc/selinux/config
#SELINUX=enforcing
#↓
#SELINUX=disabled

# httpd + perl

yum upgrade -y
yum install -y httpd httpd-devel
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum-utils
yum-config-manager --enable remi-php74
yum install -y php perl gcc \
    libxml2-dev \
    libssl-dev \
    libexpat1-dev \
    cpan \
    make \
    perl-HTML-Parser \
    perl-Digest-MD5 \
    perl-DBD-MySQL \
    perl-IO-Socket-SSL \
    perl-Net-SSLeay.x86_64 \
    perl-XML-LibXML.x86_64 \
    ImageMagick-perl.x86_64 \
    perl-Crypt-SSLeay
curl -L http://cpanmin.us | perl - App::cpanminus
cpanm CGI Image::Size CGI::Cookie LWP::UserAgent parent HTML::Entities \
    Archive::Tar \
    Archive::Zip \
    Cache::Memcached \
    Mozilla::CA \
    XML::Parser \
    XML::SAX::Expat \
    XML::SAX::ExpatXS \
    YAML::Syck
chown -R apache:apache /var/www/html/
chown -R apache:apache /var/www/cgi-bin/
chmod -R 755 /var/www/cgi-bin/
# CGI有効化
vi /etc/httpd/conf/httpd.conf
# cgi-bin ディレクトリディレクティヴ を修正
#    AllowOverride None
#    Options None
#    Require all granted
#↓
#    AllowOverride None
#    Options ExecCGI
#    Require all granted

systemctl start httpd
systemctl enable httpd
firewall-cmd --permanent --zone public --add-service http
firewall-cmd --reload

# mariadb

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
yum install -y MariaDB-server
vi /etc/my.cnf.d/server.cnf
#[mariadb] に以下を追加
#character-set-server=utf8mb4

systemctl enable mariadb
systemctl start mariadb

# DBユーザー作成
mysql -uroot
CREATE DATABASE mt;
CREATE USER mt@localhost IDENTIFIED BY 'test';
GRANT ALL PRIVILEGES ON mt.* TO mt@'localhost';
FLUSH PRIVILEGES;

# Movable Type 配置

yum install -y unzip
mkdir /var/www/source
# ここで source 内に MT7-R4608.zip をアップロード
cd /var/www/source
unzip MT7-R4608.zip
mv MT7-R4608/mt-static/* /var/www/html/
mv MT7-R4608 /var/www/cgi-bin/mt
chown -R apache.apache /var/www/cgi-bin/mt
chmod -R 755 /var/www/cgi-bin/mt
chmod -R 777 /var/www/html/support/

# IPアドレス確認
ip addr show

# 環境情報確認
# 以下URLにアクセスしインストール可能を確認する
# http://<IP_ADDRESS>/cgi-bin/mt/mt-check.cgi

# インストール
# 以下URLにアクセスし必要情報を入力⇒インストール
# http://<IP_ADDRESS>/cgi-bin/mt/mt-wizard.cgi
# スタティックウェブパス:/
# スタティックファイルパス:/var/www/html/
# データベース名:test
# ユーザー名:mt
# ~中略~(適宜入力)
# アカウントの作成
# ユーザー名:admin
# パスワード:testtest

# 動作確認
# 以降以下URLにアクセスすればよい
# http://<IP_ADDRESS>/cgi-bin/mt/mt.cgi