Continuamos una serie de artículos sobre aquellos que hacen proyectos con sus propias manos. Con
Stepan Goncharov, hablamos sobre cómo cambiar orgánicamente la dirección de la actividad profesional y, al mismo tiempo, cambiar nuestras habilidades de desarrollador de Android a DevOps. Preguntaron sobre el
ciclo de lanzamiento y los procesos en Grab , una compañía en la que 40 personas están desarrollando solo para Android. Hablaron sobre dónde obtener ideas para juegos, le preguntaron a Stepan
Archetype y kOptional sobre los proyectos OpenSource.
Sobre el invitado : Stepan Goncharov (
stepango ) ha estado desarrollando aplicaciones y juegos para Android desde 2008, desde tiempos inmemoriales, cuando el SDK de Android no salió. Durante su carrera, logró desempeñar el papel de QA, gerente, comercializador, blogger, analista, asesor y muchos otros. Participó en el desarrollo de aplicaciones desconocidas y aplicaciones con millones de usuarios en todo el mundo. Actualmente trabaja en Grab, usa Kotlin y Rx ampliamente, y dedica más tiempo a OSS.
Aquí está la decodificación de texto del podcast
Run Loop . Presentadores: Ilya Tsarev, Alexey Milyaev y Roman Busygin.
Ilya: Dime en qué está involucrado Grab directamente y cuál es tu papel. ¿Estás escribiendo código o algo más?
Stepan: Inicialmente, Grab es un servicio de ocultación de viajes. Puede pedir un taxi, vendrán a buscarlo, recogerlo y llevarlo. Pero recientemente, la compañía está accediendo cada vez más a servicios adicionales como la entrega de alimentos y su sistema de pago. Cuando llegué a Grab, dirigí el equipo de desarrollo de aplicaciones de controladores. Luego cambió a la solicitud de pasajero. Uno de mis proyectos recientes fue un
rediseño completo de la aplicación de pasajeros . Ahora estoy haciendo más DevOps: configurando CI, optimizando el tiempo de compilación y todo eso.
Devops
Alexei: Stepan, y si no es un secreto, ¿por qué decidiste cambiar a DevOps y CI? A menudo escucho una historia cuando los desarrolladores de dispositivos móviles llegan a la plataforma, se entusiasman, bombean a alturas increíbles y luego deciden ir repentinamente a realizar algunas tareas no productivas.
Stepan: De hecho, todo resultó, yo diría,
orgánicamente . Mientras estaba en el proceso de rediseño de la aplicación, tuvimos una migración de emergencia a GitLab debido al hecho de que las instancias de CircleCI ya no podían construir nuestro proyecto. Resultó ser demasiado grande y consumió mucha memoria, pero no hubo instancias de CI adecuadas. De alguna manera, me quedé atrapado durante varias semanas tratando de migrar nuestros procesos y, en general, todo lo relacionado con CI a GitLab. Luego, una vez finalizado el proyecto, formamos un nuevo equipo de plataforma. Mientras pasé 3 semanas de vacaciones, todas las demás tareas fueron tomadas, así que cuando regresé, me dijeron: "
Eso es todo, estás optimizando la velocidad de construcción y el CI".Diferentes roles y actividades
Ilya: También tenemos pájaros, no aquellos que tienen micrófonos en bucle, pero aún así, le informaron que visitó QA, como gerente, y
vendedor, y blogger y analista, en general, realicé muchas actividades diferentes. . Cuéntanos con más detalle cómo te incorporaste a todos estos roles, cuánto tiempo has estado en ellos, ¿qué te gusta en cada uno, quizás, no te gustó? ¿Quizás te gustaría volver a los bloggers ahora?
Stepan: En principio, en cada uno de estos roles, de alguna manera, resultó de manera orgánica fluir sin problemas de uno a otro. Todo comenzó con el hecho de que me interesé en el desarrollo de Android
antes del lanzamiento del primer dispositivo en Android . Estaba interesado en la idea misma, un sistema operativo en Java, de alguna manera inusual. Como resultado, mientras estudiaba en la universidad, en lugar de hacer trabajo de laboratorio en C u otros problemas universitarios aburridos, gradualmente reduje todo a Android. El profesor no se opuso, él también estaba interesado en aprender algo nuevo y yo escribí aplicaciones de Android.
Cuando me gradué, ya tenía algo de experiencia. Escribí mi primera aplicación, la lancé al mercado, y esto
comenzó mi pasión por el marketing . Tenía mi propia aplicación y tuve que promoverla de alguna manera. Empecé a jugar un poco y escribir blogs.
En 2010 encontré el trabajo de un desarrollador de Android, entonces era casi imposible: no había mercado, nadie sabía sobre Android. Ingresé a una empresa de outsourcing y
tuve que reclutar un equipo con solo seis meses de experiencia y 2 solicitudes publicadas.
Entonces, desde marketing y blogs, volví al desarrollo. Luego se graduó de la magistratura, se mudó a San Petersburgo, también para subcontratar. Allí comencé a involucrarme en las pruebas automatizadas, y resultó que desarrollé
la dirección
de Robotium en la compañía y le enseñé a QA
cómo escribir pruebas automatizadas, hasta que me fui
a Singapur , donde nuevamente recluté a mi equipo para una de las nuevas empresas de Singapur. Después de eso, comenzó a desarrollarse más en el desarrollo de Android. Ahora me metí en Grab, primero a los gerentes, luego a DevOps.
Roman: Stepan, por favor dime, ¿echas de menos esta vez cuando tus tareas han cambiado drásticamente? Ahora, en términos generales, todos los días bebes DevOps, ¿y eso es todo?
Stepan: En realidad, todavía no. Recientemente completé un gran proyecto y, en principio, todavía hay suficientes tareas. Pueden parecer, por supuesto, lo mismo, es decir, el objetivo es uno, pero lo que hago es
muchas, muchas cosas diferentes , que incluyen, por ejemplo, creación de perfiles de memoria, trabajo con CI. Ahora miro el análisis de Amazon en S3.
Todo esto es nuevo para mí hasta ahora . No creo que participe en CI y en la optimización del tiempo de montaje durante mucho tiempo. Lo más probable, por ejemplo, en el próximo trimestre cambiaré a otra cosa.
Roman: Por ejemplo, tengo
un ciclo de transición de una dirección a otra durante aproximadamente 2-2.5 años . Comencé con las pruebas, luego cambié a las pruebas de carga, luego me convertí en desarrollador. ¿Con qué frecuencia cambias intereses y áreas de trabajo?
Stepan: en algún lugar de la región de 1.5-2 años. Pero recientemente, resultó durante seis meses.
Los juegos
Alexei: ¿Qué es lo que más te gustaría hacer? Idealmente, ¿tal vez le gustaría dejar el desarrollo, no tocar nada con las manos? ¿O tal vez, por el contrario, le gustaría profundizar en algunas cosas nativas profundas? ¿Qué es lo que más quieres específicamente?
Stepan: ¡ Esa es una buena pregunta! En realidad no lo decidí.
Todavía estoy interesado en bastantes cosas . Uno de los más interesantes para mí, donde no pude llegar, es el desarrollo de juegos. Mientras estudiaba en la universidad, me gustaba escribir todo tipo de juegos. Tenía proyectos en Flash. Mi segunda aplicación de Android también fue un juego. Incluso trabajé durante un mes en una empresa de juegos, pero de alguna manera no funcionó para mí.
En principio,
me gustaría probar el diseño del juego , pero esto sigue siendo difícil. Cuanto más tiempo pase y me desarrolle en Android, más difícil será esta transición, si es que sucede.
Ilya: Styopa, si tocamos el tema de los juegos, entonces la pregunta es: ¿de qué se trató tu primer juego?
Stepan: Era 2010, así que fue bastante simple. Era un rompecabezas lógico con láseres y espejos que tenían que girarse para que los láseres dieran en el blanco. Desafortunadamente, este juego fue alojado en la cuenta de mi empleador entonces. Esta cuenta ha sido eliminada durante mucho tiempo y el juego no está allí. Pero realmente me gustaba. Fue escrito completamente en Android View, lo cual, por supuesto, lamento, pero la experiencia fue excelente.
Ilya: ¿ Ahora te estás tomando el tiempo para desarrollar juegos?
Stepan: no. No hay absolutamente ningún tiempo para juegos ahora. Además del hecho de que trabajo en la empresa, también
organizo reuniones de Kotlin en Singapur y hablo en conferencias. Es decir, el tiempo libre está completamente lleno. Tal vez algún día volveré a esto. Recientemente compré Google VR para probar Unity cuando hay tiempo, pero hasta ahora no ha sido posible.
Roman: Y dime, por favor, ¿de dónde sacaste ideas para juegos? ¿Cómo se te ocurrieron?
Stepan: Las ideas para juegos usualmente vienen de innovaciones técnicas. Por lo general, veía algunas demostraciones tecnológicas o, por ejemplo, en 2008-2010 había una moda para los motores físicos. Ves una tecnología genial o un nuevo sombreador de moda, y las
ideas mismas aparecen en función de lo que ves.
Roman: ¿Tu pasatiempo de hacer juegos está relacionado con el hecho de que tú mismo eres un jugador? Cortas en PlayStation, Switch y PC. ¿Hay alguna correlación?
Stepan: Sí, creo que sí. Cuando era niño, tuve Sega, luego PC, pasé mucho tiempo jugando. Ahora tengo PlayStation y Switch, pero ahora
paso mucho menos tiempo en los juegos , ni siquiera tengo que jugarlo.
Roman: ¿ Y qué juegos recuerdas más? ¿O qué género de juegos te gusta más? Por ejemplo, prefiero tiradores o algún tipo de Survivor-horror.
Stepan: De alguna manera no trabajé con tiradores. Jugué Counter-Strike cuando era niño, pero no fue así.
Uno de mis juegos favoritos es Space Rangers-2 , y la primera parte también es épica, por supuesto. Luego de memorable fue
Freelancer .
Alex: ¿ Freelancer es un juego? Este es un estilo de vida!
Stepan: En realidad, este es un simulador espacial, más o menos, muy cercano a los Space Rangers, pero desde la perspectiva de un tercero. The Witcher, Arcanum y Fallout son así.
Ilya: Me parece que
desarrollar juegos es el sueño de la mayoría de los programadores . Como siempre me pareció, la gente generalmente va al desarrollo solo para hacer juegos. ¡Esto es súper genial! Mi primer proyecto de iOS, por cierto, también era un juego. ¿Qué opinas sobre esto?
Alexei: Escuché que para muchas personas el camino hacia la programación realmente comienza con el hecho de que quieren hacer algún tipo de juego, les gusta jugar, quieren entender cómo hacerlo. Por alguna razón no tenía esto.
Estaba más interesado en cómo funcionan los programas , qué sucede cuando haces clic en Windows en Windows. Pero en algún momento me di cuenta de que no tenía idea de cómo hacer juegos. Entiendo cómo es posible escribir esta o aquella aplicación en un teléfono móvil, este o aquel programa en una PC. No imaginé cómo hacer juegos. De alguna manera me pusieron en un canal de YouTube. Allí, un tipo en Java y Canvas escribió su juguete desde cero: un clon de un juego de rol con algo similar a una mezcla de Diablo y Final Fantasy. Esto es realmente muy interesante.
Aconsejaría a todos que solo intenten jugar con él en su tiempo libre , para comprender cómo está escrito en general, cómo funciona. Fue una experiencia muy buena. Luego, de alguna manera, ingresé a las mismas lecciones, donde el tipo vio un juego simple en Unity. Es muy interesante comparar enfoques cuando comienza a escribir su motor, y cuando ya tiene algo listo como Unity, y de alguna manera lo ajusta para hacer el suyo. Recomiendo probar algo como esto, porque es, sin embargo, muy interesante.
Roman: Tengo una experiencia similar. Me encanta jugar, pero no soy un jugador ávido, pero al mismo tiempo estaba interesado principalmente en comprender cómo se hacen los programas. Luego llego a la conclusión de que lo que me gusta, lo que me gusta, quiero intentar hacerlo con mis propias manos. Pero en términos de juegos
, todo comienza con una idea . Estoy esperando una idea que pueda implementarse en cualquier momento libre, o para despejar mi tiempo y hacer este juego.
Stepan: En cuanto a las ideas, una de las últimas que me vino a la mente estaba relacionada con la
generación automática de mapas . Ahora se puede decir que es una tendencia, y algunos juegos usan la generación de mundos enormes para hacerlos muy similares a los reales.
Existe toda una clase de algoritmos que le permiten generar terreno. El paisaje se puede construir para que haya montañas y mares. En principio, si a una persona se le muestra la vista superior de los mapas de Google y el paisaje generado, pocos podrán distinguirlos. Esto es muy interesante, porque puedes crear contenido para el juego por tu cuenta, sin tener grandes recursos, porque es una de las partes más difíciles. Al menos eso creo.
Jornada laboral
Alexei: Stepan, ¿cómo es tu día de trabajo por lo general? Te despertaste, llegaste a la oficina o no entraste: ¿qué estás haciendo, cómo estás?
Roman: Todavía estoy interesado en lo que sucede antes de que llegues a la oficina. Tal vez tenga algunas cafeterías favoritas o sus tradiciones favoritas: por ejemplo, ¿le gusta caminar por el jardín público frente a la oficina? ¿Qué es lo que realmente comienza tu día?
Stepan: Recientemente, mi día comienza con 50 flexiones.
Alexey: Respeto!
Stepan: En algún momento me di cuenta de que
necesitaba dedicar más tiempo a la actividad física , y ahora trato de obligarme a hacerlo en mi tiempo libre. En principio, nada especial.
Dado que el negocio principal de la compañía es esconderse, es decir, pedir un taxi, la compañía me paga un taxi. Por lo tanto, lo primero que hago en la mañana después del desayuno es pedir un taxi e ir a trabajar.
Trabajo en una oficina bastante decente con excelentes vistas de la bahía. Como probablemente la mayoría de nosotros, lo
primero es, por supuesto, una taza de café . La mayoría de las veces, simplemente bajamos con colegas al sótano del mismo edificio, vamos a una de las cafeterías, tomamos café y
discutimos algunas noticias, planes . Es especialmente interesante si algo sucede durante esta noche, que es el día en los Estados Unidos: se ha lanzado algo nuevo, algunas noticias interesantes, un nuevo marco. Discutimos todo esto, y después de eso podemos comenzar a trabajar.
Entonces todo es casi igual que todos los demás: vas a
Jira , ves las entradas. Durante las últimas semanas he estado de guardia. Este es un desarrollador de este tipo, en quien recaen todos los problemas de producción, y usted tiene que resolver de alguna manera, delegar o decir: esto no es un problema y olvidarse de él.
Dado que el equipo es muy grande (
más de 40 personas ya están trabajando en la solicitud de pasajeros, estos son equipos diferentes que son responsables de diferentes áreas), a veces es bastante difícil encontrar a la persona adecuada que necesita para resolver este problema. Tenemos esa rotación:
cada semana uno de los desarrolladores se dedica a rastrillar problemas de producción . Específicamente, esta semana estoy preparando un lanzamiento, esta es una solución al problema de las pruebas, y nuevamente encuentro a las personas adecuadas para resolver esto lo más rápido posible.
Roman: 40 personas son solo Android, ¿o es todo el equipo el que hace la aplicación móvil?
Stepan: esto es solo Android.
Roman: Wow! Cuando
escuché cuántos desarrolladores móviles hay en Uber, me sentí incómodo. Pero su equipo confirma esta tendencia. Usted mencionó que, en términos generales, estaba de servicio en informes de errores. Dime, ¿cómo va tu ciclo de lanzamiento?
Ciclo de lanzamiento de la aplicación
Stepan: En principio, creo que este es un proceso más o menos ordinario al que las grandes aplicaciones intentan adherirse.
Tenemos un tren de lanzamiento fijo . Esta es la semana en este momento. Es decir, todas las semanas el martes tenemos un lanzamiento. Se selecciona un ingeniero de lanzamiento para esta semana, y para el comienzo de la semana, todas las funciones incluidas en el lanzamiento deberían estar listas.
Si alguna característica no está lista, la tiran, la cierran con una bandera; haga lo que sea necesario para evitar que retroceda. Tan pronto como esta compilación, donde todas las características están listas, se entrega a QA, comienza el proceso de lanzamiento de ingeniería. Es decir,
cualquier error abierto debe corregirse lo más rápido posible , se les da la más alta prioridad. Incluso si el desarrollador está trabajando en la próxima función, que se lanzará en la próxima versión, pero hay un error o algún problema que él conoce mejor y que tiene el menor tiempo para resolverlo, se le da.
Esto pasa con nosotros hasta el viernes.
El viernes, tratamos de terminar la regresión , cerrar todos los errores de regresión y salir con un alma tranquila para el fin de semana. Si algo sucedió de repente, el lunes puede solucionarlo rápidamente, y ya el lunes por la noche o el martes por la mañana, publique y despliegue en silencio: primero 10%, luego más, más, más. Durante una semana, intentamos acercarnos a cien y lanzar la próxima versión.
Pruebas y actualizaciones
Roman: Componga y diseñe rápidamente, pero ¿qué pasa con el proceso de prueba? Probadores de personas especiales que verifican en qué punto lo hacen.
Stepan: Hay muchos probadores, están a tiempo. No sé cuántos de ellos son seguros. La razón es que la mayoría de los equipos no están en Singapur. No recuerdo cuántas oficinas tenemos, pero hay al menos 5 oficinas más donde hay equipos de desarrollo junto con QA. Durante el desarrollo de características, estos equipos, junto con QA, depuran estas características y las prueban.
Para cuando comienza el ciclo de lanzamiento, las funciones no deberían tener errores abiertos . La regresión ocurre de la siguiente manera: una, quizás dos QA de todos los equipos se destacan, y ejecutan la regresión de acuerdo con sus características. Solo esta semana, mientras buscaba errores, se corrigieron las regresiones.
Ilya: ¿ Resulta que tienes un ciclo de actualización semanal y los usuarios tienen tiempo para actualizar en ese momento? Por ejemplo, nos enfrentamos a una situación en la que los usuarios de iOS tienen tiempo para actualizar, y Android, en realidad no. Nuestras versiones diferían directamente durante varias semanas.
Alexei: Sí, también me parece que la semana se siente rápidamente.
Stepan: Sí lo es. Una semana es bastante rápida, pero
no tenemos un objetivo para todos los usuarios para actualizar . Cambiamos de un ciclo de lanzamiento de dos semanas a uno semanal para reducir la carga del control de calidad durante la regresión, porque se acumuló una gran cantidad de características durante 2 semanas.
¡40 personas pueden hacer negocios! Luego, al final de la segunda semana, solíamos obtener errores bastante serios que se obtuvieron debido a la imposición de estas características, y fue bastante difícil resolverlos. Resulta que nos desglosamos semanalmente y distribuimos esta carga de prueba de manera más uniforme.
Ilya: ¿Cuánto aproximadamente el porcentaje de su base de usuarios usa la última versión?
Stepan: Depende de qué período de tiempo estamos hablando.
Ilya: En el momento.
Stepan: Puedes usar la última versión solo si te metiste en este plan de recarga durante una semana. Es decir, la recarga del 100% se realizará alrededor del viernes o el lunes, ya que el martes se lanzará una nueva versión. Ya depende de la buena suerte. Pero no tenemos el objetivo de que los usuarios siempre se sienten en la última versión. Lo único en lo que aún debemos pensar es en la versión mínima admitida. Periódicamente obligamos a los usuarios a actualizar de manera forzada cuando al menos el 90% de los usuarios tendrán la versión mínima admitida, que es aproximadamente de 3 a 4 meses.
Organización de trabajo en equipo
Alexey: Styopa, tengo una pregunta. Dices que 40 personas hacen Android, ¿verdad? ¿Es correcto en serio que 40 desarrolladores estén haciendo algo?
Stepan: si.
Alexei: Hay un momento tal que con el aumento en el número de empleados, especialmente en un área de la empresa, es decir, específicamente en el desarrollo de Android,
los costos de comunicación están creciendo exponencialmente . Todos los procesos comerciales están comprometidos a resolver este fenómeno. ¿Y cómo se resuelve esto en ti? ¿Cuál es la estructura organizativa de esta máquina de 40 desarrolladores?
Stepan: En realidad, nuestra solución es bastante simple.
Estos 40 desarrolladores no están haciendo lo mismo , y esencialmente no necesitan comunicarse fuertemente entre sí. Resulta que los equipos en diferentes países participan en diferentes características. Básicamente, no necesita comunicarse con otros equipos. Te comunicas principalmente con tu gerente. Como resultado, el costo de la comunicación no es tan grande, porque el
equipo es de 5-6 personas . Hay equipos de 1-2: por ejemplo, solo apareció una nueva vertical de negocios, hay un desarrollador y él solo tiene un jefe de ingeniería, que es responsable de todo, incluido el backend, iOS y otras cosas.
, , , .
OpenSource- Archetype kOptional
: . , OpenSource -. , OpenSource, .. , , —
Archetype kOptional . Que es esto
: kOptional . ,
Optional . - Null, . . , Java8 .
, . , , — , , . , -.
Archetype — . - , 90
Seconds . - : , , , . , : , — .
, - .
. . , , : "
". Por que no
— , - , . , 90 Seconds , NDA . , , 90 Seconds: , - , - .
,
- , 90 Seconds. , , , , . , , , Rx. , , Kotlin, legacy.
, , , … .
: ,
OpenSource- . , , , , , . , !
.
AppsConf . , , ?
AppsConf
: , AppsConf.
, , : « ». , , , .
, , . , , . , , , , .
. , , . , . — , .
, . , , -, , -, , .
, . , , , . Mobius, . .
-, , ,
- , , - WorkManager, .
,
Kotlin ,
,
, - .
: , ?
: , . -, , , , . , , , .
, , — , , , subscribe. - , , . .
: , - OpenSource , ?
: . production-ready, , , GitHub.
:, ! , , , AppsConf 8–9 .
AppsConf , , , .