Article

“Una analogía con la ingeniería civil”: Foundational focuses for nearshore software developers

Sunset above the Central Valley of San Jose in Costa Rica

We’ve had amazing conversations with nearshore software developers Kenneth López (on the essential role of communication) and Ewerton Willams (on the importance of business acumen) regarding rounding out one’s practice to offer effective remote support for onshore clients.

Christopher Suárez, another one of our nearshore software developers based in Costa Rica, offered his perspective on how his past as a civil engineer has impacted his practice as a software developer:

  1. Understanding that programming involves more than code: Having a sense for the user-facing front end of software is a huge value-add
  2.  Precision is a requirement, not a nice-to-have: This is true in all programming, but to stay on time and on budget with asynchronous workflows, attention to detail is vital
  3.  An entrepreneurial builder’s mindset can help you look beyond the obvious: Nearshore software developers must think about how to go above and beyond what’s required when constructing the best finished product possible is the objective

Hearing Christopher draw the connections between his previous career and what he’s doing now was terrific, and it highlights more of the value our nearshore software developers bring to Fresh.

Synthesis of ideas and information. Integration with other disciplines, including design, strategy, and hardware. An earnest desire to deliver as much value as possible to projects.

These are just a few hallmarks that make our team to the south best-in-class.

Christopher Suárez — full-stack software developer, life-long learner, and dedicated family man.

Best Practices for the Discipline of Nearshore Software Development

Building software and constructing buildings, or any other civil engineering endeavor, are more similar disciplines than you might think.

Civil engineers design structures that combine stability, usability, and aesthetic beauty. At its core, well-designed software should possess the same qualities. This is especially important for nearshore software developers, whose discipline goes beyond mere code writing. It involves careful integration within a client’s workflows, comprehensive exchange of project information, and laying the foundation for remote collaborators to create world-class solutions that meet client needs.

For nearshore software developers, inspiration for building the best practice possible can come from unexpected places.
For Fresh nearshore software developers, inspiration for building the best practice possible can come from unexpected places.

Let’s explore the fundamental similarities and how adopting specific engineering-centric approaches can significantly enhance a nearshore software developers effectiveness and success in this dynamic field.

The Art of Construction in Software Development

Why start with an analogy to civil engineering?

My foray into software development had an unusual beginning: in the world of civil engineering. During my university studies in civil engineering, where programmable calculators were needed for complex calculations, I discovered in the calculator’s user manual that programs could be created. This intrigued me deeply. It was where I learned to create my first algorithms with conditionals, loops, variables, etc., and developed programs that allowed me to input problem variables and receive all the steps with their respective formulas. I only had to copy from the calculator to the paper during exams.

This experience was a revelation: the programs I developed allowed me to solve exams much faster and without errors. It was my first real understanding of the power and benefits of programming. Although classmates saw this as unfair or cheating, professors valued and recognized my effort to learn and apply programming knowledge. My experience grew to the point where I started selling programs to other classmates.

As a civil engineer, my focus revolved around the complexities of designing functional and aesthetically pleasing structures. However, the job market for civil engineering in Costa Rica offered few opportunities. With the difficulty of finding a job, the company where I had been working for over three years began cost-cutting measures and project closures. In my previous experience being unemployed, it took a year to find a job, so I expected a similar period this time.

By then, an acquaintance had told me he had started studying web development with HTML, CSS, and JavaScript and had found a job in just four months. I clung to this idea and immediately looked into the formal study of the Software Engineering career, as I already knew I liked programming. My idea was to work in whatever I could, either in a civil engineering position or something related to my new programming knowledge. 

It wasn’t easy to find a job in either of my two options, and it was not until two years later that I could secure my first job as a software developer.

But in my transition from civil engineering to software development, I found that the same essential principles of civil engineering – precision, functionality, and aesthetics – were equally crucial. My attention to detail, analytical thinking, and problem-solving skills, vital qualities in engineering, found a new home in software projects. 

Every detail matters in both fields, whether a steel rod in a building or a line of code in an application. In the structural design of a building, each element has its purpose and contributes to the structure’s overall integrity. Similarly, each portion of code crafted by nearshore software developers plays a vital role in creating a compelling and harmonious product.

Tip #1: Embrace a Front-End Approach

Despite positioning myself as a full-stack developer in my nine years of experience, I have a greater affinity for the front-end, where user interface (UI) and user experience (UX) take center stage. I am drawn to the creative and interactive aspects of creating visually appealing interfaces that look good and enhance the overall user experience.

In my life, I have encountered people who don’t care as much about visual details and cannot see them in the same way. Their approach is merely to finish their task as quickly as possible, which is a shortcoming for nearshore software developers. This mindset in creating a software project can have significant implications for the development and design processes. 

I believe nearshore software developers should strive to be “pixel perfect,” which implies meticulous attention to detail, ensuring that every element, from design to typography, aligns precisely to create a visually cohesive and polished result. This level of precision is crucial not only for aesthetic reasons but also for the overall user experience.

In development, overlooking details can lead to functional errors, and in design, it can affect the overall visual harmony. Emphasizing the importance of nearshore software developers being “pixel perfect” underscores a commitment to quality, professionalism, and a user-centric approach, ultimately contributing to the project’s success.

Tip #2: Apply Engineering Precision to Software

In civil engineering, before designing any structure, it is essential to know the loads, weights, and natural phenomena to which the structure will be subjected, and based on that, the necessary features are designed to meet those requirements. 

Similarly, in software development, it is essential to precisely understand the purpose of the application, who will use it, how many people simultaneously, how many results need to be displayed, how many steps are required to reach the expected outcome, etc., and based on that, the best layout, appearance, components, and the most suitable flow for an optimal experience are designed.

Knowing all the details related to the project is crucial to defining the necessary software architecture and the interrelated modules, components, services, and layers. These elements, like the blueprints of a building, serve specific functions, intertwining to constitute the complete application. Just as the blueprints of a building contain detailed and precise specifications, such as measurements, materials, and construction instructions, in software development, exact specifications focus on critical aspects. They are essential to ensuring the project’s effectiveness and success, following the established design meticulously.

In my civil engineering studies, I was taught that if a number was incorrectly noted in the design of a structure, or if a calculation was done incorrectly, or if an important detail was omitted, it could imply incredible material damage or even loss of human lives. In software development, if a comma is placed in the wrong place, the code does not compile, and if a requirement needs to be considered, a solution far from what was really needed could be created. Hence, the importance of seeking the highest precision by using best development practices, having appropriate quality control (QA) to ensure project specifications, and prioritizing periodic demonstrations that showcase project progress, which are valuable for gathering direct feedback, adjusting requirements if necessary, and keeping the client informed about the project’s status.

Tip #3: Adopt an Entrepreneurial Spirit to Innovate and Learn Continuously

In one of the ventures I am involved in, we faced the crucial decision of selecting the framework to develop our web application. With only two developers, we debated between Angular or React and could not agree. However, a third contender emerged that captured our attention: Svelte

Although neither of us had worked with it before, we had heard praise from other developers who fervently recommended it. After analyzing the risks of adopting such a new technology, we decided to take a bold step, setting aside the fear of exploring new horizons and seizing the opportunity to immerse ourselves in its learning, recognizing that it would provide us not only with valuable experience but also the chance to discover innovative solutions for our project.

Several months later, it is clear that choosing Svelte was an extremely wise decision. The learning curve was surprisingly fast; its use felt very natural, and it was astonishing to discover how easy and practical it was to employ its true reactivity, something never seen before. The time needed to develop the web application was less compared to our other alternatives, even considering the time required to familiarize ourselves with the platform.

Additionally, Svelte brought a new element to the process: enjoyment during development due to its pleasant user experience, surpassing my experience with Vue. Since then, Svelte has become my preferred choice. The adventure was not only bold but also brought us a considerable reward.

A similar event occurred when looking for a solution to simplify the backend of one of my ventures to focus on the front end. I also needed a content management system (CMS). I envisioned having a WordPress-style admin dashboard would be very useful, but I was convinced I did not want to use PHP again, so I explored JavaScript-based alternatives in Jamstack.

After analyzing several options and trying those that best suited my needs, I finally discovered Payload CMS. This system is not only a headless CMS but also an app framework. With Payload, I define my data schema and get an instant backend with TypeScript and an admin dashboard. I get my database, API, and admin dashboard with this single solution. Best of all, it is open-source, imposes no restrictions, gives me complete control over the data, and allows configuring performance while being designed to be scalable.

Once again, I could enjoy the advantages of not fearing new technologies, as with a single implementation, I avoided developing three layers or sub-projects in my architecture, leaving me more time to focus on the web application, where I wanted to pay more attention.

Nearshore software development requires meticulous attention to every detail of the process

In summary, the workflow of nearshore software developers is analogous in many aspects to civil engineering, and this underscores the importance of meticulousness in detail. Embracing a front-end approach highlights the need to care for the aesthetics and functionality of interfaces, emphasizing the importance of attention to detail in creating visually appealing and functionally robust interfaces.

Applying engineering precision to software underscores the need to understand project requirements to design an effective architecture thoroughly. It emphasizes that precision in design and development is crucial to avoid functional errors and ensure a harmonious user experience.

As illustrated by exploring solutions like Svelte and Payload CMS, maintaining an entrepreneurial spirit emerges as an essential component. The courage to venture into the unknown is a source of significant rewards.

Back to the work of nearshore software developers. Ultimately, nearshore software development is not just an exercise in code writing but a commitment to quality, precision, and continuous innovation. The combination of engineering principles, a front-end approach, precision in design, and an entrepreneurial mindset is the key to success in this dynamic and challenging field.

A precise approach to design and development is vital in any software project, especially for nearshore software developers, whose work can bring immense ROI in cost-savings and but requires a highly systematic approach to realize.

If you’re interested in discussing more about the approach of Fresh’s nearshore software developers or have a project you’d like help with, contact us!

Fresh nearshore software developers are located throughout the Latam region, including Costa Rica, Brazil, and Colombia.
Fresh nearshore software developers are located throughout the Latam region, including Costa Rica, Brazil, and Colombia. Wherever you are, whatever your software development need, we’re here to help.

Mejores Prácticas para la Disciplina del Desarrollo de Software Nearshore

Construir software y construir edificios, o cualquier otra cosa en ingeniería civil, son disciplinas más similares de lo que podrías pensar.

Los ingenieros civiles diseñan estructuras que combinan estabilidad, usabilidad y belleza estética. En su esencia, un software bien diseñado debería tener las mismas cualidades. Este paralelismo establece la premisa central de que el desarrollo de software nearshore va más allá de la mera escritura de código; implica la integración cuidadosa, la información completa y la preparación de los colaboradores remotos para crear soluciones de clase mundial que satisfagan las necesidades de los clientes.

Exploraremos cómo estas similitudes fundamentales y la adopción de enfoques específicos pueden mejorar significativamente la efectividad y éxito en este dinámico campo de desarrollo.

El Arte de la Construcción en el Desarrollo de Software

¿Por qué empezar con una analogía con la ingeniería civil?

Mi incursión en el desarrollo de software tuvo un comienzo inusual: en el mundo de la ingeniería civil. Durante mis estudios universitarios de mi primera carrera de ingeniería civil, en donde se necesitan calculadoras programables para realizar cálculos muy complejos, descubrí en el manual de usuario de la calculadora que se podían crear programas, lo cual me llamó profundamente la atención. Fue ahí donde aprendí a realizar mis primeros algoritmos con condicionales, bucles, variables, etc., y desarrollé programas que me permitían introducir las variables de entrada del problema y me devolvía todos los pasos con sus respectivas fórmulas, de modo que en el examen yo solo debía copiar desde la calculadora hacia el papel.

Para los desarrolladores de software nearshore, la inspiración para desarrollar las mejores prácticas posibles puede surgir de lugares inesperados.

Esta experiencia fue una revelación: los programas que yo desarrollaba me permitían resolver los exámenes mucho más rápido y sin errores. Fue mi primer entendimiento real del poder y beneficios de la programación. Aunque los compañeros de clase veían esto injusto o como hacer trampa, los profesores por otro lado valoraban y reconocían mi esfuerzo por aprender y aplicar mis conocimientos en programación. Mi experiencia iba en aumento hasta el punto que llegué a vender programas a otros compañeros.

Ya como ingeniero civil, mi énfasis rodeaba las complejidades de diseñar estructuras funcionales y estéticamente agradables. Sin embargo, el mercado laboral de la ingeniería civil en Costa Rica no ofrecía muchas oportunidades. Con lo difícil que era conseguir un empleo, llegó el momento en que la empresa donde venía trabajabando por más de 3 años comenzó a realizar reducciones de costos y cierres de proyectos, y cerraron el proyecto en donde yo estaba contratado, por lo que me quedé sin empleo. En mi experiencia anterior como desempleado había tardado 1 año tratando de conseguir un empleo, así que esta vez me esperaba un tiempo similar.

Para entonces, un conocido me había comentado que había iniciado a estudiar desarrollo de sitios web con HTML, CSS y JavaScript, y que en cuestión de 4 meses consiguió un empleo trabajando con eso. Yo me aferré a esta idea e indagué de una vez sobre el estudio formal de la carrera de Ingeniería en Software, ya que ya de por sí sabía que me gustaba la programación. Mi idea era trabajar en lo primero que pudiera, ya sea en alguna posición de ingeniería civil o en algo con mis nuevos conocimientos en programación. Resumiendo la historia, no fue fácil encontrar trabajo en ninguna de mis 2 opciones y fue hasta 2 años después que pude conseguir mi primer empleo como desarrollador de software.

En mi transición desde la ingeniería civil al desarrollo de software, encontré que los mismos principios escenciales de la ingeniería civil – precisión, funcionalidad y estética – eran igualmente esenciales. Mi atención al detalle, pensamiento analítico y habilidad para resolver problemas, cualidades cruciales en la ingeniería, encontraron un nuevo hogar en los proyectos de software. Cada detalle importa en ambos campos, ya sea una varilla de acero en un edificio o una línea de código en una aplicación. En el diseño estructural de un edificio cada elemento tiene su propósito y contribuye en la integridad general de la estructura. De igual manera cada porción de código en el desarrollo de software juega un papel vital al crear un producto efectivo y armonioso.

Consejo #1: Adoptar un Enfoque de Front-End

A pesar de que en estos 9 años de experiencia me he posicionado como un desarrollador full-stack, debo admitir que tengo mayor afinidad al front-end, donde la interfaz de usuario (UI) y la experiencia de usuario (UX) toman protagonismo. Me siento atraído por los aspectos creativos e interactivos de crear interfaces visualmente atractivas que no solo luzcan bien, sino que también mejoren la experiencia global del usuario.

En mi vida he encontrado personas a las que no les importan los detalles, inclusive me atrevería a decir que carecen de la habilidad de verlos. Su enfoque es meramente finalizar su tarea lo más rápido posible. Tener esta mentalidad en la creación de un projecto de software puede tener implicaciones significativas tanto en el proceso de desarrollo como en el de diseño. Al contrario, se debería ser “pixel perfect”, lo cual implica una atención meticulosa a los detalles, asegurando que cada elemento, desde el diseño hasta la tipografía, se alinee con precisión para crear un resultado visualmente cohesivo y pulido. Este nivel de precisión es crucial no solo por razones estéticas, sino también para la experiencia global del usuario.

En el desarrollo, pasar por alto detalles puede llevar a errores funcionales y, en el diseño, puede afectar la armonía visual general. Destacar la importancia de ser “pixel perfect” subraya un compromiso con la calidad, el profesionalismo y un enfoque centrado en el usuario, contribuyendo en última instancia al éxito del proyecto.

Consejo #2: Aplicar la Precisión de la Ingeniería al Software

En la ingeniería civil, antes de diseñar cualquier estructura es esencial conocer cuáles son las cargas, pesos y fenómenos naturales a las que las estructura va a estar sometida y basado en eso se diseñan las características necesarias para cumplir con esos requerimientos. Por otro lado, en el desarrollo de software, es esencial conocer el propósito de la aplicación, quiénes lo van a utilizar, cuántas personas simultáneamente, cuántos resultados se necesitan mostrar, cuántos pasos se requieren para llegar al resultado esperado, etc., y basado en eso es que se diseña la mejor disposición (layout), qué aspecto debe tener, los componentes a utilizar y el flujo más apropiado para una óptima experiencia.

Conocer con precisión todos los detalles relacionados con el proyecto es crucial para definir la arquitectura de software necesaria, así como los módulos, componentes, servicios y capas interrelacionados. Estos elementos, al igual que los planos de un edificio, desempeñan funciones específicas, entrelazándose para constituir la aplicación completa. Así como los planos de un edificio contienen especificaciones detalladas y precisas, como medidas, materiales e instrucciones de construcción, en el desarrollo de software, las especificaciones detalladas se concentran en aspectos clave y son esenciales para asegurar la eficacia y el éxito del proyecto y deben seguirse meticulosamente según el diseño establecido.

En mis estudios de ingeniería civil me enseñaron que si en el diseño de alguna estructura se anotaba mal un número, o si se hacía un cálculo de forma incorrecta, o si se omitía algún detalle importante, esto podría implicar increíbles daños materiales o inclusive la pérdida de vidas humanas. En el desarrollo de software, si se pone una coma en el lugar incorrecto el código no compila y si no se toma en cuenta un requerimiento se podría crear una solución muy alejada a la que realmente se necesitaba. De aquí la importancia de buscar alcanzar la mayor precisión en cuanto a utilizar mejores prácticas de desarrollo, tener un apropiado control de calidad (QA) para asegurar las especificaciones del projecto y priorizar las demostraciones periódicas donde se muestren los avances del proyecto los cuales son valiosos para recopilar comentarios directos, ajustar requerimientos si es necesario y mantener al cliente informado sobre el estado del proyecto.

Consejo #3: Adoptar un Espíritu Emprendedor para Innovar y Aprender Continuamente

En uno de los emprendimientos en los que estoy involucrado, enfrentamos la decisión crucial de seleccionar el framework para desarrollar nuestra aplicación web. Siendo solo dos desarrolladores, nos debatíamos entre optar por Angular o React, y no llegábamos a un acuerdo. Sin embargo, surgió un tercer contendiente que capturó nuestra atención: Svelte. Aunque ninguno de los dos había trabajado con él previamente, habíamos escuchado elogios de otros desarrolladores que lo recomendaban fervientemente.

Después de analizar los riesgos de adoptar una nueva tecnología como ésta, decidimos dar un paso valiente, dejando a un lado el temor de explorar nuevos horizontes y aprovechar la oportunidad de sumergirnos en su aprendizaje, reconociendo que nos brindaría no solo una experiencia valiosa, sino también la posibilidad de descubrir soluciones innovadoras para nuestro proyecto.

Varios meses después, podemos afirmar con certeza que optar por Svelte fue una decisión sumamente acertada. La curva de aprendizaje fue asombrosamente rápida; su uso sentía muy natural y a la vez era sorprendente descubrir lo fácil y práctico que era emplear su verdadera reactividad, algo nunca antes visto. Considero que el tiempo necesario para desarrollar la aplicación web fue menor en comparación con las otras alternativas que teníamos, incluso teniendo en cuenta el tiempo necesario para familiarizarnos con la plataforma.

Además, Svelte aportó un nuevo elemento al proceso: el disfrute durante el desarrollo gracias a su experiencia de uso agradable, superando incluso la experiencia que tuve con Vue. Desde entonces, Svelte se ha convertido en mi elección predilecta para todos mis nuevos emprendimientos. La aventura no solo fue valiente, sino que también nos brindó una recompensa considerable.

Una aventura similar fue cuando buscaba una solución para simplificar el back-end de uno de mis emprendimientos para así enfocarme en el front-end. Necesitaba además un sistema de gestión de contenido (CMS). Visualizaba que tener un admin dashboard al estilo de WordPress me sería de mucha utilidad, pero estaba convencido que no quería volver a utilizar PHP nunca más, por lo que exploré alternativas en Jamstack que utilizaran JavaScript.

Después de analizar varias opciones y probar aquellas que mejor se adaptaban a mis necesidades, finalmente descubrí Payload CMS. Este sistema no solo es un headless CMS, sino también un app framework. Con Payload, simplemente defino el esquema de mis datos, y obtengo un backend completo con TypeScript y un panel de administrador al instante. Con esta única solución, obtengo mi base de datos, mi API y mi admin dashboard. Lo mejor de todo es que es de código abierto, no impone restricciones y me otorga un control total sobre los datos, sin dejar de lado que permite configurar el rendimiento y está diseñado para ser escalable.

Nuevamente pude disfrutar de las ventajas de perderle el miedo a nuevas tecnologías, ya que con una única implementación, logré evitar el desarrollo de tres capas o sub-proyectos en mi arquitectura, dejándome más tiempo para enfocarme en la aplicación web que era donde deseaba poner poner más atención.

El desarrollo de software nearshore requiere una atención meticulosa a cada detalle del proceso

En resumen, el desarrollo de software nearshore, análogo en muchos aspectos a la ingeniería civil, subraya la importancia de la meticulosidad en los detalles. Adoptar un enfoque de front-end destaca la necesidad de cuidar la estética y funcionalidad de las interfaces, resalta la importancia de la atención al detalle en la creación de interfaces visualmente atractivas y funcionalmente sólidas.

La aplicación de la precisión de la ingeniería al software subraya la necesidad de comprender a fondo los requisitos del proyecto para diseñar una arquitectura eficaz. Se destaca que la precisión en el diseño y desarrollo es crucial para evitar errores funcionales y garantizar una experiencia del usuario armoniosa.

Mantener un espíritu emprendedor, como ilustrado al explorar soluciones como Svelte y Payload CMS, emerge como un componente esencial. La valentía de aventurarse en lo desconocido se revela como una fuente de recompensas significativas.

Finalmente, el desarrollo de software nearshore no es simplemente un ejercicio de escritura de código, sino un compromiso con la calidad, la precisión y la innovación constante. La combinación de principios de ingeniería, enfoque de front-end, precisión en el diseño y mentalidad emprendedora se revela como la clave para el éxito en este ámbito dinámico y desafiante.

Una aproximación precisa al diseño y desarrollo resulta fundamental en cualquier proyecto de software, especialmente en el desarrollo de software nearshore. En este contexto, el retorno de inversión derivado del ahorro de costos y del trabajo asincrónico es significativo, pero alcanzarlo demanda un enfoque altamente sistemático.

Si tienes interés en explorar con más detalle las capacidades de desarrollo de software nearshore de Fresh, o si cuentas con un proyecto en el que necesitas asistencia, ¡contáctanos!

Photo-Grayscale.jpg

Christopher Suárez

Sr. Full-Stack Software Developer

Christopher is an experienced developer with a specialization in front-end, who loves good UX and good-looking UI. He has developed expertise in a wide variety of different technologies for desktop apps, mobile apps, and web apps.

He enjoys listening more than talking and is interested in topics such as coding best practices, finance, and investments, but mostly about videos and e-books that teach him to be a better developer, husband, father, Christian, and human being.