Mostrando las entradas con la etiqueta optimización. Mostrar todas las entradas
Mostrando las entradas con la etiqueta optimización. Mostrar todas las entradas

lunes, mayo 25, 2015

Paralización de aduanas y modernización del servicio

Aduanas de Chile esta en paralización indefinida. Los argumentos parecen ser "los de siempre", de toda paralización de organismos públicos:
  • Aumento de dotación
  • Modernización del servicio

Pero ¿alguien se ha detenido a pensar cuál es el problema de fondo?

El triste y lamentable precedente de TODOS los organismos públicos es la ineficiencia de sus procesos. Claramente pueden existir excepciones, pero todas mis experiencias realizando trámites en organismos públicos apuntan a ello:
Procesos sumamente engorrosos, lentos, e ineficientes.

Si el proceso no mejora, independiente que se aumente la dotación, o se implementen sistemas de la más alta tecnología (para modernizar el servicio), el resultado va a ser el mismo:
Servicio lento e ineficiente

¿Cómo se soluciona esto?

Mejorar los procesos de una organización no es tarea sencilla. Lo más complicado es terminar con los vicios propios de años de operación ineficiente. Claramente un aumento de dotación puede  servir para esto, pero si el grueso del personal es reticente a cambiar las formas en que han estado resolviendo, de mala manera, la problemática de la organización, difícilmente se va a conseguir una mejora mínima en el servicio.

Similarmente pasaría si Aduanas se "moderniza". Desde un punto de vista netamente informático, y abordando solamente al problema de fiscalización de paquetes, por muy bueno que sea el sistema que se implante, si el personal insiste en operar con lápiz y cuaderno o planillas Excel, el sistema implantado será sólo un ítem más a tratar de justificar en la planilla de gastos de la organización.

Nota: La problemática de aduanas es bastante más compleja que únicamente la fiscalización de paquetes. La esencia del problema sigue siendo la misma.

Las falsas impresiones

Otro de los grandes problemas de los organismos públicos es que habitualmente consideran que "poniendo más gente" (aumentando la dotación) el servicio va a mejorar, y que "modernizando el sistema" "van a tener menos trabajo" (lo que equivocadamente  igualan a eficiencia, mejores condiciones, mejor servicio).

FALSO, en una organización que es derechamente incapaz de funcionar eficientemente con la cantidad de recursos que dispone, poner más gente es echarle más agua a la sopa. Mismo valor nutricional, alimentando más bocas.

DOBLEMENTE FALSO, modernizar el servicio  no significa menos trabajo. En una organización ineficiente la modernización puede incluso significar más trabajo, ya que tendrán que lidiar (y hago la afirmación, ya que en los organismos públicos ES así) con ancianos inamovibles que han estado trabajando en la organización desde el inicio de los tiempos, donde jubilarlos sale más caro que aumentar la dotación.
Y en el mejor de los casos, un mejor sistema no minimiza la cantidad de trabajo, la cantidad sigue siendo la misma, pero se cuenta con un sistema que puede simplificar ciertas tareas haciéndolas más eficientes, eso en caso de que sean correctamente adoptadas por la organización.


Mi conclusión

  1. Primero deben partir por mejorar sus procesos y hace que el servicio sea más eficiente con lo que ya tiene. No va a suceder en un día, ni en una semana, y probablemente tampoco en un mes, pero si debe poder diagnosticarse una mejora en un plazo razonable.
  2. Frente a la imposibilidad de lo anterior, habría que pensar en reformular la organización  cortando ciertos troncos desde la raíz.

Lo segundo es  claramente muy radical, y se esperaría nunca tener que aplicar ese tipo de solución. En la práctica sabemos que hay argumentos políticos que suelen impedir mejoras reales.

miércoles, marzo 26, 2014

GulpJS amistoso con AngularJS

Hace poco después de mi lectura diaria descubrí GulpJS. Es una simpática herramienta de línea de comando que permite optimizar muchas cosas del desarrollo web, desde la minimización de imágenes, hasta la "liposucción de código" como le llamamos en la oficina al proceso de eliminar comentarios y mensajes de debug.
El resultado normalmente es un archivo .js minimizado, un archivo .css también minimizado, e imágenes y archivos .html "optimizados".

No les voy a enseñar a usarlo, eso lo pueden ver en detalle en los siguientes enlaces (todos en inglés):
Los primeros problemas a los que me enfrenté fueron básicamente que las configuraciones por defecto son muy agresivas, por lo que mis HTMLs quedaron sin algunos atributos necesarios para que mis controladores Angular funcionaran, y que derechamente mis controladores Angular dejaron de funcionar.

Después de leer algo de documentación para revisar las opciones de los plugins de Gulp que decidí usar, y trás algunas pruebas, llegué al siguiente código, que me ha arrojado los mejores resultados:

// Include gulp
var gulp = require('gulp'); 

// Include Our Plugins
var jshint = require('gulp-jshint');
var concat = require('gulp-concat');
var changed = require('gulp-changed');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var stripDebug = require('gulp-strip-debug');

// Lint Task
gulp.task('lint', function() {
    return gulp.src('js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'));
});

// Concatenate & Minify JS
gulp.task('scripts', function() {
    return gulp.src(['js/angular.min.js', 'js/Directive/bindonce.min.js', 'js/jquery-2.0.3.min.js', 'js/bootstrap.min.js',  'js/app.js', 'js/*.js', 'js/Service/*.js', 'js/Filter/*.js', 'js/Directive/*.js', 'js/Controller/*.js'])
        .pipe(concat('appjs.js'))
        .pipe(stripDebug())
        .pipe(gulp.dest('dist'))
        .pipe(rename('app.min.js'))
        .pipe(uglify({ mangle: false }))
        .pipe(gulp.dest('dist'));
});

// include plug-ins
var minifyHTML = require('gulp-minify-html');
 
// minify new or changed HTML pages
gulp.task('htmlpage', function() {
  var htmlSrc = '*.html',
      htmlDst = 'dist';
 
  gulp.src(htmlSrc)
    .pipe(changed(htmlDst))
    .pipe(minifyHTML({ empty: true, spare:true, quotes: true }))
    .pipe(gulp.dest(htmlDst));
});

// include plug-ins
var autoprefix = require('gulp-autoprefixer');
var minifyCSS = require('gulp-minify-css');
 
// CSS concat, auto-prefix and minify
gulp.task('styles', function() {
  gulp.src(['css/bootstrap.min.css', 'css/*.css'])
    .pipe(concat('styles.min.css'))
    .pipe(autoprefix('last 2 versions'))
    .pipe(minifyCSS())
    .pipe(gulp.dest('dist'));
});

// default gulp task
gulp.task('default', ['htmlpage', 'scripts', 'styles'], function() {
});

Lo único que no pude resolver a través de parámetros (y si alguien lo sabe se agradece si comparten el dato) fue el hecho que el plugin minify-html se "come" mis espacios en blanco intencionales (a veces necesarios) y los atributos que no tienen valor (como el bindonce). Tan grave no es si sabes donde ponerlos de vuelta, pero eso ya es parte del trabajo manual.