Archivo del Autor de Alberto Dominguez, PMP

Presentación: ¿cómo empezar una PMO?

Ayer 23 de octubre de 2008, en las instalaciones de la Asociación Colombiana de Ingenieros de Sistemas (ACIS), dí una charla sobre cómo empezar una oficina de gerencia de proyectos. El tema, lo preparé y revisé más que mi propia certificación de PMP -obvio, iniciar una PMO es mucho más complejo que certificarse. Certificarse es, en gran medida, estudiar. Empezar una PMO es tan complejo que aún no puedo decir que he creado o liderado la creación de una verdadera oficina de gerencia de proyectos -he contribuido, apoyado, criticado y evangelizado su uso. He sufrido, trasnochado, discutido, y llorado durante el proceso de implementación.

Minutos antes de empezar mi presentación estaba nervioso, no lo oculto y se que más de uno lo notó. Poco a poco el lugar se llenaba de personas, no más de 40 en total, que para este tipo de charlas informales es “un reguero de gente”. Mi ansiedad aumento al sentirme el menor (más joven) de todos los asistentes, y tal vez era. Para mi grata sorpresa, pero en contra de mi gastritis hipocondríaca, había un profesor de postgrado y un coordinador de postgrado en gerencia de proyectos de una prestigiosa universidad -ahora si tocaba decir cosas serias.

Al final, no recordé la mitad de las anécdotas que tenía preparadas. La charla estaba programada para 90 minutos, incluida la introducción y la presentación de los asistentes. Empezamos tarde -con la excusa de esperar a mas asistentes que hubieran podido tener un retraso- y, duramos aproximadamente 110 minutos - será que así son todos mis proyectos :-S

Lo bueno, las personas participaron, preguntaron, acordaron y espero que hayan concluido lo mismo que yo. Que no hay verdades absolutas, que para mí como ingeniero, una ciencia en la que todo “depende” requiere de un gran esfuerzo y cambio de paradigma. Empezar una PMO no es una fórmula, pero si tiene algunas tácticas.

Agradezco a los asistentes, su atención y participación, y desde luego su experiencia y aporte.

Acá les dejo el enlace de descarga a la presentación. Comentarios y sugerencias son siempre bienvenidos.

  ¿Cómo empezar una oficina de gerencia de proyectos? (1.9 MiB, 203 hits)

BogoTech @ Studiocom done - only one more to go

First of all, I would like to congratulate the organizers of the second BogoTech event. Last night we saw an improved logistic and infrastructure supporting this event/ It is not about money, it is not about politics, it is about decision and motivation.

Also I would like to say thanks to Studiocom management team, Maria Claudia and Javier for all their support and willingness helping us with the location, the chairs, the video and sound. Thanks to IT Team for taking the time of setting all the stuff ready for our little event. Thanks to all Studiocom for participate and let us use their space.

This week is a king of crazy time for me. My boss is out -doing biz I hope :-) - and I had to organize BogoTech and a presentation for the national association of Computer Engineers -ACIS. So there is only one more to go. I hope to meet you there (@ACIS Octuber 23th, 6:30pm)

BogoTech @ Studiocom - HOY

Tras dos semanas de mala planeación y pésima logística ( LOL :-D ), y algunos favores que debo agradecer personalmente a Studiocom -empresa para la cual orgullosamente trabajo y a la que algunas veces le doy duro en mi blog- puedo anunciar que el BogoTech se llevará a cabo en la oficina de Studiocom Bogotá. También gracias al equipo organizador por su dedicación “pro bono”. Más detalles aquí.

Facebook & CodeIgniter - Definitive Guide

I spent hours more that expected starting the development of a new Facebook application that runs over CodeIgniter. I read A LOT, checked for solutions, and read a little bit more. At the end I was kind of frustrated about the result. So I decided to start it from the scratch and use only the code if found under few sites as guide. Here’s the result.

0. Environment

Before you get excited just review a few things before spent time reading another useless post :-)

  • PHP Version 5.2.6
  • MySQL 5 (It doesn’t affect Facebook integration at all but it is good to know)
  • HostMonster is my hosting provider (it is not a marketing initiative, just they have a nice environment set up for PHP)
  • Facebook platform 5 - I upload a copy of it to ensure you get the same copy I used.
  • CodeIgniter 1.6.3 - latest version available at the time of this post.

1. Do not hack CodeIgniter

I found a lot of solutions about hacking CodeIgniter by overriding functions or classes. NO, YOU DO NOT HAVE TO DO IT.

2. Install facebook library as plugin

  • Download the facebook platform ZIP
  • Unzip the files wherever you want -outside your Code Igniter application
  • Copy the WHOLE content under /php folder (under means files inside the folder and not with the container folder) to yout ./system/plugins folder inside Code Igniter application -Note: Yes, you have to include the jsonwrapper folder.
  • Rename the facebook.php file to facebook_pi.php

It is done! You already have installed facebook framework as plugin.

3. Autoload facebook plugin [Optional]

To avoid the need of including the “load plugin” sentence inside every controller/class you can modify the ./system/config/autoload.php to include facebook plugin as required. It is almost a requirement for Facebook applications.

  • Add to your $autoload['plugin'] array the facebook plugin. It could look like this: $autoload['plugin'] = array(’facebook’);

Note: If you skip this step you will have to include the following line every time you need facebook functionality available.

$this->load->plugin('facebook');

4. Extend your Controller class

Because I’m building a 100% facebook application, all my controllers require facebook API available. So I decided to extend my main Controller class as follows - BTW: By the date of this post the CodeIgniter documentation WAS WRONG about how to extend the core classes (CodeIgniter User Guide Version 1.6.3 - Creating Core System Classes). It is not true -i.e. it is false- that you have to extend the CI_ClassName. At least it didn’t work for me at all. Extend the ClassName directly.

Facebook Controller class should be placed under ./system/application/libraries folder.

Filename: XX_Controller.php (where “XX_” is the prefix you set on your ./system/application/config/config.php file - subclass_prefix parameter)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class FB_Controller extends Controller {
 
	// Facebook application key
	var $API_KEY = 'YOUR_API_KEY';
 
	var $facebook;
	var $uid;
 
	/*
	 * Custom Controller constructor.
	 * Adds Facebook support.
	 *
	 */
	function FB_Controller() {
 
		parent::Controller();
 
		// Authentication key
		$secret = 'YOUR_SECRET_KEY'; 
 
		// Prevent the 'Undefined index: facebook_config' notice from being thrown.
		$GLOBALS['facebook_config']['debug'] = NULL;
 
		// Create a Facebook client API object.
		$this->facebook = new Facebook($this->API_KEY, $secret);
		$this->uid = $this->facebook->require_login();
	}
}

Note: My facebook application I will always require an authenticated users, so that’s why I do have the require_login() call. However you can also validate if the user already have the application added. I will do this inside my controller classes because there are a few exceptions where I need the user logged in without opted in.

5. Create your own controllers

Now you can extend your controllers from your Custom Controller. Note: You do not have to add any include or require sentence in your other classes, CodeIgniter will load directly your XX_Controller.php file -if it doesn’t load please check the config.php file and validate the subclass_prefix parameter.

Below you will find an example of a Controller that will validate if the user has the application added in his/her profile.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Welcome extends XX_Controller {
 
	function Welcome() {
 
		parent::XX_Controller();
 
		// Check if the application has been added by the user
		try {
			if (!$this->facebook->api_client->users_isAppAdded()) {
				$this->facebook->redirect($this->facebook->get_add_url());
				return;
			}
		}
		catch (Exception $x) {
			// Clear cookies for your application and redirect them to a login prompt
			$this->facebook->expire_session();
			$facebook->redirect($this->facebook->get_login_url());
		}
	}
 
	// You should place your Controller's methods below.
 
}

6. Get out and celebrate

CodeIgniter is running as cleaner as you expected and Facebook API was included nicely!

I hope you find this post useful as I said at the beginning.

  PHP Client Library (34.3 KiB, 31 hits)

Si yo fuera el CEO

Esta entrada esta directamente relacionada con la entrada Las Agencias y su problema con Digital.

Si yo fuera el CEO de una agencia de publicidad que quiere entender y aprehender la cuestión “Digital” pensaría en lo siguiente - y lo digo con pleno conocimiento de Ingeniero de Sistemas obtuso y cuadriculado.

Digital no es una página Web

La diferencia entre una verdadera agencia digital y una empresa “hacedora” de páginas Web hace la diferencia. Las Agencias comprenden que la verdadera ventaja esta en el diferencial, en el Big Idea. Soporte sus ideas con verdaderas estrategias digitales, no piense en la página Web.

Digital requiere skills

No es llamar a dos “pelaos” para que le saquen “la” página Web. Su estrategia requiere verdaderos expertos. Si su empresa no esta en capacidad de contratarlos y mantenerlos contentos, busque aliados. Empresas dedicadas al desarrollo de software hay cientos de miles, así que busque bien. Entienda lo que significan los SLA -acuerdos de nivel de servicios. Busque profesionales certificados -no sólo en programación también en dirección y coordinación de proyectos, en procesos de software como CMM o Scrum.

Digital esta asociado a productos de software

Los productos TIENEN UN CICLO DE VIDA DIFERENTE AL DE LA CAMPAÑA O INICIATIVA O ACTIVACIÓN. Muchas empresas no comprenden esto, y creen que lo que se dice es broma. Los productos de software son productos, y por lo tanto su ciclo de vida no puede -en beneficio del negocio y su relación comercial a largo plazo- estar ligado a una campaña. Lo bello de esto es que demuestra 100% de los casos que el ser humano es el único animal que repite sus errores siguiendo los mismos pasos.

Hace poco leí en un libro algo similar a “si quieres que tu vida cambie, ¿por qué sigues haciendo lo mismo cada día? ¿acaso esperas un resultado diferente?”. Que cierto es, y para apropiar este concepto a la idea general de los productos de software, lo simplificaré a: “si su campaña no tiene presupuestado el desarrollo de un producto de software ¿por qué insiste en desarrollarlo?”.

El 110% de las necesidades de software están resueltas para esta industria. ¿Por qué insisten las Agencias, que no tienen la capacidad ni la experiencia para desarrollar productos de software, como un MMOG o un CMS. ¿Quién sabe? Seguramente se debe a la matemática veloz del vendedor: más horas de trabajo significan más dinero para la empresa. Claro, este vendedor no comprende, y no lo culpo por que nadie lo ha definido en el modelo de negocio, que el cliente paga por la campaña, no por el producto asociado.

Capacite a su equipo y de paso a usted mismo

Si sigue en su empeño de desarrollar software, mantenga el esfuerzo lo más bajo posible, recuerde que NO ES SU NEGOCIO desarrollar software. Tenga verdaderos expertos en los temas que usted requiere. Siempre es mejor un experto que 100 buenos programadores.

Capacite a su equipo de coordinación y dirección, capacítese usted en nuevas tecnologías y tendencias, abra sus ojos para ver más allá de “la” página Web.

Defina una estrategia de combate

Por último, pero no menos importante, defina como quiere manejar el negocio. Para eso responda las siguientes preguntas:

  1. ¿Tiene o puede conseguir el equipo para desarrollar software? -líderes, programadores, arquitectos, diseñadores de software, gerentes de proyecto, equipo de soporte, entre muchos otros.
  2. ¿Tiene la infraestructura para soportar un verdadero proceso de software? -servidores, respaldo, continuidad del negocio, recuperación ante fallas, soporte 7×24, control de versiones, sistema de gestión de trabajo, metodología, procesos, entre otros miles.
  3. ¿Quiere lidiar con el tema de calidad del software? -no importa si su campaña es un éxito total, si no ha habido otra iniciativa más exitosa, el ciclo de vida del producto es mayor y por lo tanto puede arruinar su relación comercial en el largo plazo.

Mi recomendación es que, de acuerdo con sus respuestas, evalúe los siguientes modelos.

  1. Productor de software. La empresa está en capacidad de producir productos de software y mantenerlos en el largo plazo -sin depender de los clientes o campañas de turno.
  2. Experto en implementaciones. La empresa no produce software pero ofrece soluciones completas apoyada en el uso de productos de software de terceros. Por ejemplo: Su empresa desarrolla portales corporativos y el producto que soporta su operación es producido por otra compañía. Su empresa se limita a modificar -de forma mínima- y a sacarle el máximo provecho en función de las necesidades de los clientes. Nota: Este es mi modelo favorito, para que reinventar la rueda, si ya la venden en la tienda, y a veces ni siquiera la venden, ES GRATIS!
  3. Aliado. La empresa ofrece soluciones a la medida, pero cuenta con un aliado de negocios que ofrece servicios de desarrollo a la medida. Nota: Este no requiere explicación pero sí una coordinación magistral entre los proveedores para evitar complicaciones durante el desarrollo de los proyectos

¿Qué haría yo para ver resultados rápidamente?

  1. Complementaría mi equipo de creativos tradicionales con expertos en temas digitales, buscaría creativos con pleno conocimiento del tema que me ayudaran a “predicar la palabra”. Los creativos a los que no les interesa el tema digital tienen sus días contados.
  2. Evaluaría el perfil de mis clientes y las necesidades existentes para considerar 2 o 3 -NO MÁS- productos de software que pudieran complementar e integrarse perfectamente a mis iniciativas y propuestas. Por productos me refiero a tipos de producto como un CMS para administrar los contenidos, Blogs para evaluar o resolver esquemas de comunicación directa, Networking para fortalecer relaciones comerciales, MMOG si mis clientes están interesados en los juegos en línea.
  3. Reclutaría expertos en tecnologías asociadas a los productos de software mencionados -en este caso ya hablaríamos de productos, CMS => Drupal, Blog => Wordpress, MMOG => DarkStar, Networking => Dolphin. Es curioso pero alguien notó que sólo mencioné software gratuito?
  4. Evaluaría el esfuerzo requierido para implementar las soluciones con el equipo que tengo. Si es posible o si requiero más personas para trabajar, con nuevos skills -considero desde luego que el ciclo de estos productos no es inferior a 2 años y descarto si los clientes y sus campañas perduran el mismo tiempo.
  5. Evaluaría proveedores -incluso cuando ya tengo expertos en esos temas en mi empresa, ellos serán de vital importancia para planear y evaluar el esfuerzo por el que le pagaré a mis proveedores.
  6. Todo esto seguiría un proceso definido, claro y DOCUMENTADO. Para evitar situaciones que de seguro nos pasan a todos: ¿Quién definió esto? ¿Y para qué? ¿El cliente aprobó esto? ¿Esto hay que hacerlo?
  7. Finalmente, ofrecería soluciones completas. Gran parte del dinero presupuestado en un proyecto es gastado en integrar. Las Agencias producen A, el cliente tienen la infraestructura B y queremos que todo funcione sin importar nada. El problema esta en migrar A de un ambiente controlado por la Agencia a B, un ambiente controlado por el cliente. Esto SI que es un VERDADERO dolor de cabeza y, sin importar cuan diligente sea su equipo y proceso, los errores o inconvenientes presentes en el proceso son SU CULPA… o espera que el cliente asuma la responsabilidad? Se imagina a su equipo de IT -que en una agencia es medio personaje que también codifica en su otro medio tiempo- instalando Google Mail? o Facebook? o MySpace? No le haga lo mismo a sus clientes, ofrezca soluciones completas.