Work Placement

Work Integrated Learning

I participated in WIL work placement program provided through Griffith University in 2023. My placement was delivered remotely and involved working as a junior developer on a software development project at Aperi/Alloc8te, a fin-tech startup. The project centres around feature enhancements for Alloc8te, a financial auditing system. I engaged in the development of both frontend and backend.

Critical Analysis of Placement

As a junior full-stack developer, I developed features to enhance user experience and improve workflow for the Alloc8te system, a financial auditing system to produce rental affordability reports for real estate agents. The features include displaying a map for applicants to be informed about which property they are applying for, and grouping co-applicant reports to improve the report visibility for real estate agents. I took several online courses prior to and during my placement to cover related knowledge as I realised that the tasks required more advanced knowledge of software frameworks and programming languages than I possessed.

Whilst I received positive feedback as being a quick learner, through code reviews and discussions with my supervisor, I was advised that my code needed improvements in abstraction and quality relating to maintainability and reusability. My supervisor also emphasised the importance of code being supportive of business objectives and plans. This stance was consistent throughout the placement among my supervisor and the business manager. In the all-day development strategic meeting that I was generously included in, the same stance was apparent in their discussions about considerations of technologies, programming languages, and deployment solutions. The team discussed where the business was heading and possible scenarios and risks along the way. Engineers in the team proposed possible technological solutions that support the business goals and adapt to some predicted scenarios while mitigating some risks.

I completed all feature enhancements on time as planned. Senior developers approved my submissions, and my code was merged into the main development branch in the codebase. These feature enhancements will be included in the final product to enhance customer experience.

Up until this placement, my focus was on learning new languages, frameworks, system design, and project management, which involved the 'what' and 'how'. I was aware of software design patterns and some rules around programming. However, I was not critically thinking about how my piece of code might affect other parts of the system or how it would evolve later. This experience highlighted my limited knowledge of design patterns and programming principles that consider various factors in systems. I need to shift my focus to 'why' aspects when I code to consider factors such as maintainability, modularity, and life span.

This also relates to the importance of understanding business objectives and plans that I learned in this placement. I have always been curious about how businesses operate and what their goals are. I usually consider these business aspects when I design systems so that they are useful and bring benefits to both businesses and end-users. Nonetheless, my coding practice was not up to the same mindset and did not consider much of their business aspects. At the same time, I understand that it was not something that I could have started performing as I only started to understand their business visions towards the end of my placement.

Information systems should support business activities effectively and adapt as business pivots in the ever-changing environment. To ensure that, engineers must know where the business is heading and have a shared vision among teammates. This can be achieved through good team communication between the business and technical sides to foster shared values and future vision.

The insights that I gained from the placement truly exceeded my expectations in terms of depth and comprehensiveness. One significant benefit of understanding the importance of thinking critically while coding is that it elevated my view on programming and software. It's not just about software frameworks we use, which language we code, or how efficiently that code runs. It needs to adapt and evolve with business continuously to cater for needs and provide positive experiences to users and customers. While there are clear indications of technical skills that I need to improve, I gained new views on software and business that motivate my journey of continuous learning after my university degree. The placement also inspired me to look for a job and organisation that aligns with my interests and values. My motivation for learning and career aspirations have always stemmed from my desire to contribute to society. Now with the new insights from the placement, my vision of future career path gained clarity with some plans.

My immediate plan is to learn software design patterns and principles to build a solid foundation for architectural decision-making ability. In particular, I will finish reading the book “Design Patterns” which my supervisor recommended for learning object-oriented design theories and practice. I will expand my interest in various business models to develop a better understanding of business needs. Additionally, I will actively look out for innovative organisations that are making positive changes in the fields of privacy protection, environment, and equal opportunity which I am passionate about.

Technical and Transferable Skills

Software Design Principles

In this work placement, I faced a pivotal moment during my first code review, where I was criticised for lacking sufficient abstraction in my coding practices. Until then, my focus had been primarily on learning new programming languages and frameworks. My supervisor emphasised the importance of software design principles such as abstraction, pure functions, and loose coupling to maintain a high-quality codebase.

Taking my supervisor's feedback onboard, I embarked on a journey to improve my understanding of software design principles. I studied abstraction to improve code readability and maintainability. I learned the importance of pure functions for predictable code. I researched coupling and cohesion to make the code more maintainable and scalable. I also researched the concepts of reusability, scalability, modularity, and the longevity of code. I consciously applied these principles in my subsequent work, especially in the backend where decoupling was a significant challenge. I had to carefully consider how to place my new code and modify the existing structure with minimal changes when I was working on a new entity implementation.

As a result of this focused learning and application, my coding practices improved. My code has become more maintainable and scalable, and it now aligns better with the style and values expressed in the existing codebase. Although I received positive feedback in subsequent code reviews, I recognise that I have only scratched the surface. While the depth of my understanding and awareness around software design principles has certainly increased, I acknowledge that it is an ongoing process. I am not yet fully conversant with software design patterns and lack sufficient experience to make consistently sound judgements in action.

This placement served as a wake-up call for me to appreciate the depth and breadth of software engineering beyond just programming languages and frameworks. The principles of software design are not just theoretical concepts; they are practical tools that can significantly reduce bugs, improve maintainability, and enhance scalability when applied correctly. While I acknowledge that mastering these principles will be a long-term commitment, I am excited about this continuous learning journey as I aim to grow into a proficient software developer.

Software Frameworks

During my work placement, I was tasked with developing a full-stack system. The front-end system used React framework with TypeScript language, the backend was built on .NET framework in C# with utilising Entity Framework for object-relational mapping (ORM). While I had some familiarity with React, my knowledge was limited in the areas of .NET and Entity Framework. I recognised the need to learn these areas to prepare myself for the placement. The need to learn persisted throughout the placement as the level of required knowledge dramatically increased when I started developing the complex back-end system.

Before the start of the placement, I updated my knowledge of React by completing the official tutorials. I also completed a training course from LinkedIn Learning for TypeScript. Additionally, I completed two more courses to become familiar with .NET, C#, and Entity Framework. Learning .NET was challenging as it is robust in its nature of catering to multi-platform architecture and various solutions including web applications and web APIs. During work hours, looking through technical documentation and solutions on question-and-answer websites such as Stack Overflow consumed much of my time. I kept notes to record what I found from the research and listed names of technologies and terms for reviewing and further learning in the future.

As a result, I successfully developed components for the front-end system and gained some confidence in front-end development. For the back-end system, my understanding of the codebase increased incrementally each time I gained knowledge about a piece of technology used in the system. My familiarity with Entity Framework increased through repeated attempt-error of database migrations. Towards the end, I started to appreciate the robustness of .NET and the convenience of Entity Framework and LINQ query language as I became more comfortable in manipulating data.

The placement was a critical learning experience that highlighted the importance of proactive skill development. I learned that mastering a technology involves understanding not just its syntax but also its best practices and the broader ecosystem. My confidence was enhanced through becoming familiar with technologies and iterative learning efforts. Looking ahead, I am committed to continuous learning, aiming to deepen my understanding of .NET, Entity Framework, and other evolving technologies. This placement has reinforced the importance of ongoing professional development in my future career as a software developer.

Professional Accountability

I consider competency is a core value in my professionalism and ensure that clients and employers receive quality work from me. I am also aware that competency is a fundamental tenet of the ACS Code of Professional Conduct. My placement involved developing a frontend system using React with TypeScript and a .NET backend system in C#. While I had some experience with React and TypeScript, I was less familiar with .NET and C#. I also noticed halfway through the placement that the backend system utilised Entity Framework to manage data manipulation. Towards the end, the difficulty of my tasks increased as programming more backend code with addition of a new database entity and API routes. The need to update my knowledge and prepare for new set of technologies was apparent to align with my professionalism.

To ensure my competency and timely delivery of tasks, I took the initiative to enhance my skills both before and during the placement. I refreshed my knowledge of React and TypeScript to ensure my knowledge was up to date. Additionally, I took several LinkedIn Learning courses to acquaint myself with .NET, C#, and the Entity Framework. I also looked up names of libraries used in the system and read documentations to understand their characteristics and how they were utilised in the system during the development.

My preparation and knowledge resulted in delivering tasks on-time. As I deepened my understanding of the technologies used, I gained greater respect for the complexity of the enterprise codebase. This also enhanced my ability to engage in more meaningful and professional conversations with my supervisor and colleagues. Nonetheless, I recognised my preparation did not give instant proficiency to code from scratch. Mimicking the other parts of code written by other developers was all I could do most of the time.

This experience highlighted the importance of professionalism, loyalty, and competency for successful project execution. It also demonstrated how thorough preparation can improve communication with colleagues. Nonetheless, it was also a good reminder that there is a great range of technologies to support a wide variety of needs. I also learned that continuous practice and building experience are critical for becoming a proficient software developer. Technologists can provide great solutions only when they continuously learn and update their knowledge. Going forward, I will apply these insights to improve my professionalism to make better decisions that ensure high-quality and timely project delivery.

About Me

I am a highly motivated and dedicated software developer with creativity and eagerness to learn new things. My motivation comes from my desire to create something meaningful and continuously improve myself. Through my Bachelor of Intelligent Digital Technologies at Griffith University, I have gained knowledge and skills in software development and human-computer interaction. I am capable of programming in JavaScript, TypeScript, Python, Swift, and C# with the ability to utilise frameworks such as React, Angular, and .NET.

In addition to academic pursuits, I have gained practical experience by undertaking contract roles as a project manager and full-stack developer for App Factory projects at Griffith University. I extended my skills and knowledge to a practical level while improving my project management ability and communication skills with clients and teammates. During my recent placement as a junior developer, I had a valuable opportunity to immerse myself in an enterprise-level codebase. I enhanced my critical thinking with a holistic view to write code that is scalable, maintainable, and aligned with business objectives and values. I have also gained confidence in my collaborative abilities through effective communication with business managers, UX designers, and engineers.

Furthermore, I have a keen interest in emerging technologies such as AI, blockchain, and cloud computing as I always look out for new trends and technologies to improve our capabilities. I continually update my skills and knowledge to adapt to new challenges. My interests also extend to social and ethical responsibility. I practice reflection-in-action to ensure my actions and decisions have positive implications for both business and society.

I am excited about the prospect of a future role as a software developer at an innovative company, where I can contribute my unique set of skills and experiences to make a positive impact on society.

Extra-Curricular Experience

I have been involved in software development as a member of App Factory, a software development division at Griffith University. I joined App Factory to apply knowledge and skills learned from university courses and gain professional experience. With a dual role as a project manager and developer, I had a range of responsibilities, from budgeting to deployment. The projects were diverse and required me to adapt to various technologies and client needs.

To meet these challenges, I conducted research on business domains and technologies that could best serve project objectives and updated my competencies accordingly. I always reviewed my technological knowledge such as typescript and React prior to starting projects. I also learned new skills by prototyping. To ensure that all stakeholders remained informed and aligned, I maintained punctual communication and utilised visual tools like charts and mock-ups to clarify technical matters for non-technical clients. I also emphasised collaborative efforts. I actively sought insights from colleagues to learn about managerial tasks and helped struggling team members.

My efforts brought successful project outcomes with solutions aligned to business objectives within budgets and timeframes. My clients expressed their satisfaction with my work quality and the end products. One of them offered me additional work.

The experience reinforced the importance of effective communication, especially when handling a dual role that involves both technical and managerial tasks. I learned that taking the time to understand the client's business aspect adds a layer of value to the technical solutions. This business-driven development approach is something that I intend to refine and carry into future roles. I also recognised the importance of team dynamics in project success. I plan to further improve my project management skills and keep my technological knowledge up to date to offer valuable solutions for future projects.

Video: Demonstration of SAHI Web App from the Last Project at Griffith App Factory


Discover what people have to say about their experiences working with me.

" Toshi displayed excellent communication and project management skills. He went beyond meeting requests by the clients, critically analysing the core business challenges to provide technically sound and business-savvy solutions "

Sebastian Binnewies

Director, Griffith App Factory

" Toshi's abilities equally in the tech and design world are astounding. Working with him as the co-owner of a leather-goods business, meant that I could rely on his foresight and acumen across of our needs our tech and design needs. "

Jarren Borghero

Co-business owner, Temono

Look at my GitHub Repos

See other projects that I developed!